]> sourceware.org Git - glibc.git/commitdiff
Use SCANF_ISOC99_A instead of _IO_FLAGS2_SCANF_STD.
authorZack Weinberg <zackw@panix.com>
Wed, 7 Mar 2018 19:31:59 +0000 (14:31 -0500)
committerGabriel F. T. Gomes <gabriel@inconstante.eti.br>
Wed, 5 Dec 2018 20:15:42 +0000 (18:15 -0200)
Change the callers of __vfscanf_internal and __vfwscanf_internal that
want C99-compliant behavior to communicate this via the new flags
argument, rather than setting bits on the FILE object.  This also
means these functions do not need to do their own locking.

Tested for powerpc and powerpc64le.

16 files changed:
ChangeLog
libio/libio.h
libio/libioP.h
stdio-common/isoc99_fscanf.c
stdio-common/isoc99_scanf.c
stdio-common/isoc99_sscanf.c
stdio-common/isoc99_vfscanf.c
stdio-common/isoc99_vscanf.c
stdio-common/isoc99_vsscanf.c
stdio-common/vfscanf-internal.c
wcsmbs/isoc99_fwscanf.c
wcsmbs/isoc99_swscanf.c
wcsmbs/isoc99_vfwscanf.c
wcsmbs/isoc99_vswscanf.c
wcsmbs/isoc99_vwscanf.c
wcsmbs/isoc99_wscanf.c

index d2a188855416219fd0cd2956537c9ef1a4b84234..d8cbbcc62300419e80987f92badf21fcf459c067 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,29 @@
+2018-12-05  Zack Weinberg  <zackw@panix.com>
+           Gabriel F. T. Gomes  <gabriel@inconstante.eti.br>
+
+       * stdio-common/isoc99_scanf.c
+       * stdio-common/isoc99_fscanf.c
+       * stdio-common/isoc99_sscanf.c
+       * stdio-common/isoc99_vscanf.c
+       * stdio-common/isoc99_vfscanf.c
+       * stdio-common/isoc99_vsscanf.c
+       * wcsmbs/isoc99_wscanf.c
+       * wcsmbs/isoc99_fwscanf.c
+       * wcsmbs/isoc99_swscanf.c
+       * wcsmbs/isoc99_vwscanf.c
+       * wcsmbs/isoc99_vfwscanf.c
+       * wcsmbs/isoc99_vswscanf.c:
+       Pass SCANF_ISOC99_A to __vfscanf_internal and/or __vfwscanf_internal.
+       Do not set _IO_FLAGS2_SCANF_STD on the FILE passed to that function.
+       No need to lock and unlock the FILE passed to that function.
+
+       * stdio-common/vfscanf-internal.c
+       (__vfscanf_internal, __vfwscanf_internal):
+       Don't look at _IO_FLAGS2_SCANF_STD.
+       * libio/libioP.h (_IO_acquire_lock_clear_flags2_fct)
+       (_IO_release_lock): Don't clear _IO_FLAGS2_SCANF_STD.
+       * libio/libio.h (_IO_FLAGS2_SCANF_STD): Delete.
+
 2018-12-05  Zack Weinberg  <zackw@panix.com>
            Gabriel F. T. Gomes  <gabriel@inconstante.eti.br>
 
index d4eba2df54bf1764fe1113fd786a0631a25c8810..30cb7d784f39a8a38b51cd13ee39b646f633493c 100644 (file)
@@ -92,7 +92,6 @@ typedef union
 #define _IO_FLAGS2_NOTCANCEL 2
 #define _IO_FLAGS2_FORTIFY 4
 #define _IO_FLAGS2_USER_WBUF 8
-#define _IO_FLAGS2_SCANF_STD 16
 #define _IO_FLAGS2_NOCLOSE 32
 #define _IO_FLAGS2_CLOEXEC 64
 #define _IO_FLAGS2_NEED_LOCK 128
index 525dce19ee0ea387a61d99783ca7d230a0611c83..9e971cb96b6d01144dc6846eefd8699844c57c1a 100644 (file)
@@ -786,7 +786,7 @@ __attribute__ ((__always_inline__))
 _IO_acquire_lock_clear_flags2_fct (FILE **p)
 {
   FILE *fp = *p;
-  fp->_flags2 &= ~(_IO_FLAGS2_FORTIFY | _IO_FLAGS2_SCANF_STD);
+  fp->_flags2 &= ~(_IO_FLAGS2_FORTIFY);
   if ((fp->_flags & _IO_USER_LOCK) == 0)
     _IO_funlockfile (fp);
 }
@@ -800,8 +800,7 @@ _IO_acquire_lock_clear_flags2_fct (FILE **p)
     FILE *_IO_acquire_lock_file = (_fp)
 # define _IO_release_lock(_fp)                                               \
     if (_IO_acquire_lock_file != NULL)                                       \
-      _IO_acquire_lock_file->_flags2 &= ~(_IO_FLAGS2_FORTIFY                 \
-                                          | _IO_FLAGS2_SCANF_STD);           \
+      _IO_acquire_lock_file->_flags2 &= ~(_IO_FLAGS2_FORTIFY);               \
   } while (0)
 #endif
 
index 4210d11f2b9f132759830299deaccc6fa6826461..d7b5993f3e036462fba025600ccc99654413278a 100644 (file)
 #include <stdio.h>
 
 /* Read formatted input from STREAM according to the format string FORMAT.  */
-/* VARARGS2 */
 int
 __isoc99_fscanf (FILE *stream, const char *format, ...)
 {
   va_list arg;
   int done;
 
-  _IO_acquire_lock_clear_flags2 (stream);
-  stream->_flags2 |= _IO_FLAGS2_SCANF_STD;
-
   va_start (arg, format);
-  done = __vfscanf_internal (stream, format, arg, 0);
+  done = __vfscanf_internal (stream, format, arg, SCANF_ISOC99_A);
   va_end (arg);
 
-  _IO_release_lock (stream);
   return done;
 }
index 64c873eed90aef553fb2928ca46838385ef44f3c..3998322ea1172e9702b0ebc86569be87e52a5a9e 100644 (file)
 #include <stdio.h>
 #include <libioP.h>
 
-
 /* Read formatted input from stdin according to the format string FORMAT.  */
-/* VARARGS1 */
 int
 __isoc99_scanf (const char *format, ...)
 {
   va_list arg;
   int done;
 
-#ifdef _IO_MTSAFE_IO
-  _IO_acquire_lock_clear_flags2 (stdin);
-#endif
-  stdin->_flags2 |= _IO_FLAGS2_SCANF_STD;
-
   va_start (arg, format);
-  done = __vfscanf_internal (stdin, format, arg, 0);
+  done = __vfscanf_internal (stdin, format, arg, SCANF_ISOC99_A);
   va_end (arg);
 
-#ifdef _IO_MTSAFE_IO
-  _IO_release_lock (stdin);
-#endif
   return done;
 }
index 2c89a03fe93a462ea1366705da4217f125a270db..c9e5103b81aa8cf3d3b8dfd3ade3a6b4b3ae2f1c 100644 (file)
@@ -26,10 +26,9 @@ __isoc99_sscanf (const char *s, const char *format, ...)
   int done;
   _IO_strfile sf;
   FILE *f = _IO_strfile_read (&sf, s);
-  f->_flags2 |= _IO_FLAGS2_SCANF_STD;
 
   va_start (arg, format);
-  done = __vfscanf_internal (f, format, arg, 0);
+  done = __vfscanf_internal (f, format, arg, SCANF_ISOC99_A);
   va_end (arg);
 
   return done;
index c96ca831ae383df09360ce21742c50975c20c8fa..3c59c60b3e6d0bff92bb9904d97e5bd7a7cbdd05 100644 (file)
 #include <stdio.h>
 
 /* Read formatted input from STREAM according to the format string FORMAT.  */
-/* VARARGS2 */
 int
 __isoc99_vfscanf (FILE *stream, const char *format, va_list args)
 {
-  int done;
-
-  _IO_acquire_lock_clear_flags2 (stream);
-  stream->_flags2 |= _IO_FLAGS2_SCANF_STD;
-  done = __vfscanf_internal (stream, format, args, 0);
-  _IO_release_lock (stream);
-  return done;
+  return __vfscanf_internal (stream, format, args, SCANF_ISOC99_A);
 }
 libc_hidden_def (__isoc99_vfscanf)
index 72ae72ddee2ebcf19fbb9319e0cc3d435455ac6e..fc5d609ae7fdc5c6e0884500091405584fe384bf 100644 (file)
 #include <stdio.h>
 
 /* Read formatted input from STDIN according to the format string FORMAT.  */
-/* VARARGS2 */
 int
 __isoc99_vscanf (const char *format, va_list args)
 {
-  int done;
-
-  _IO_acquire_lock_clear_flags2 (stdin);
-  stdin->_flags2 |= _IO_FLAGS2_SCANF_STD;
-  done = __vfscanf_internal (stdin, format, args, 0);
-  _IO_release_lock (stdin);
-  return done;
+  return __vfscanf_internal (stdin, format, args, SCANF_ISOC99_A);
 }
index 02bc0f50e63ca65ce80853292b326f33895bce59..dfc394bb51797efd3b55139dfd8e304927a445a1 100644 (file)
@@ -31,7 +31,6 @@ __isoc99_vsscanf (const char *string, const char *format, va_list args)
 {
   _IO_strfile sf;
   FILE *f = _IO_strfile_read (&sf, string);
-  f->_flags2 |= _IO_FLAGS2_SCANF_STD;
-  return __vfscanf_internal (f, format, args, 0);
+  return __vfscanf_internal (f, format, args, SCANF_ISOC99_A);
 }
 libc_hidden_def (__isoc99_vsscanf)
index 6bd0138f669cfc8511ac6c9701b76902b52c8e5b..df79d91eda932244ca1ef3f4a3bdca779311b8c2 100644 (file)
@@ -335,8 +335,6 @@ __vfscanf_internal (FILE *s, const char *format, va_list argptr,
   /* Temporarily honor the environmental mode bits.  */
   if (__ldbl_is_dbl)
     mode_flags |= SCANF_LDBL_IS_DBL;
-  if (s->_flags2 & _IO_FLAGS2_SCANF_STD)
-    mode_flags |= SCANF_ISOC99_A;
 
 #ifdef __va_copy
   __va_copy (arg, argptr);
index 00b07dd48e38141af02239122334142062fe243f..5829607916b93c317152e7a8ae83f0cc766dfa7d 100644 (file)
 #include <wchar.h>
 
 /* Read formatted input from STREAM according to the format string FORMAT.  */
-/* VARARGS2 */
 int
 __isoc99_fwscanf (FILE *stream, const wchar_t *format, ...)
 {
   va_list arg;
   int done;
 
-  _IO_acquire_lock_clear_flags2 (stream);
-  stream->_flags2 |= _IO_FLAGS2_SCANF_STD;
-
   va_start (arg, format);
-  done = __vfwscanf_internal (stream, format, arg, 0);
+  done = __vfwscanf_internal (stream, format, arg, SCANF_ISOC99_A);
   va_end (arg);
 
-  _IO_release_lock (stream);
   return done;
 }
index 40401d0aa1d70347b8ecea9b3123db28279c96c7..f90e56d97fe5cbb3a62a2fca582f7cc53d52309c 100644 (file)
@@ -28,10 +28,9 @@ __isoc99_swscanf (const wchar_t *s, const wchar_t *format, ...)
   _IO_strfile sf;
   struct _IO_wide_data wd;
   FILE *f = _IO_strfile_readw (&sf, &wd, s);
-  f->_flags2 |= _IO_FLAGS2_SCANF_STD;
 
   va_start (arg, format);
-  done = __vfwscanf_internal (f, format, arg, 0);
+  done = __vfwscanf_internal (f, format, arg, SCANF_ISOC99_A);
   va_end (arg);
 
   return done;
index f70c6b596dd00f34caf0e6741d37132ffb30b11d..715d354b5ad65145c8939ed7aafec4bb180c1047 100644 (file)
 #include <wchar.h>
 
 /* Read formatted input from STREAM according to the format string FORMAT.  */
-/* VARARGS2 */
 int
 __isoc99_vfwscanf (FILE *stream, const wchar_t *format, va_list args)
 {
-  int done;
-
-  _IO_acquire_lock_clear_flags2 (stream);
-  stream->_flags2 |= _IO_FLAGS2_SCANF_STD;
-  done = __vfwscanf_internal (stream, format, args, 0);
-  _IO_release_lock (stream);
-  return done;
+  return __vfwscanf_internal (stream, format, args, SCANF_ISOC99_A);
 }
 libc_hidden_def (__isoc99_vfwscanf)
index b91eb651a3e9f5e0f9afdc86d9f0077dd0f21273..0d8ef7611a5ce3dcded513e979fc2bb38bfeaf90 100644 (file)
@@ -33,7 +33,6 @@ __isoc99_vswscanf (const wchar_t *string, const wchar_t *format, va_list args)
   _IO_strfile sf;
   struct _IO_wide_data wd;
   FILE *f = _IO_strfile_readw (&sf, &wd, string);
-  f->_flags2 |= _IO_FLAGS2_SCANF_STD;
-  return __vfwscanf_internal (f, format, args, 0);
+  return __vfwscanf_internal (f, format, args, SCANF_ISOC99_A);
 }
 libc_hidden_def (__isoc99_vswscanf)
index eb22c8acae0f923ab408f521c9e4f254dd3adfa7..3ac31826086d7a6952185c9b1c40d1af23b8eff8 100644 (file)
 #include <wchar.h>
 
 /* Read formatted input from STDIN according to the format string FORMAT.  */
-/* VARARGS2 */
 int
 __isoc99_vwscanf (const wchar_t *format, va_list args)
 {
-  int done;
-
-  _IO_acquire_lock_clear_flags2 (stdin);
-  stdin->_flags2 |= _IO_FLAGS2_SCANF_STD;
-  done = __vfwscanf_internal (stdin, format, args, 0);
-  _IO_release_lock (stdin);
-  return done;
+  return __vfwscanf_internal (stdin, format, args, SCANF_ISOC99_A);
 }
index 59f80d78fb0011127b1aaf1b3fd1828650670e71..b9418f791255051797de7bf20cd0dbadb0416388 100644 (file)
 
 
 /* Read formatted input from stdin according to the format string FORMAT.  */
-/* VARARGS1 */
 int
 __isoc99_wscanf (const wchar_t *format, ...)
 {
   va_list arg;
   int done;
 
-  _IO_acquire_lock_clear_flags2 (stdin);
-  stdin->_flags2 |= _IO_FLAGS2_SCANF_STD;
-
   va_start (arg, format);
-  done = __vfwscanf_internal (stdin, format, arg, 0);
+  done = __vfwscanf_internal (stdin, format, arg, SCANF_ISOC99_A);
   va_end (arg);
 
-  _IO_release_lock (stdin);
   return done;
 }
This page took 0.078938 seconds and 5 git commands to generate.