mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-27 03:33:33 +08:00
Use SCANF_ISOC99_A instead of _IO_FLAGS2_SCANF_STD.
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.
This commit is contained in:
parent
349718d4d7
commit
b87eb3f8fe
26
ChangeLog
26
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>
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -20,20 +20,15 @@
|
||||
#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;
|
||||
}
|
||||
|
@ -19,26 +19,16 @@
|
||||
#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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -19,16 +19,9 @@
|
||||
#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)
|
||||
|
@ -19,15 +19,8 @@
|
||||
#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);
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
@ -21,20 +21,15 @@
|
||||
#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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -20,16 +20,9 @@
|
||||
#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)
|
||||
|
@ -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)
|
||||
|
@ -20,15 +20,8 @@
|
||||
#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);
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user