diff --git a/ChangeLog b/ChangeLog index d2a1888554..d8cbbcc623 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,29 @@ +2018-12-05 Zack Weinberg + Gabriel F. T. Gomes + + * 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 Gabriel F. T. Gomes diff --git a/libio/libio.h b/libio/libio.h index d4eba2df54..30cb7d784f 100644 --- a/libio/libio.h +++ b/libio/libio.h @@ -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 diff --git a/libio/libioP.h b/libio/libioP.h index 525dce19ee..9e971cb96b 100644 --- a/libio/libioP.h +++ b/libio/libioP.h @@ -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 diff --git a/stdio-common/isoc99_fscanf.c b/stdio-common/isoc99_fscanf.c index 4210d11f2b..d7b5993f3e 100644 --- a/stdio-common/isoc99_fscanf.c +++ b/stdio-common/isoc99_fscanf.c @@ -20,20 +20,15 @@ #include /* 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; } diff --git a/stdio-common/isoc99_scanf.c b/stdio-common/isoc99_scanf.c index 64c873eed9..3998322ea1 100644 --- a/stdio-common/isoc99_scanf.c +++ b/stdio-common/isoc99_scanf.c @@ -19,26 +19,16 @@ #include #include - /* 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; } diff --git a/stdio-common/isoc99_sscanf.c b/stdio-common/isoc99_sscanf.c index 2c89a03fe9..c9e5103b81 100644 --- a/stdio-common/isoc99_sscanf.c +++ b/stdio-common/isoc99_sscanf.c @@ -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; diff --git a/stdio-common/isoc99_vfscanf.c b/stdio-common/isoc99_vfscanf.c index c96ca831ae..3c59c60b3e 100644 --- a/stdio-common/isoc99_vfscanf.c +++ b/stdio-common/isoc99_vfscanf.c @@ -19,16 +19,9 @@ #include /* 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) diff --git a/stdio-common/isoc99_vscanf.c b/stdio-common/isoc99_vscanf.c index 72ae72ddee..fc5d609ae7 100644 --- a/stdio-common/isoc99_vscanf.c +++ b/stdio-common/isoc99_vscanf.c @@ -19,15 +19,8 @@ #include /* 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); } diff --git a/stdio-common/isoc99_vsscanf.c b/stdio-common/isoc99_vsscanf.c index 02bc0f50e6..dfc394bb51 100644 --- a/stdio-common/isoc99_vsscanf.c +++ b/stdio-common/isoc99_vsscanf.c @@ -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) diff --git a/stdio-common/vfscanf-internal.c b/stdio-common/vfscanf-internal.c index 6bd0138f66..df79d91eda 100644 --- a/stdio-common/vfscanf-internal.c +++ b/stdio-common/vfscanf-internal.c @@ -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); diff --git a/wcsmbs/isoc99_fwscanf.c b/wcsmbs/isoc99_fwscanf.c index 00b07dd48e..5829607916 100644 --- a/wcsmbs/isoc99_fwscanf.c +++ b/wcsmbs/isoc99_fwscanf.c @@ -21,20 +21,15 @@ #include /* 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; } diff --git a/wcsmbs/isoc99_swscanf.c b/wcsmbs/isoc99_swscanf.c index 40401d0aa1..f90e56d97f 100644 --- a/wcsmbs/isoc99_swscanf.c +++ b/wcsmbs/isoc99_swscanf.c @@ -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; diff --git a/wcsmbs/isoc99_vfwscanf.c b/wcsmbs/isoc99_vfwscanf.c index f70c6b596d..715d354b5a 100644 --- a/wcsmbs/isoc99_vfwscanf.c +++ b/wcsmbs/isoc99_vfwscanf.c @@ -20,16 +20,9 @@ #include /* 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) diff --git a/wcsmbs/isoc99_vswscanf.c b/wcsmbs/isoc99_vswscanf.c index b91eb651a3..0d8ef7611a 100644 --- a/wcsmbs/isoc99_vswscanf.c +++ b/wcsmbs/isoc99_vswscanf.c @@ -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) diff --git a/wcsmbs/isoc99_vwscanf.c b/wcsmbs/isoc99_vwscanf.c index eb22c8acae..3ac3182608 100644 --- a/wcsmbs/isoc99_vwscanf.c +++ b/wcsmbs/isoc99_vwscanf.c @@ -20,15 +20,8 @@ #include /* 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); } diff --git a/wcsmbs/isoc99_wscanf.c b/wcsmbs/isoc99_wscanf.c index 59f80d78fb..b9418f7912 100644 --- a/wcsmbs/isoc99_wscanf.c +++ b/wcsmbs/isoc99_wscanf.c @@ -22,20 +22,15 @@ /* 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; }