This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH v2 3/8] Use SCANF_ISOC99_A instead of _IO_FLAGS2_SCANF_STD.



On 29/10/2018 09:16, Gabriel F. T. Gomes wrote:
> From: Zack Weinberg <zackw@panix.com>
> 
> Changes since v1:
> 
>   - Cleared VARGARSn comments.
>   - Added signed-off-by statements.
> 
> -- 8< --
> 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.

LGTM.

> 
> 2018-10-16  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.
> 
> Signed-off-by: Zack Weinberg <zackw@panix.com>
> Signed-off-by: Gabriel F. T. Gomes <gabriel@inconstante.eti.br>

We don't use DCO, but copyright assignments.

> ---
>  libio/libio.h                   |  1 -
>  libio/libioP.h                  |  5 ++---
>  stdio-common/isoc99_fscanf.c    |  7 +------
>  stdio-common/isoc99_scanf.c     | 12 +-----------
>  stdio-common/isoc99_sscanf.c    |  3 +--
>  stdio-common/isoc99_vfscanf.c   |  9 +--------
>  stdio-common/isoc99_vscanf.c    |  9 +--------
>  stdio-common/isoc99_vsscanf.c   |  3 +--
>  stdio-common/vfscanf-internal.c |  2 --
>  wcsmbs/isoc99_fwscanf.c         |  7 +------
>  wcsmbs/isoc99_swscanf.c         |  3 +--
>  wcsmbs/isoc99_vfwscanf.c        |  9 +--------
>  wcsmbs/isoc99_vswscanf.c        |  3 +--
>  wcsmbs/isoc99_vwscanf.c         |  9 +--------
>  wcsmbs/isoc99_wscanf.c          |  7 +------
>  15 files changed, 14 insertions(+), 75 deletions(-)
> 
> 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

Ok.

> diff --git a/libio/libioP.h b/libio/libioP.h
> index fa34a628fe..f90fb2c050 100644
> --- a/libio/libioP.h
> +++ b/libio/libioP.h
> @@ -775,7 +775,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);
>  }
> @@ -789,8 +789,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
>  

Ok.

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

Ok.

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

Ok.

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

Ok.

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

Ok.

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

Ok.

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

Ok.

> diff --git a/stdio-common/vfscanf-internal.c b/stdio-common/vfscanf-internal.c
> index 1ae37a2a11..dc341b0b1f 100644
> --- a/stdio-common/vfscanf-internal.c
> +++ b/stdio-common/vfscanf-internal.c
> @@ -337,8 +337,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);

Ok.

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

Ok.

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

Ok.

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

Ok.

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

Ok.

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

Ok.

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

Ok.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]