aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZack Weinberg <zackw@panix.com>2018-03-07 14:31:59 -0500
committerGabriel F. T. Gomes <gabriel@inconstante.eti.br>2018-12-05 18:15:42 -0200
commitb87eb3f8feb826ac48463f598fc10476055bee5a (patch)
treef71f60fbd1a5340ca8d2a9015c813b04cf053036 /stdio-common
parentAdd __vfscanf_internal and __vfwscanf_internal with flags arguments. (diff)
downloadglibc-b87eb3f8feb826ac48463f598fc10476055bee5a.tar.gz
glibc-b87eb3f8feb826ac48463f598fc10476055bee5a.tar.bz2
glibc-b87eb3f8feb826ac48463f598fc10476055bee5a.zip
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.
Diffstat (limited to 'stdio-common')
-rw-r--r--stdio-common/isoc99_fscanf.c7
-rw-r--r--stdio-common/isoc99_scanf.c12
-rw-r--r--stdio-common/isoc99_sscanf.c3
-rw-r--r--stdio-common/isoc99_vfscanf.c9
-rw-r--r--stdio-common/isoc99_vscanf.c9
-rw-r--r--stdio-common/isoc99_vsscanf.c3
-rw-r--r--stdio-common/vfscanf-internal.c2
7 files changed, 6 insertions, 39 deletions
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 <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;
}
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 <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;
}
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 <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)
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 <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);
}
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);