1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-29 11:41:21 +03: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:
Zack Weinberg
2018-03-07 14:31:59 -05:00
committed by Gabriel F. T. Gomes
parent 349718d4d7
commit b87eb3f8fe
16 changed files with 40 additions and 75 deletions

View File

@ -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;
}

View File

@ -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;
}

View 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;

View File

@ -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)

View File

@ -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);
}

View 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)

View 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);