Message ID | a1cfb7e8-d819-74ef-1ee7-82d135dcbedc@codesourcery.com |
---|---|
State | New |
Headers | show |
Series | [v2] C2x scanf binary constant handling | expand |
On 16/02/23 20:40, Joseph Myers wrote: > C2x adds binary integer constants starting with 0b or 0B, and supports > those constants for the %i scanf format (in addition to the %b format, > which isn't yet implemented for scanf in glibc). Implement that scanf > support for glibc. > > As with the strtol support, this is incompatible with previous C > standard versions, in that such an input string starting with 0b or 0B > was previously required to be parsed as 0 (with the rest of the input > potentially matching subsequent parts of the scanf format string). > Thus this patch adds 12 new __isoc23_* functions per long double > format (12, 24 or 36 depending on how many long double formats the > glibc configuration supports), with appropriate header redirection > support (generally very closely following that for the __isoc99_* > scanf functions - note that __GLIBC_USE (DEPRECATED_SCANF) takes > precedence over __GLIBC_USE (C2X_STRTOL), so the case of GNU > extensions to C89 continues to get old-style GNU %a and does not get > this new feature). The function names would remain as __isoc23_* even > if C2x ends up published in 2024 rather than 2023. > > When scanf %b support is added, I think it will be appropriate for all > versions of scanf to follow C2x rules for inputs to the %b format > (given that there are no compatibility concerns for a new format). > > Tested for x86_64 (full glibc testsuite). The previous version was > also tested for powerpc (32-bit) and powerpc64le (stdio-common/ and > wcsmbs/ tests), and with build-many-glibcs.py. > > --- > > v2 has updated symbol versions and copyright years and applies to > current glibc, which now has the strtol changes. LGTM, just minor style issues below regarding the Makefiles and the test skeleton. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org> > > diff --git a/NEWS b/NEWS > index 080a2060d4..e54d734600 100644 > --- a/NEWS > +++ b/NEWS > @@ -14,7 +14,10 @@ Major new features: > input: strtol, strtoll, strtoul, strtoull, strtol_l, strtoll_l, > strtoul_l, strtoull_l, strtoimax, strtoumax, strtoq, strtouq, wcstol, > wcstoll, wcstoul, wcstoull, wcstol_l, wcstoll_l, wcstoul_l, > - wcstoull_l, wcstoimax, wcstoumax, wcstoq, wcstouq. > + wcstoull_l, wcstoimax, wcstoumax, wcstoq, wcstouq. Similarly, the > + following functions support binary integers prefixed by 0b or 0B as > + input to the %i format: fscanf, scanf, sscanf, vscanf, vsscanf, > + vfscanf, fwscanf, wscanf, swscanf, vfwscanf, vwscanf, vswscanf. > > Deprecated and removed features, and other changes affecting compatibility: > Ok. > diff --git a/include/stdio.h b/include/stdio.h > index c3e772ad9a..da47d1ce99 100644 > --- a/include/stdio.h > +++ b/include/stdio.h > @@ -94,18 +94,34 @@ extern int __isoc99_vscanf (const char *__restrict __format, > extern int __isoc99_vsscanf (const char *__restrict __s, > const char *__restrict __format, > __gnuc_va_list __arg) __THROW; > +extern int __isoc23_fscanf (FILE *__restrict __stream, > + const char *__restrict __format, ...) __wur; > +extern int __isoc23_scanf (const char *__restrict __format, ...) __wur; > +extern int __isoc23_sscanf (const char *__restrict __s, > + const char *__restrict __format, ...) __THROW; > +extern int __isoc23_vfscanf (FILE *__restrict __s, > + const char *__restrict __format, > + __gnuc_va_list __arg) __wur; > +extern int __isoc23_vscanf (const char *__restrict __format, > + __gnuc_va_list __arg) __wur; > +extern int __isoc23_vsscanf (const char *__restrict __s, > + const char *__restrict __format, > + __gnuc_va_list __arg) __THROW; > > libc_hidden_proto (__isoc99_sscanf) > libc_hidden_proto (__isoc99_vsscanf) > libc_hidden_proto (__isoc99_vfscanf) > +libc_hidden_proto (__isoc23_sscanf) > +libc_hidden_proto (__isoc23_vsscanf) > +libc_hidden_proto (__isoc23_vfscanf) > > -/* Internal uses of sscanf should call the C99-compliant version. > +/* Internal uses of sscanf should call the C2X-compliant version. > Unfortunately, symbol redirection is not transitive, so the > __REDIRECT in the public header does not link up with the above > libc_hidden_proto. Bridge the gap with a macro. */ > # if !__GLIBC_USE (DEPRECATED_SCANF) > # undef sscanf > -# define sscanf __isoc99_sscanf > +# define sscanf __isoc23_sscanf > # endif > > # if __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 && IS_IN (libc) > @@ -114,12 +130,21 @@ libc_hidden_proto (__isoc99_vfscanf) > extern __typeof (__isoc99_sscanf) ___ieee128_isoc99_sscanf __THROW; > extern __typeof (__isoc99_vsscanf) ___ieee128_isoc99_vsscanf __THROW; > extern __typeof (__isoc99_vfscanf) ___ieee128_isoc99_vfscanf __THROW; > +extern __typeof (__isoc23_sscanf) ___ieee128_isoc23_sscanf __THROW; > +extern __typeof (__isoc23_vsscanf) ___ieee128_isoc23_vsscanf __THROW; > +extern __typeof (__isoc23_vfscanf) ___ieee128_isoc23_vfscanf __THROW; > libc_hidden_proto (___ieee128_isoc99_sscanf) > libc_hidden_proto (___ieee128_isoc99_vsscanf) > libc_hidden_proto (___ieee128_isoc99_vfscanf) > +libc_hidden_proto (___ieee128_isoc23_sscanf) > +libc_hidden_proto (___ieee128_isoc23_vsscanf) > +libc_hidden_proto (___ieee128_isoc23_vfscanf) > #define __isoc99_sscanf ___ieee128_isoc99_sscanf > #define __isoc99_vsscanf ___ieee128_isoc99_vsscanf > #define __isoc99_vfscanf ___ieee128_isoc99_vfscanf > +#define __isoc23_sscanf ___ieee128_isoc23_sscanf > +#define __isoc23_vsscanf ___ieee128_isoc23_vsscanf > +#define __isoc23_vfscanf ___ieee128_isoc23_vfscanf > # endif > > /* Prototypes for compatibility functions. */ Ok. > diff --git a/include/wchar.h b/include/wchar.h > index ea7888f605..fafe7c8e9b 100644 > --- a/include/wchar.h > +++ b/include/wchar.h > @@ -288,8 +288,24 @@ extern int __isoc99_vwscanf (const wchar_t *__restrict __format, > extern int __isoc99_vswscanf (const wchar_t *__restrict __s, > const wchar_t *__restrict __format, > __gnuc_va_list __arg) __THROW; > +extern int __isoc23_fwscanf (__FILE *__restrict __stream, > + const wchar_t *__restrict __format, ...); > +extern int __isoc23_wscanf (const wchar_t *__restrict __format, ...); > +extern int __isoc23_swscanf (const wchar_t *__restrict __s, > + const wchar_t *__restrict __format, ...) > + __THROW; > +extern int __isoc23_vfwscanf (__FILE *__restrict __s, > + const wchar_t *__restrict __format, > + __gnuc_va_list __arg); > +extern int __isoc23_vwscanf (const wchar_t *__restrict __format, > + __gnuc_va_list __arg); > +extern int __isoc23_vswscanf (const wchar_t *__restrict __s, > + const wchar_t *__restrict __format, > + __gnuc_va_list __arg) __THROW; > libc_hidden_proto (__isoc99_vswscanf) > libc_hidden_proto (__isoc99_vfwscanf) > +libc_hidden_proto (__isoc23_vswscanf) > +libc_hidden_proto (__isoc23_vfwscanf) > > /* Internal functions. */ > extern size_t __mbsrtowcs_l (wchar_t *dst, const char **src, size_t len, Ok. > diff --git a/libio/bits/stdio-ldbl.h b/libio/bits/stdio-ldbl.h > index b54d00b68b..ed68fc4e28 100644 > --- a/libio/bits/stdio-ldbl.h > +++ b/libio/bits/stdio-ldbl.h > @@ -28,13 +28,25 @@ __LDBL_REDIR_DECL (vprintf) > __LDBL_REDIR_DECL (vsprintf) > #if !__GLIBC_USE (DEPRECATED_SCANF) > # if defined __LDBL_COMPAT > +# if __GLIBC_USE (C2X_STRTOL) > +__LDBL_REDIR1_DECL (fscanf, __nldbl___isoc23_fscanf) > +__LDBL_REDIR1_DECL (scanf, __nldbl___isoc23_scanf) > +__LDBL_REDIR1_DECL (sscanf, __nldbl___isoc23_sscanf) > +# else > __LDBL_REDIR1_DECL (fscanf, __nldbl___isoc99_fscanf) > __LDBL_REDIR1_DECL (scanf, __nldbl___isoc99_scanf) > __LDBL_REDIR1_DECL (sscanf, __nldbl___isoc99_sscanf) > +# endif > # elif __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 > +# if __GLIBC_USE (C2X_STRTOL) > +__LDBL_REDIR1_DECL (fscanf, __isoc23_fscanfieee128) > +__LDBL_REDIR1_DECL (scanf, __isoc23_scanfieee128) > +__LDBL_REDIR1_DECL (sscanf, __isoc23_sscanfieee128) > +# else > __LDBL_REDIR1_DECL (fscanf, __isoc99_fscanfieee128) > __LDBL_REDIR1_DECL (scanf, __isoc99_scanfieee128) > __LDBL_REDIR1_DECL (sscanf, __isoc99_sscanfieee128) > +# endif > # else > # error bits/stdlib-ldbl.h included when no ldbl redirections are required. > # endif > @@ -52,13 +64,25 @@ __LDBL_REDIR_DECL (vsnprintf) > #ifdef __USE_ISOC99 > # if !__GLIBC_USE (DEPRECATED_SCANF) > # if defined __LDBL_COMPAT > +# if __GLIBC_USE (C2X_STRTOL) > +__LDBL_REDIR1_DECL (vfscanf, __nldbl___isoc23_vfscanf) > +__LDBL_REDIR1_DECL (vscanf, __nldbl___isoc23_vscanf) > +__LDBL_REDIR1_DECL (vsscanf, __nldbl___isoc23_vsscanf) > +# else > __LDBL_REDIR1_DECL (vfscanf, __nldbl___isoc99_vfscanf) > __LDBL_REDIR1_DECL (vscanf, __nldbl___isoc99_vscanf) > __LDBL_REDIR1_DECL (vsscanf, __nldbl___isoc99_vsscanf) > +# endif > # elif __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 > +# if __GLIBC_USE (C2X_STRTOL) > +__LDBL_REDIR1_DECL (vfscanf, __isoc23_vfscanfieee128) > +__LDBL_REDIR1_DECL (vscanf, __isoc23_vscanfieee128) > +__LDBL_REDIR1_DECL (vsscanf, __isoc23_vsscanfieee128) > +# else > __LDBL_REDIR1_DECL (vfscanf, __isoc99_vfscanfieee128) > __LDBL_REDIR1_DECL (vscanf, __isoc99_vscanfieee128) > __LDBL_REDIR1_DECL (vsscanf, __isoc99_vsscanfieee128) > +# endif > # else > # error bits/stdlib-ldbl.h included when no ldbl redirections are required. > # endif Ok. > diff --git a/libio/libioP.h b/libio/libioP.h > index a5f00822ab..38507388fd 100644 > --- a/libio/libioP.h > +++ b/libio/libioP.h > @@ -781,6 +781,9 @@ extern off64_t _IO_seekpos_unlocked (FILE *, off64_t, int) > functions use. When the flag is set to zero, automatic allocation is > enabled. > > + SCANF_ISOC23_BIN_CST, when set to one, indicates the %i accepts > + binary constants starting 0b or 0B. > + > SCANF_LDBL_USES_FLOAT128 is used on platforms where the long double > format used to be different from the IEC 60559 double format *and* > also different from the Quadruple 128-bits IEC 60559 format (such as > @@ -793,7 +796,8 @@ extern off64_t _IO_seekpos_unlocked (FILE *, off64_t, int) > as the previous format on that platform. */ > #define SCANF_LDBL_IS_DBL 0x0001 > #define SCANF_ISOC99_A 0x0002 > -#define SCANF_LDBL_USES_FLOAT128 0x0004 > +#define SCANF_ISOC23_BIN_CST 0x0004 > +#define SCANF_LDBL_USES_FLOAT128 0x0008 > > extern int __vfscanf_internal (FILE *fp, const char *format, va_list argp, > unsigned int flags) Ok. > diff --git a/libio/stdio.h b/libio/stdio.h > index ed80420a2b..857f02888d 100644 > --- a/libio/stdio.h > +++ b/libio/stdio.h > @@ -430,7 +430,28 @@ extern int sscanf (const char *__restrict __s, > #include <bits/floatn.h> > #if !__GLIBC_USE (DEPRECATED_SCANF) && !defined __LDBL_COMPAT \ > && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0 > -# ifdef __REDIRECT > +# if __GLIBC_USE (C2X_STRTOL) > +# ifdef __REDIRECT > +extern int __REDIRECT (fscanf, (FILE *__restrict __stream, > + const char *__restrict __format, ...), > + __isoc23_fscanf) __wur; > +extern int __REDIRECT (scanf, (const char *__restrict __format, ...), > + __isoc23_scanf) __wur; > +extern int __REDIRECT_NTH (sscanf, (const char *__restrict __s, > + const char *__restrict __format, ...), > + __isoc23_sscanf); > +# else > +extern int __isoc23_fscanf (FILE *__restrict __stream, > + const char *__restrict __format, ...) __wur; > +extern int __isoc23_scanf (const char *__restrict __format, ...) __wur; > +extern int __isoc23_sscanf (const char *__restrict __s, > + const char *__restrict __format, ...) __THROW; > +# define fscanf __isoc23_fscanf > +# define scanf __isoc23_scanf > +# define sscanf __isoc23_sscanf > +# endif > +# else > +# ifdef __REDIRECT > extern int __REDIRECT (fscanf, (FILE *__restrict __stream, > const char *__restrict __format, ...), > __isoc99_fscanf) __wur; > @@ -439,15 +460,16 @@ extern int __REDIRECT (scanf, (const char *__restrict __format, ...), > extern int __REDIRECT_NTH (sscanf, (const char *__restrict __s, > const char *__restrict __format, ...), > __isoc99_sscanf); > -# else > +# else > extern int __isoc99_fscanf (FILE *__restrict __stream, > const char *__restrict __format, ...) __wur; > extern int __isoc99_scanf (const char *__restrict __format, ...) __wur; > extern int __isoc99_sscanf (const char *__restrict __s, > const char *__restrict __format, ...) __THROW; > -# define fscanf __isoc99_fscanf > -# define scanf __isoc99_scanf > -# define sscanf __isoc99_sscanf > +# define fscanf __isoc99_fscanf > +# define scanf __isoc99_scanf > +# define sscanf __isoc99_sscanf > +# endif > # endif > #endif > Ok. > @@ -474,7 +496,37 @@ extern int vsscanf (const char *__restrict __s, > > /* Same redirection as above for the v*scanf family. */ > # if !__GLIBC_USE (DEPRECATED_SCANF) > -# if defined __REDIRECT && !defined __LDBL_COMPAT \ > +# if __GLIBC_USE (C2X_STRTOL) > +# if defined __REDIRECT && !defined __LDBL_COMPAT \ > + && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0 > +extern int __REDIRECT (vfscanf, > + (FILE *__restrict __s, > + const char *__restrict __format, __gnuc_va_list __arg), > + __isoc23_vfscanf) > + __attribute__ ((__format__ (__scanf__, 2, 0))) __wur; > +extern int __REDIRECT (vscanf, (const char *__restrict __format, > + __gnuc_va_list __arg), __isoc23_vscanf) > + __attribute__ ((__format__ (__scanf__, 1, 0))) __wur; > +extern int __REDIRECT_NTH (vsscanf, > + (const char *__restrict __s, > + const char *__restrict __format, > + __gnuc_va_list __arg), __isoc23_vsscanf) > + __attribute__ ((__format__ (__scanf__, 2, 0))); > +# elif !defined __REDIRECT > +extern int __isoc23_vfscanf (FILE *__restrict __s, > + const char *__restrict __format, > + __gnuc_va_list __arg) __wur; > +extern int __isoc23_vscanf (const char *__restrict __format, > + __gnuc_va_list __arg) __wur; > +extern int __isoc23_vsscanf (const char *__restrict __s, > + const char *__restrict __format, > + __gnuc_va_list __arg) __THROW; > +# define vfscanf __isoc23_vfscanf > +# define vscanf __isoc23_vscanf > +# define vsscanf __isoc23_vsscanf > +# endif > +# else > +# if defined __REDIRECT && !defined __LDBL_COMPAT \ > && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0 > extern int __REDIRECT (vfscanf, > (FILE *__restrict __s, > @@ -489,7 +541,7 @@ extern int __REDIRECT_NTH (vsscanf, > const char *__restrict __format, > __gnuc_va_list __arg), __isoc99_vsscanf) > __attribute__ ((__format__ (__scanf__, 2, 0))); > -# elif !defined __REDIRECT > +# elif !defined __REDIRECT > extern int __isoc99_vfscanf (FILE *__restrict __s, > const char *__restrict __format, > __gnuc_va_list __arg) __wur; > @@ -498,9 +550,10 @@ extern int __isoc99_vscanf (const char *__restrict __format, > extern int __isoc99_vsscanf (const char *__restrict __s, > const char *__restrict __format, > __gnuc_va_list __arg) __THROW; > -# define vfscanf __isoc99_vfscanf > -# define vscanf __isoc99_vscanf > -# define vsscanf __isoc99_vsscanf > +# define vfscanf __isoc99_vfscanf > +# define vscanf __isoc99_vscanf > +# define vsscanf __isoc99_vsscanf > +# endif > # endif > # endif > #endif /* Use ISO C9x. */ Ok. > diff --git a/manual/stdio.texi b/manual/stdio.texi > index d7eab1843a..e86aa5933b 100644 > --- a/manual/stdio.texi > +++ b/manual/stdio.texi > @@ -3624,7 +3624,8 @@ constant. The syntax that is recognized is the same as that for the > @code{strtol} function (@pxref{Parsing of Integers}) with the value > @code{0} for the @var{base} argument. (You can print integers in this > syntax with @code{printf} by using the @samp{#} flag character with the > -@samp{%x}, @samp{%o}, or @samp{%d} conversion. @xref{Integer Conversions}.) > +@samp{%x}, @samp{%o}, @samp{%b}, or @samp{%d} conversion. > +@xref{Integer Conversions}.) > > For example, any of the strings @samp{10}, @samp{0xa}, or @samp{012} > could be read in as integers under the @samp{%i} conversion. Each of Ok. > diff --git a/stdio-common/Makefile b/stdio-common/Makefile > index 92a3499a94..a14ee487ea 100644 > --- a/stdio-common/Makefile > +++ b/stdio-common/Makefile > @@ -47,6 +47,12 @@ routines := \ > isoc99_vfscanf \ > isoc99_vscanf \ > isoc99_vsscanf \ > + isoc23_fscanf \ > + isoc23_scanf \ > + isoc23_sscanf \ > + isoc23_vfscanf \ > + isoc23_vscanf \ > + isoc23_vsscanf \ > itoa-digits \ > itoa-udigits \ > itowa-digits \ > @@ -214,6 +220,10 @@ tests := \ > tst-put-error \ > tst-renameat2 \ > tst-rndseek \ > + tst-scanf-binary-c11 \ > + tst-scanf-binary-c2x \ > + tst-scanf-binary-gnu11 \ > + tst-scanf-binary-gnu89 \ > tst-scanf-round \ > tst-setvbuf1 \ > tst-sprintf \ Ok. > @@ -415,6 +425,10 @@ CFLAGS-isoc99_vfscanf.c += -fexceptions > CFLAGS-isoc99_vscanf.c += -fexceptions > CFLAGS-isoc99_fscanf.c += -fexceptions > CFLAGS-isoc99_scanf.c += -fexceptions > +CFLAGS-isoc23_vfscanf.c += -fexceptions > +CFLAGS-isoc23_vscanf.c += -fexceptions > +CFLAGS-isoc23_fscanf.c += -fexceptions > +CFLAGS-isoc23_scanf.c += -fexceptions > > CFLAGS-dprintf.c += $(config-cflags-wno-ignored-attributes) > > @@ -440,6 +454,14 @@ CFLAGS-tst-bz11319-fortify2.c += -D_FORTIFY_SOURCE=2 > > CFLAGS-tst-memstream-string.c += -fno-builtin-fprintf > > +# Some versions of GCC supported for building glibc do not support -std=c2x, so > +# the test for that version uses -std=c11 and then _ISOC2X_SOURCE is defined in > +# the test as needed. > +CFLAGS-tst-scanf-binary-c11.c += -std=c11 -DOBJPFX=\"$(objpfx)\" > +CFLAGS-tst-scanf-binary-c2x.c += -std=c11 -DOBJPFX=\"$(objpfx)\" > +CFLAGS-tst-scanf-binary-gnu11.c += -std=gnu11 -DOBJPFX=\"$(objpfx)\" > +CFLAGS-tst-scanf-binary-gnu89.c += -std=gnu89 -DOBJPFX=\"$(objpfx)\" > + > CPPFLAGS += $(libio-mtsafe) > > $(objpfx)tst-setvbuf1.out: /dev/null $(objpfx)tst-setvbuf1 Ok. > diff --git a/stdio-common/Versions b/stdio-common/Versions > index 522f302198..4bcfc3fb41 100644 > --- a/stdio-common/Versions > +++ b/stdio-common/Versions > @@ -63,6 +63,14 @@ libc { > GLIBC_2.29 { > # SHLIB_COMPAT(GLIBC_2_0, GLIBC_2_29) used in iovfscanf.c etc. > } > + GLIBC_2.38 { > + __isoc23_scanf; > + __isoc23_vscanf; > + __isoc23_fscanf; > + __isoc23_vfscanf; > + __isoc23_sscanf; > + __isoc23_vsscanf; > + } > GLIBC_PRIVATE { > # global variables > _itoa_lower_digits; Ok. > diff --git a/stdio-common/isoc23_fscanf.c b/stdio-common/isoc23_fscanf.c > new file mode 100644 > index 0000000000..dc19f57bec > --- /dev/null > +++ b/stdio-common/isoc23_fscanf.c > @@ -0,0 +1,35 @@ > +/* Copyright (C) 1991-2023 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <libioP.h> > +#include <stdarg.h> > +#include <stdio.h> > + > +/* Read formatted input from STREAM according to the format string FORMAT. */ > +int > +__isoc23_fscanf (FILE *stream, const char *format, ...) > +{ > + va_list arg; > + int done; > + > + va_start (arg, format); > + done = __vfscanf_internal (stream, format, arg, > + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST); > + va_end (arg); > + > + return done; > +} Ok. > diff --git a/stdio-common/isoc23_scanf.c b/stdio-common/isoc23_scanf.c > new file mode 100644 > index 0000000000..22b5aaebda > --- /dev/null > +++ b/stdio-common/isoc23_scanf.c > @@ -0,0 +1,35 @@ > +/* Copyright (C) 1991-2023 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <stdarg.h> > +#include <stdio.h> > +#include <libioP.h> > + > +/* Read formatted input from stdin according to the format string FORMAT. */ > +int > +__isoc23_scanf (const char *format, ...) > +{ > + va_list arg; > + int done; > + > + va_start (arg, format); > + done = __vfscanf_internal (stdin, format, arg, > + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST); > + va_end (arg); > + > + return done; > +} Ok. > diff --git a/stdio-common/isoc23_sscanf.c b/stdio-common/isoc23_sscanf.c > new file mode 100644 > index 0000000000..1da4c53846 > --- /dev/null > +++ b/stdio-common/isoc23_sscanf.c > @@ -0,0 +1,37 @@ > +/* Copyright (C) 1991-2023 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <stdarg.h> > +#include <libio/strfile.h> > + > +/* Read formatted input from S, according to the format string FORMAT. */ > +int > +__isoc23_sscanf (const char *s, const char *format, ...) > +{ > + va_list arg; > + int done; > + _IO_strfile sf; > + FILE *f = _IO_strfile_read (&sf, s); > + > + va_start (arg, format); > + done = __vfscanf_internal (f, format, arg, > + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST); > + va_end (arg); > + > + return done; > +} Ok. > +libc_hidden_def (__isoc23_sscanf) > diff --git a/stdio-common/isoc23_vfscanf.c b/stdio-common/isoc23_vfscanf.c > new file mode 100644 > index 0000000000..d1411a2d65 > --- /dev/null > +++ b/stdio-common/isoc23_vfscanf.c > @@ -0,0 +1,28 @@ > +/* Copyright (C) 1991-2023 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <libioP.h> > +#include <stdio.h> > + > +/* Read formatted input from STREAM according to the format string FORMAT. */ > +int > +__isoc23_vfscanf (FILE *stream, const char *format, va_list args) > +{ > + return __vfscanf_internal (stream, format, args, > + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST); > +} > +libc_hidden_def (__isoc23_vfscanf) Ok. > diff --git a/stdio-common/isoc23_vscanf.c b/stdio-common/isoc23_vscanf.c > new file mode 100644 > index 0000000000..81be184c3b > --- /dev/null > +++ b/stdio-common/isoc23_vscanf.c > @@ -0,0 +1,27 @@ > +/* Copyright (C) 1991-2023 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <libioP.h> > +#include <stdio.h> > + > +/* Read formatted input from STDIN according to the format string FORMAT. */ > +int > +__isoc23_vscanf (const char *format, va_list args) > +{ > + return __vfscanf_internal (stdin, format, args, > + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST); > +} Ok. > diff --git a/stdio-common/isoc23_vsscanf.c b/stdio-common/isoc23_vsscanf.c > new file mode 100644 > index 0000000000..6cc9a89edc > --- /dev/null > +++ b/stdio-common/isoc23_vsscanf.c > @@ -0,0 +1,28 @@ > +/* Copyright (C) 1993-2023 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <libio/strfile.h> > + > +int > +__isoc23_vsscanf (const char *string, const char *format, va_list args) > +{ > + _IO_strfile sf; > + FILE *f = _IO_strfile_read (&sf, string); > + return __vfscanf_internal (f, format, args, > + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST); > +} > +libc_hidden_def (__isoc23_vsscanf) Ok. > diff --git a/stdio-common/tst-scanf-binary-c11.c b/stdio-common/tst-scanf-binary-c11.c > new file mode 100644 > index 0000000000..1869bb6881 > --- /dev/null > +++ b/stdio-common/tst-scanf-binary-c11.c > @@ -0,0 +1,28 @@ > +/* Test scanf functions with C2X binary integers (narrow strings, > + no extensions to C11). > + Copyright (C) 2022-2023 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#undef _GNU_SOURCE > + > +#define CHAR char > +#define FNW > +#define L_(C) C > +#define TEST_C2X 0 > +#define STD "c11" > + > +#include <tst-scanf-binary-main.c> Ok. > diff --git a/stdio-common/tst-scanf-binary-c2x.c b/stdio-common/tst-scanf-binary-c2x.c > new file mode 100644 > index 0000000000..6033b1f375 > --- /dev/null > +++ b/stdio-common/tst-scanf-binary-c2x.c > @@ -0,0 +1,31 @@ > +/* Test scanf functions with C2X binary integers (narrow strings, > + no extensions). > + Copyright (C) 2022-2023 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +/* Some versions of GCC supported for building glibc do not support > + -std=c2x. */ > +#undef _GNU_SOURCE > +#define _ISOC2X_SOURCE > + > +#define CHAR char > +#define FNW > +#define L_(C) C > +#define TEST_C2X 1 > +#define STD "c2x" > + > +#include <tst-scanf-binary-main.c> Ok. > diff --git a/stdio-common/tst-scanf-binary-gnu11.c b/stdio-common/tst-scanf-binary-gnu11.c > new file mode 100644 > index 0000000000..4bd49700d7 > --- /dev/null > +++ b/stdio-common/tst-scanf-binary-gnu11.c > @@ -0,0 +1,26 @@ > +/* Test scanf functions with C2X binary integers (narrow strings, > + GNU extensions to C11). > + Copyright (C) 2022-2023 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#define CHAR char > +#define FNW > +#define L_(C) C > +#define TEST_C2X 1 > +#define STD "gnu11" > + > +#include <tst-scanf-binary-main.c> Ok. > diff --git a/stdio-common/tst-scanf-binary-gnu89.c b/stdio-common/tst-scanf-binary-gnu89.c > new file mode 100644 > index 0000000000..5325732f7c > --- /dev/null > +++ b/stdio-common/tst-scanf-binary-gnu89.c > @@ -0,0 +1,26 @@ > +/* Test scanf functions with C2X binary integers (narrow strings, > + GNU extensions to C89). > + Copyright (C) 2022-2023 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#define CHAR char > +#define FNW > +#define L_(C) C > +#define TEST_C2X 0 > +#define STD "gnu89" > + > +#include <tst-scanf-binary-main.c> Ok. > diff --git a/stdio-common/tst-scanf-binary-main.c b/stdio-common/tst-scanf-binary-main.c > new file mode 100644 > index 0000000000..858283843e > --- /dev/null > +++ b/stdio-common/tst-scanf-binary-main.c > @@ -0,0 +1,208 @@ > +/* Test scanf functions with C2X binary integers. > + Copyright (C) 2022-2023 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <stdarg.h> > +#include <stdio.h> > +#include <wchar.h> > + > +#include <support/check.h> > + > +#define CONCAT_(X, Y, Z) X ## Y ## Z > +#define CONCAT(X, Y, Z) CONCAT_ (X, Y, Z) > +#define FNX(FN1, FN2) CONCAT (FN1, FNW, FN2) > +#ifndef STDX > +# define STDX "" > +#endif > + > +#define INFILE OBJPFX "/tst-" STDX "scanf-binary-" STD "-in" > + > +static int > +wrap_vfscanf (FILE *fp, const CHAR *format, ...) > +{ > + va_list ap; > + va_start (ap, format); > + int ret = FNX (vf, scanf) (fp, format, ap); > + va_end (ap); > + return ret; > +} > + > +static int > +wrap_vscanf (const CHAR *format, ...) > +{ > + va_list ap; > + va_start (ap, format); > + int ret = FNX (v, scanf) (format, ap); > + va_end (ap); > + return ret; > +} > + > +static int > +wrap_vsscanf (const CHAR *s, const CHAR *format, ...) > +{ > + va_list ap; > + va_start (ap, format); > + int ret = FNX (vs, scanf) (s, format, ap); > + va_end (ap); > + return ret; > +} > + > +static void > +one_check (const CHAR *s, int expected, char expected_c) > +{ > + int ret; > + FILE *fp; > + int ret_i; > + long int ret_l; > + long long int ret_ll; > + char ret_c; > + fp = fopen (INFILE, "w"); > + TEST_VERIFY_EXIT (fp != NULL); Use xfopen, same for other occurances below. > + ret = FNX (fput, s) (s, fp); > + TEST_VERIFY_EXIT (0 <= ret); > + ret = fclose (fp); > + TEST_VERIFY_EXIT (ret == 0); Use xfclose, same for other occurances below. > + > + if (!TEST_C2X) > + { > + expected = 0; > + expected_c = s[0] == L_('-') ? s[2] : s[1]; > + } > + > + ret = FNX (s, scanf) (s, L_("%i %c"), &ret_i, &ret_c); > + TEST_COMPARE (ret, 2); > + TEST_COMPARE (ret_i, expected); > + TEST_COMPARE (ret_c, expected_c); > + fp = fopen (INFILE, "r"); > + TEST_VERIFY_EXIT (fp != NULL); > + ret = FNX (f, scanf) (fp, L_("%i %c"), &ret_i, &ret_c); > + TEST_COMPARE (ret, 2); > + TEST_COMPARE (ret_i, expected); > + TEST_COMPARE (ret_c, expected_c); > + ret = fclose (fp); > + TEST_VERIFY_EXIT (ret == 0); > + fp = freopen (INFILE, "r", stdin); > + TEST_VERIFY_EXIT (fp != NULL); Maybe add xfreopen? > + ret = FNX (, scanf) (L_("%i %c"), &ret_i, &ret_c); > + TEST_COMPARE (ret, 2); > + TEST_COMPARE (ret_i, expected); > + TEST_COMPARE (ret_c, expected_c); > + ret = wrap_vsscanf (s, L_("%i %c"), &ret_i, &ret_c); > + TEST_COMPARE (ret, 2); > + TEST_COMPARE (ret_i, expected); > + TEST_COMPARE (ret_c, expected_c); > + fp = fopen (INFILE, "r"); > + TEST_VERIFY_EXIT (fp != NULL); > + ret = wrap_vfscanf (fp, L_("%i %c"), &ret_i, &ret_c); > + TEST_COMPARE (ret, 2); > + TEST_COMPARE (ret_i, expected); > + TEST_COMPARE (ret_c, expected_c); > + ret = fclose (fp); > + TEST_VERIFY_EXIT (ret == 0); > + fp = freopen (INFILE, "r", stdin); > + TEST_VERIFY_EXIT (fp != NULL); > + ret = wrap_vscanf (L_("%i %c"), &ret_i, &ret_c); > + TEST_COMPARE (ret, 2); > + TEST_COMPARE (ret_i, expected); > + TEST_COMPARE (ret_c, expected_c); > + > + ret = FNX (s, scanf) (s, L_("%li %c"), &ret_l, &ret_c); > + TEST_COMPARE (ret, 2); > + TEST_COMPARE (ret_l, expected); > + TEST_COMPARE (ret_c, expected_c); > + fp = fopen (INFILE, "r"); > + TEST_VERIFY_EXIT (fp != NULL); > + ret = FNX (f, scanf) (fp, L_("%li %c"), &ret_l, &ret_c); > + TEST_COMPARE (ret, 2); > + TEST_COMPARE (ret_l, expected); > + TEST_COMPARE (ret_c, expected_c); > + ret = fclose (fp); > + TEST_VERIFY_EXIT (ret == 0); > + fp = freopen (INFILE, "r", stdin); > + TEST_VERIFY_EXIT (fp != NULL); > + ret = FNX (, scanf) (L_("%li %c"), &ret_l, &ret_c); > + TEST_COMPARE (ret, 2); > + TEST_COMPARE (ret_l, expected); > + TEST_COMPARE (ret_c, expected_c); > + ret = wrap_vsscanf (s, L_("%li %c"), &ret_l, &ret_c); > + TEST_COMPARE (ret, 2); > + TEST_COMPARE (ret_l, expected); > + TEST_COMPARE (ret_c, expected_c); > + fp = fopen (INFILE, "r"); > + TEST_VERIFY_EXIT (fp != NULL); > + ret = wrap_vfscanf (fp, L_("%li %c"), &ret_l, &ret_c); > + TEST_COMPARE (ret, 2); > + TEST_COMPARE (ret_l, expected); > + TEST_COMPARE (ret_c, expected_c); > + ret = fclose (fp); > + TEST_VERIFY_EXIT (ret == 0); > + fp = freopen (INFILE, "r", stdin); > + TEST_VERIFY_EXIT (fp != NULL); > + ret = wrap_vscanf (L_("%li %c"), &ret_l, &ret_c); > + TEST_COMPARE (ret, 2); > + TEST_COMPARE (ret_l, expected); > + TEST_COMPARE (ret_c, expected_c); > + > + ret = FNX (s, scanf) (s, L_("%lli %c"), &ret_ll, &ret_c); > + TEST_COMPARE (ret, 2); > + TEST_COMPARE (ret_ll, expected); > + TEST_COMPARE (ret_c, expected_c); > + fp = fopen (INFILE, "r"); > + TEST_VERIFY_EXIT (fp != NULL); > + ret = FNX (f, scanf) (fp, L_("%lli %c"), &ret_ll, &ret_c); > + TEST_COMPARE (ret, 2); > + TEST_COMPARE (ret_ll, expected); > + TEST_COMPARE (ret_c, expected_c); > + ret = fclose (fp); > + TEST_VERIFY_EXIT (ret == 0); > + fp = freopen (INFILE, "r", stdin); > + TEST_VERIFY_EXIT (fp != NULL); > + ret = FNX (, scanf) (L_("%lli %c"), &ret_ll, &ret_c); > + TEST_COMPARE (ret, 2); > + TEST_COMPARE (ret_ll, expected); > + TEST_COMPARE (ret_c, expected_c); > + ret = wrap_vsscanf (s, L_("%lli %c"), &ret_ll, &ret_c); > + TEST_COMPARE (ret, 2); > + TEST_COMPARE (ret_ll, expected); > + TEST_COMPARE (ret_c, expected_c); > + fp = fopen (INFILE, "r"); > + TEST_VERIFY_EXIT (fp != NULL); > + ret = wrap_vfscanf (fp, L_("%lli %c"), &ret_ll, &ret_c); > + TEST_COMPARE (ret, 2); > + TEST_COMPARE (ret_ll, expected); > + TEST_COMPARE (ret_c, expected_c); > + ret = fclose (fp); > + TEST_VERIFY_EXIT (ret == 0); > + fp = freopen (INFILE, "r", stdin); > + TEST_VERIFY_EXIT (fp != NULL); > + ret = wrap_vscanf (L_("%lli %c"), &ret_ll, &ret_c); > + TEST_COMPARE (ret, 2); > + TEST_COMPARE (ret_ll, expected); > + TEST_COMPARE (ret_c, expected_c); > +} > + > +static int > +do_test (void) > +{ > + one_check (L_("0b101 x"), 5, 'x'); > + one_check (L_("0B101 x"), 5, 'x'); > + one_check (L_("-0b11111 y"), -31, 'y'); > + one_check (L_("-0B11111 y"), -31, 'y'); > + return 0; > +} > + > +#include <support/test-driver.c> Ok. Should we also add test for ill formatted inputs? > diff --git a/stdio-common/vfscanf-internal.c b/stdio-common/vfscanf-internal.c > index 4fec12345c..d9675bd4b1 100644 > --- a/stdio-common/vfscanf-internal.c > +++ b/stdio-common/vfscanf-internal.c > @@ -1428,6 +1428,16 @@ __vfscanf_internal (FILE *s, const char *format, va_list argptr, > c = inchar (); > } > } > + else if ((mode_flags & SCANF_ISOC23_BIN_CST) != 0 > + && base == 0 > + && width != 0 > + && TOLOWER (c) == L_('b')) > + { > + base = 2; > + if (width > 0) > + --width; > + c = inchar (); > + } > else if (base == 0) > base = 8; > } Ok. > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/Makefile b/sysdeps/ieee754/ldbl-128ibm-compat/Makefile > index 67d476383a..4b047d608d 100644 > --- a/sysdeps/ieee754/ldbl-128ibm-compat/Makefile > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/Makefile > @@ -24,7 +24,13 @@ ldbl-extra-routines += isoc99_fwscanf \ > isoc99_wscanf \ > isoc99_vfwscanf \ > isoc99_vswscanf \ > - isoc99_vwscanf > + isoc99_vwscanf \ > + isoc23_fwscanf \ > + isoc23_swscanf \ > + isoc23_wscanf \ > + isoc23_vfwscanf \ > + isoc23_vswscanf \ > + isoc23_vwscanf > > tests-internal += test-wcstold-ibm128 test-wcstold-ieee128 > CFLAGS-test-wcstold-ieee128.c += -mfloat128 -mabi=ieeelongdouble -Wno-psabi > @@ -53,7 +59,13 @@ ldbl-extra-routines += printf_size \ > isoc99_sscanf \ > isoc99_vfscanf \ > isoc99_vscanf \ > - isoc99_vsscanf > + isoc99_vsscanf \ > + isoc23_fscanf \ > + isoc23_scanf \ > + isoc23_sscanf \ > + isoc23_vfscanf \ > + isoc23_vscanf \ > + isoc23_vsscanf > > # Printing long double values with IEEE binary128 format reuses part > # of the internal float128 implementation (__printf_fp, __printf_fphex, > @@ -306,6 +318,70 @@ CFLAGS-test-ldouble-compat_totalorder.c += -mabi=ibmlongdouble > CFLAGS-test-ldouble-compat_totalordermag.c += -mabi=ibmlongdouble > endif > > +ifeq ($(subdir), stdio-common) > +tests += tst-ibm128-scanf-binary-c11 tst-ibm128-scanf-binary-c2x \ > + tst-ibm128-scanf-binary-gnu11 tst-ibm128-scanf-binary-gnu89 \ > + tst-ieee128-scanf-binary-c11 tst-ieee128-scanf-binary-c2x \ > + tst-ieee128-scanf-binary-gnu11 tst-ieee128-scanf-binary-gnu89 One entry per line. > + > +# Some versions of GCC supported for building glibc do not support -std=c2x, so > +# the test for that version uses -std=c11 and then _ISOC2X_SOURCE is defined in > +# the test as needed. > +CFLAGS-tst-ibm128-scanf-binary-c11.c += -mabi=ibmlongdouble -Wno-psabi \ > + -std=c11 -DOBJPFX=\"$(objpfx)\" > +CFLAGS-tst-ibm128-scanf-binary-c2x.c += -mabi=ibmlongdouble -Wno-psabi \ > + -std=c11 -DOBJPFX=\"$(objpfx)\" > +CFLAGS-tst-ibm128-scanf-binary-gnu11.c += -mabi=ibmlongdouble -Wno-psabi \ > + -std=gnu11 -DOBJPFX=\"$(objpfx)\" > +CFLAGS-tst-ibm128-scanf-binary-gnu89.c += -mabi=ibmlongdouble -Wno-psabi \ > + -std=gnu89 -DOBJPFX=\"$(objpfx)\" > +CFLAGS-tst-ieee128-scanf-binary-c11.c += -mfloat128 -mabi=ieeelongdouble \ > + -Wno-psabi -std=c11 \ > + -DOBJPFX=\"$(objpfx)\" > +CFLAGS-tst-ieee128-scanf-binary-c2x.c += -mfloat128 -mabi=ieeelongdouble \ > + -Wno-psabi -std=c11 \ > + -DOBJPFX=\"$(objpfx)\" > +CFLAGS-tst-ieee128-scanf-binary-gnu11.c += -mfloat128 -mabi=ieeelongdouble \ > + -Wno-psabi -std=gnu11 \ > + -DOBJPFX=\"$(objpfx)\" > +CFLAGS-tst-ieee128-scanf-binary-gnu89.c += -mfloat128 -mabi=ieeelongdouble \ > + -Wno-psabi -std=gnu89 \ > + -DOBJPFX=\"$(objpfx)\" > + > +endif > + > +ifeq ($(subdir), wcsmbs) > +tests += tst-ibm128-wscanf-binary-c11 tst-ibm128-wscanf-binary-c2x \ > + tst-ibm128-wscanf-binary-gnu11 tst-ibm128-wscanf-binary-gnu89 \ > + tst-ieee128-wscanf-binary-c11 tst-ieee128-wscanf-binary-c2x \ > + tst-ieee128-wscanf-binary-gnu11 tst-ieee128-wscanf-binary-gnu89 One entry per line. > + > +# Some versions of GCC supported for building glibc do not support -std=c2x, so > +# the test for that version uses -std=c11 and then _ISOC2X_SOURCE is defined in > +# the test as needed. > +CFLAGS-tst-ibm128-wscanf-binary-c11.c += -mabi=ibmlongdouble -Wno-psabi \ > + -std=c11 -DOBJPFX=\"$(objpfx)\" > +CFLAGS-tst-ibm128-wscanf-binary-c2x.c += -mabi=ibmlongdouble -Wno-psabi \ > + -std=c11 -DOBJPFX=\"$(objpfx)\" > +CFLAGS-tst-ibm128-wscanf-binary-gnu11.c += -mabi=ibmlongdouble -Wno-psabi \ > + -std=gnu11 -DOBJPFX=\"$(objpfx)\" > +CFLAGS-tst-ibm128-wscanf-binary-gnu89.c += -mabi=ibmlongdouble -Wno-psabi \ > + -std=gnu89 -DOBJPFX=\"$(objpfx)\" > +CFLAGS-tst-ieee128-wscanf-binary-c11.c += -mfloat128 -mabi=ieeelongdouble \ > + -Wno-psabi -std=c11 \ > + -DOBJPFX=\"$(objpfx)\" > +CFLAGS-tst-ieee128-wscanf-binary-c2x.c += -mfloat128 -mabi=ieeelongdouble \ > + -Wno-psabi -std=c11 \ > + -DOBJPFX=\"$(objpfx)\" > +CFLAGS-tst-ieee128-wscanf-binary-gnu11.c += -mfloat128 -mabi=ieeelongdouble \ > + -Wno-psabi -std=gnu11 \ > + -DOBJPFX=\"$(objpfx)\" > +CFLAGS-tst-ieee128-wscanf-binary-gnu89.c += -mfloat128 -mabi=ieeelongdouble \ > + -Wno-psabi -std=gnu89 \ > + -DOBJPFX=\"$(objpfx)\" > + > +endif > + > # Add IEEE binary128 files as make targets. > routines += $(foreach r,$(ldbl-extra-routines),ieee128-$(r)) > Ok. > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/Versions b/sysdeps/ieee754/ldbl-128ibm-compat/Versions > index d4ffd3762b..c0679a1153 100644 > --- a/sysdeps/ieee754/ldbl-128ibm-compat/Versions > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/Versions > @@ -258,4 +258,18 @@ libc { > __qecvtieee128_r; > __qfcvtieee128_r; > } > + GLIBC_2.38 { > + __isoc23_fscanfieee128; > + __isoc23_scanfieee128; > + __isoc23_sscanfieee128; > + __isoc23_vfscanfieee128; > + __isoc23_vscanfieee128; > + __isoc23_vsscanfieee128; > + __isoc23_fwscanfieee128; > + __isoc23_swscanfieee128; > + __isoc23_wscanfieee128; > + __isoc23_vfwscanfieee128; > + __isoc23_vswscanfieee128; > + __isoc23_vwscanfieee128; > + } > } Ok. > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_fscanf.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_fscanf.c > new file mode 100644 > index 0000000000..6d651a5d3f > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_fscanf.c > @@ -0,0 +1,36 @@ > +/* Wrapper for __isoc23_fscanf. IEEE128 version. > + Copyright (C) 2019-2023 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <stdarg.h> > +#include <libio/libioP.h> > + > +extern int > +___ieee128_isoc23_fscanf (FILE *fp, const char *format, ...) > +{ > + va_list arg; > + int done; > + int mode_flags = > + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST | SCANF_LDBL_USES_FLOAT128; > + > + va_start (arg, format); > + done = __vfscanf_internal (fp, format, arg, mode_flags); > + va_end (arg); > + > + return done; > +} > +strong_alias (___ieee128_isoc23_fscanf, __isoc23_fscanfieee128) Ok. > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_fwscanf.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_fwscanf.c > new file mode 100644 > index 0000000000..f9ba69ba50 > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_fwscanf.c > @@ -0,0 +1,36 @@ > +/* Wrapper for __isoc23_fwscanf. IEEE128 version. > + Copyright (C) 2019-2023 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <stdarg.h> > +#include <libioP.h> > + > +extern int > +___ieee128_isoc23_fwscanf (FILE *fp, const wchar_t *format, ...) > +{ > + va_list ap; > + int done; > + int mode_flags = > + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST | SCANF_LDBL_USES_FLOAT128; > + > + va_start (ap, format); > + done = __vfwscanf_internal (fp, format, ap, mode_flags); > + va_end (ap); > + > + return done; > +} > +strong_alias (___ieee128_isoc23_fwscanf, __isoc23_fwscanfieee128) Ok. > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_scanf.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_scanf.c > new file mode 100644 > index 0000000000..4a128392b8 > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_scanf.c > @@ -0,0 +1,36 @@ > +/* Wrapper for __isoc23_scanf. IEEE128 version. > + Copyright (C) 2019-2023 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <stdarg.h> > +#include <libio/libioP.h> > + > +extern int > +___ieee128_isoc23_scanf (const char *format, ...) > +{ > + va_list arg; > + int done; > + int mode_flags = > + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST | SCANF_LDBL_USES_FLOAT128; > + > + va_start (arg, format); > + done = __vfscanf_internal (stdin, format, arg, mode_flags); > + va_end (arg); > + > + return done; > +} > +strong_alias (___ieee128_isoc23_scanf, __isoc23_scanfieee128) Ok. > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_sscanf.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_sscanf.c > new file mode 100644 > index 0000000000..9845e6a282 > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_sscanf.c > @@ -0,0 +1,41 @@ > +/* Wrapper for __isoc23_sscanf. IEEE128 version. > + Copyright (C) 2019-2023 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <stdarg.h> > +#include <strfile.h> > +#include <libioP.h> > + > +extern int > +___ieee128_isoc23_sscanf (const char *string, const char *format, ...) > +{ > + va_list arg; > + int done; > + int mode_flags = > + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST | SCANF_LDBL_USES_FLOAT128; > + > + _IO_strfile sf; > + FILE *fp = _IO_strfile_read (&sf, string); > + > + va_start (arg, format); > + done = __vfscanf_internal (fp, format, arg, mode_flags); > + va_end (arg); > + > + return done; > +} > +strong_alias (___ieee128_isoc23_sscanf, __isoc23_sscanfieee128) > +hidden_def (___ieee128_isoc23_sscanf) Ok. > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_swscanf.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_swscanf.c > new file mode 100644 > index 0000000000..b50a2bfbca > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_swscanf.c > @@ -0,0 +1,41 @@ > +/* Wrapper for __isoc23_swscanf. IEEE128 version. > + Copyright (C) 2019-2023 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <stdarg.h> > +#include <strfile.h> > +#include <libioP.h> > + > +extern int > +___ieee128_isoc23_swscanf (const wchar_t *string, const wchar_t *format, ...) > +{ > + va_list ap; > + int done; > + int mode_flags = > + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST | SCANF_LDBL_USES_FLOAT128; > + > + _IO_strfile sf; > + struct _IO_wide_data wd; > + FILE *fp = _IO_strfile_readw (&sf, &wd, string); > + > + va_start (ap, format); > + done = __vfwscanf_internal (fp, format, ap, mode_flags); > + va_end (ap); > + > + return done; > +} > +strong_alias (___ieee128_isoc23_swscanf, __isoc23_swscanfieee128) Ok. > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vfscanf.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vfscanf.c > new file mode 100644 > index 0000000000..876cc0c6d0 > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vfscanf.c > @@ -0,0 +1,30 @@ > +/* Wrapper for __isoc23_vfscanf. IEEE128 version. > + Copyright (C) 2019-2023 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <libio/libioP.h> > +#include <stdio.h> > + > +extern int > +___ieee128_isoc23_vfscanf (FILE *fp, const char *format, va_list ap) > +{ > + int mode_flags = > + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST | SCANF_LDBL_USES_FLOAT128; > + return __vfscanf_internal (fp, format, ap, mode_flags); > +} > +strong_alias (___ieee128_isoc23_vfscanf, __isoc23_vfscanfieee128) > +hidden_def (___ieee128_isoc23_vfscanf) Ok. > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vfwscanf.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vfwscanf.c > new file mode 100644 > index 0000000000..752b245343 > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vfwscanf.c > @@ -0,0 +1,28 @@ > +/* Wrapper for __isoc23_vfwscanf. IEEE128 version. > + Copyright (C) 2019-2023 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <libioP.h> > + > +extern int > +___ieee128_isoc23_vfwscanf (FILE *fp, const wchar_t *format, va_list ap) > +{ > + int mode_flags = > + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST | SCANF_LDBL_USES_FLOAT128; > + return __vfwscanf_internal (fp, format, ap, mode_flags); > +} > +strong_alias (___ieee128_isoc23_vfwscanf, __isoc23_vfwscanfieee128) Ok. > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vscanf.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vscanf.c > new file mode 100644 > index 0000000000..ef36bd162f > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vscanf.c > @@ -0,0 +1,28 @@ > +/* Wrapper for __isoc23_vscanf. IEEE128 version. > + Copyright (C) 2019-2023 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <libio/libioP.h> > + > +extern int > +___ieee128_isoc23_vscanf (const char *format, va_list ap) > +{ > + int mode_flags = > + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST | SCANF_LDBL_USES_FLOAT128; > + return __vfscanf_internal (stdin, format, ap, mode_flags); > +} > +strong_alias (___ieee128_isoc23_vscanf, __isoc23_vscanfieee128) Ok. > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vsscanf.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vsscanf.c > new file mode 100644 > index 0000000000..5524d788a7 > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vsscanf.c > @@ -0,0 +1,32 @@ > +/* Wrapper for __isoc23_vsscanf. IEEE128 version. > + Copyright (C) 2019-2023 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <strfile.h> > +#include <libioP.h> > + > +extern int > +___ieee128_isoc23_vsscanf (const char *string, const char *format, va_list ap) > +{ > + _IO_strfile sf; > + FILE *fp = _IO_strfile_read (&sf, string); > + int mode_flags = > + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST | SCANF_LDBL_USES_FLOAT128; > + return __vfscanf_internal (fp, format, ap, mode_flags); > +} > +strong_alias (___ieee128_isoc23_vsscanf, __isoc23_vsscanfieee128) > +hidden_def (___ieee128_isoc23_vsscanf) Ok. > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vswscanf.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vswscanf.c > new file mode 100644 > index 0000000000..4e893f2942 > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vswscanf.c > @@ -0,0 +1,33 @@ > +/* Wrapper for __isoc23_vswscanf. IEEE128 version. > + Copyright (C) 2019-2023 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <libioP.h> > +#include <wchar.h> > +#include <strfile.h> > + > +extern int > +___ieee128_isoc23_vswscanf (wchar_t *string, const wchar_t *format, va_list ap) > +{ > + _IO_strfile sf; > + struct _IO_wide_data wd; > + FILE *fp = _IO_strfile_readw (&sf, &wd, string); > + int mode_flags = > + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST | SCANF_LDBL_USES_FLOAT128; > + return __vfwscanf_internal (fp, format, ap, mode_flags); > +} > +strong_alias (___ieee128_isoc23_vswscanf, __isoc23_vswscanfieee128) Ok. > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vwscanf.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vwscanf.c > new file mode 100644 > index 0000000000..a68239d9f0 > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vwscanf.c > @@ -0,0 +1,28 @@ > +/* Wrapper for __isoc23_vwscanf. IEEE128 version. > + Copyright (C) 2019-2023 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <libioP.h> > + > +extern int > +___ieee128_isoc23_vwscanf (const wchar_t *format, va_list ap) > +{ > + int mode_flags = > + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST | SCANF_LDBL_USES_FLOAT128; > + return __vfwscanf_internal (stdin, format, ap, mode_flags); > +} > +strong_alias (___ieee128_isoc23_vwscanf, __isoc23_vwscanfieee128) Ok. > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_wscanf.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_wscanf.c > new file mode 100644 > index 0000000000..f596df2a39 > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_wscanf.c > @@ -0,0 +1,36 @@ > +/* Wrapper for __isoc23_wscanf. IEEE128 version. > + Copyright (C) 2019-2023 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <stdarg.h> > +#include <libioP.h> > + > +extern int > +___ieee128_isoc23_wscanf (const wchar_t *format, ...) > +{ > + va_list ap; > + int done; > + int mode_flags = > + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST | SCANF_LDBL_USES_FLOAT128; > + > + va_start (ap, format); > + done = __vfwscanf_internal (stdin, format, ap, mode_flags); > + va_end (ap); > + > + return done; > +} > +strong_alias (___ieee128_isoc23_wscanf, __isoc23_wscanfieee128) Ok. > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-scanf-binary-c11.c b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-scanf-binary-c11.c > new file mode 100644 > index 0000000000..31706beee6 > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-scanf-binary-c11.c > @@ -0,0 +1,2 @@ > +#define STDX "ibm128-" > +#include <tst-scanf-binary-c11.c> Ok. > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-scanf-binary-c2x.c b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-scanf-binary-c2x.c > new file mode 100644 > index 0000000000..f8bb2e4be3 > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-scanf-binary-c2x.c > @@ -0,0 +1,2 @@ > +#define STDX "ibm128-" > +#include <tst-scanf-binary-c2x.c> Ok. > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-scanf-binary-gnu11.c b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-scanf-binary-gnu11.c > new file mode 100644 > index 0000000000..074aeee208 > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-scanf-binary-gnu11.c > @@ -0,0 +1,2 @@ > +#define STDX "ibm128-" > +#include <tst-scanf-binary-gnu11.c> Ok. > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-scanf-binary-gnu89.c b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-scanf-binary-gnu89.c > new file mode 100644 > index 0000000000..6091b33cb6 > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-scanf-binary-gnu89.c > @@ -0,0 +1,2 @@ > +#define STDX "ibm128-" > +#include <tst-scanf-binary-gnu89.c> Ok. > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-wscanf-binary-c11.c b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-wscanf-binary-c11.c > new file mode 100644 > index 0000000000..4885a8e265 > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-wscanf-binary-c11.c > @@ -0,0 +1,2 @@ > +#define STDX "ibm128-" > +#include <tst-wscanf-binary-c11.c> Ok. > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-wscanf-binary-c2x.c b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-wscanf-binary-c2x.c > new file mode 100644 > index 0000000000..bf0c3da75e > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-wscanf-binary-c2x.c > @@ -0,0 +1,2 @@ > +#define STDX "ibm128-" > +#include <tst-wscanf-binary-c2x.c> Ok. > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-wscanf-binary-gnu11.c b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-wscanf-binary-gnu11.c > new file mode 100644 > index 0000000000..49ae257fbd > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-wscanf-binary-gnu11.c > @@ -0,0 +1,2 @@ > +#define STDX "ibm128-" > +#include <tst-wscanf-binary-gnu11.c> Ok. > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-wscanf-binary-gnu89.c b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-wscanf-binary-gnu89.c > new file mode 100644 > index 0000000000..a76be283be > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-wscanf-binary-gnu89.c > @@ -0,0 +1,2 @@ > +#define STDX "ibm128-" > +#include <tst-wscanf-binary-gnu89.c> Ok. > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-scanf-binary-c11.c b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-scanf-binary-c11.c > new file mode 100644 > index 0000000000..2570fcad5c > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-scanf-binary-c11.c > @@ -0,0 +1,2 @@ > +#define STDX "ieee128-" > +#include <tst-scanf-binary-c11.c> Ok. > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-scanf-binary-c2x.c b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-scanf-binary-c2x.c > new file mode 100644 > index 0000000000..d09c21394c > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-scanf-binary-c2x.c > @@ -0,0 +1,2 @@ > +#define STDX "ieee128-" > +#include <tst-scanf-binary-c2x.c> Ok. > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-scanf-binary-gnu11.c b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-scanf-binary-gnu11.c > new file mode 100644 > index 0000000000..4e08b6417f > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-scanf-binary-gnu11.c > @@ -0,0 +1,2 @@ > +#define STDX "ieee128-" > +#include <tst-scanf-binary-gnu11.c> Ok. > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-scanf-binary-gnu89.c b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-scanf-binary-gnu89.c > new file mode 100644 > index 0000000000..a917b3bfef > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-scanf-binary-gnu89.c > @@ -0,0 +1,2 @@ > +#define STDX "ieee128-" > +#include <tst-scanf-binary-gnu89.c> Ok. > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-wscanf-binary-c11.c b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-wscanf-binary-c11.c > new file mode 100644 > index 0000000000..a6a6bae1cd > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-wscanf-binary-c11.c > @@ -0,0 +1,2 @@ > +#define STDX "ieee128-" > +#include <tst-wscanf-binary-c11.c> Ok. > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-wscanf-binary-c2x.c b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-wscanf-binary-c2x.c > new file mode 100644 > index 0000000000..7e2d27c6d2 > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-wscanf-binary-c2x.c > @@ -0,0 +1,2 @@ > +#define STDX "ieee128-" > +#include <tst-wscanf-binary-c2x.c> Ok. > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-wscanf-binary-gnu11.c b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-wscanf-binary-gnu11.c > new file mode 100644 > index 0000000000..d81d2d7136 > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-wscanf-binary-gnu11.c > @@ -0,0 +1,2 @@ > +#define STDX "ieee128-" > +#include <tst-wscanf-binary-gnu11.c> > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-wscanf-binary-gnu89.c b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-wscanf-binary-gnu89.c > new file mode 100644 > index 0000000000..f405923e0f > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-wscanf-binary-gnu89.c > @@ -0,0 +1,2 @@ > +#define STDX "ieee128-" > +#include <tst-wscanf-binary-gnu89.c> Ok. > diff --git a/sysdeps/ieee754/ldbl-opt/Makefile b/sysdeps/ieee754/ldbl-opt/Makefile > index 1d01846476..fec804808c 100644 > --- a/sysdeps/ieee754/ldbl-opt/Makefile > +++ b/sysdeps/ieee754/ldbl-opt/Makefile > @@ -42,6 +42,10 @@ libnldbl-calls = asprintf dprintf fprintf fscanf fwprintf fwscanf iovfscanf \ > isoc99_vscanf isoc99_vfscanf isoc99_vsscanf \ > isoc99_wscanf isoc99_fwscanf isoc99_swscanf \ > isoc99_vwscanf isoc99_vfwscanf isoc99_vswscanf \ > + isoc23_scanf isoc23_fscanf isoc23_sscanf \ > + isoc23_vscanf isoc23_vfscanf isoc23_vsscanf \ > + isoc23_wscanf isoc23_fwscanf isoc23_swscanf \ > + isoc23_vwscanf isoc23_vfwscanf isoc23_vswscanf \ > nextup nextdown totalorder totalordermag getpayload \ > canonicalize setpayload setpayloadsig llogb fmaxmag fminmag \ > roundeven fromfp ufromfp fromfpx ufromfpx fadd dadd \ > @@ -221,3 +225,39 @@ $(objpfx)tst-nldbl-error.c: tst-ldbl-error.c > CFLAGS-tst-nldbl-warn.c += -mlong-double-64 > CFLAGS-tst-nldbl-error.c += -mlong-double-64 > endif > + > +ifeq ($(subdir), stdio-common) > +tests += tst-nldbl-scanf-binary-c11 tst-nldbl-scanf-binary-c2x \ > + tst-nldbl-scanf-binary-gnu11 tst-nldbl-scanf-binary-gnu89 > + > +# Some versions of GCC supported for building glibc do not support -std=c2x, so > +# the test for that version uses -std=c11 and then _ISOC2X_SOURCE is defined in > +# the test as needed. > +CFLAGS-tst-nldbl-scanf-binary-c11.c += -mlong-double-64 -std=c11 \ > + -DOBJPFX=\"$(objpfx)\" > +CFLAGS-tst-nldbl-scanf-binary-c2x.c += -mlong-double-64 -std=c11 \ > + -DOBJPFX=\"$(objpfx)\" > +CFLAGS-tst-nldbl-scanf-binary-gnu11.c += -mlong-double-64 -std=gnu11 \ > + -DOBJPFX=\"$(objpfx)\" > +CFLAGS-tst-nldbl-scanf-binary-gnu89.c += -mlong-double-64 -std=gnu89 \ > + -DOBJPFX=\"$(objpfx)\" > + > +endif > + > +ifeq ($(subdir), wcsmbs) > +tests += tst-nldbl-wscanf-binary-c11 tst-nldbl-wscanf-binary-c2x \ > + tst-nldbl-wscanf-binary-gnu11 tst-nldbl-wscanf-binary-gnu89 One line per entry. > + > +# Some versions of GCC supported for building glibc do not support -std=c2x, so > +# the test for that version uses -std=c11 and then _ISOC2X_SOURCE is defined in > +# the test as needed. > +CFLAGS-tst-nldbl-wscanf-binary-c11.c += -mlong-double-64 -std=c11 \ > + -DOBJPFX=\"$(objpfx)\" > +CFLAGS-tst-nldbl-wscanf-binary-c2x.c += -mlong-double-64 -std=c11 \ > + -DOBJPFX=\"$(objpfx)\" > +CFLAGS-tst-nldbl-wscanf-binary-gnu11.c += -mlong-double-64 -std=gnu11 \ > + -DOBJPFX=\"$(objpfx)\" > +CFLAGS-tst-nldbl-wscanf-binary-gnu89.c += -mlong-double-64 -std=gnu89 \ > + -DOBJPFX=\"$(objpfx)\" > + > +endif Ok. > diff --git a/sysdeps/ieee754/ldbl-opt/Versions b/sysdeps/ieee754/ldbl-opt/Versions > index 21a2db6888..5345f1c683 100644 > --- a/sysdeps/ieee754/ldbl-opt/Versions > +++ b/sysdeps/ieee754/ldbl-opt/Versions > @@ -84,6 +84,20 @@ libc { > __nldbl_err; __nldbl_verr; __nldbl_errx; __nldbl_verrx; > __nldbl_error; __nldbl_error_at_line; > } > + GLIBC_2.38 { > + __nldbl___isoc23_scanf; > + __nldbl___isoc23_fscanf; > + __nldbl___isoc23_sscanf; > + __nldbl___isoc23_vscanf; > + __nldbl___isoc23_vfscanf; > + __nldbl___isoc23_vsscanf; > + __nldbl___isoc23_wscanf; > + __nldbl___isoc23_fwscanf; > + __nldbl___isoc23_swscanf; > + __nldbl___isoc23_vwscanf; > + __nldbl___isoc23_vfwscanf; > + __nldbl___isoc23_vswscanf; > + } > } > libm { > NLDBL_VERSION { Ok. > diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-compat.c b/sysdeps/ieee754/ldbl-opt/nldbl-compat.c > index c654ebe416..22112c54d4 100644 > --- a/sysdeps/ieee754/ldbl-opt/nldbl-compat.c > +++ b/sysdeps/ieee754/ldbl-opt/nldbl-compat.c > @@ -45,6 +45,10 @@ libc_hidden_proto (__nldbl___isoc99_vsscanf) > libc_hidden_proto (__nldbl___isoc99_vfscanf) > libc_hidden_proto (__nldbl___isoc99_vswscanf) > libc_hidden_proto (__nldbl___isoc99_vfwscanf) > +libc_hidden_proto (__nldbl___isoc23_vsscanf) > +libc_hidden_proto (__nldbl___isoc23_vfscanf) > +libc_hidden_proto (__nldbl___isoc23_vswscanf) > +libc_hidden_proto (__nldbl___isoc23_vfwscanf) > > /* Compatibility with IEEE double as long double. > IEEE quad long double is used by default for most programs, so > @@ -992,6 +996,172 @@ __nldbl___isoc99_wscanf (const wchar_t *fmt, ...) > return ret; > } > > +int > +attribute_compat_text_section > +__nldbl___isoc23_vfscanf (FILE *s, const char *fmt, va_list ap) > +{ > + return __vfscanf_internal (s, fmt, ap, > + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A > + | SCANF_ISOC23_BIN_CST); > +} > +libc_hidden_def (__nldbl___isoc23_vfscanf) > + > +int > +attribute_compat_text_section > +__nldbl___isoc23_sscanf (const char *s, const char *fmt, ...) > +{ > + _IO_strfile sf; > + FILE *f = _IO_strfile_read (&sf, s); > + va_list ap; > + int ret; > + > + va_start (ap, fmt); > + ret = __vfscanf_internal (f, fmt, ap, > + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A > + | SCANF_ISOC23_BIN_CST); > + va_end (ap); > + > + return ret; > +} > + > +int > +attribute_compat_text_section > +__nldbl___isoc23_vsscanf (const char *s, const char *fmt, va_list ap) > +{ > + _IO_strfile sf; > + FILE *f = _IO_strfile_read (&sf, s); > + > + return __vfscanf_internal (f, fmt, ap, > + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A > + | SCANF_ISOC23_BIN_CST); > +} > +libc_hidden_def (__nldbl___isoc23_vsscanf) > + > +int > +attribute_compat_text_section > +__nldbl___isoc23_vscanf (const char *fmt, va_list ap) > +{ > + return __vfscanf_internal (stdin, fmt, ap, > + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A > + | SCANF_ISOC23_BIN_CST); > +} > + > +int > +attribute_compat_text_section > +__nldbl___isoc23_fscanf (FILE *s, const char *fmt, ...) > +{ > + va_list ap; > + int ret; > + > + va_start (ap, fmt); > + ret = __vfscanf_internal (s, fmt, ap, > + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A > + | SCANF_ISOC23_BIN_CST); > + va_end (ap); > + > + return ret; > +} > + > +int > +attribute_compat_text_section > +__nldbl___isoc23_scanf (const char *fmt, ...) > +{ > + va_list ap; > + int ret; > + > + va_start (ap, fmt); > + ret = __vfscanf_internal (stdin, fmt, ap, > + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A > + | SCANF_ISOC23_BIN_CST); > + va_end (ap); > + > + return ret; > +} > + > +int > +attribute_compat_text_section > +__nldbl___isoc23_vfwscanf (FILE *s, const wchar_t *fmt, va_list ap) > +{ > + return __vfwscanf_internal (s, fmt, ap, > + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A > + | SCANF_ISOC23_BIN_CST); > +} > +libc_hidden_def (__nldbl___isoc23_vfwscanf) > + > +int > +attribute_compat_text_section > +__nldbl___isoc23_swscanf (const wchar_t *s, const wchar_t *fmt, ...) > +{ > + _IO_strfile sf; > + struct _IO_wide_data wd; > + FILE *f = _IO_strfile_readw (&sf, &wd, s); > + va_list ap; > + int ret; > + > + va_start (ap, fmt); > + ret = __vfwscanf_internal (f, fmt, ap, > + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A > + | SCANF_ISOC23_BIN_CST); > + va_end (ap); > + > + return ret; > +} > + > +int > +attribute_compat_text_section > +__nldbl___isoc23_vswscanf (const wchar_t *s, const wchar_t *fmt, va_list ap) > +{ > + _IO_strfile sf; > + struct _IO_wide_data wd; > + FILE *f = _IO_strfile_readw (&sf, &wd, s); > + > + return __vfwscanf_internal (f, fmt, ap, > + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A > + | SCANF_ISOC23_BIN_CST); > +} > +libc_hidden_def (__nldbl___isoc23_vswscanf) > + > +int > +attribute_compat_text_section > +__nldbl___isoc23_vwscanf (const wchar_t *fmt, va_list ap) > +{ > + return __vfwscanf_internal (stdin, fmt, ap, > + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A > + | SCANF_ISOC23_BIN_CST); > +} > + > +int > +attribute_compat_text_section > +__nldbl___isoc23_fwscanf (FILE *s, const wchar_t *fmt, ...) > +{ > + va_list ap; > + int ret; > + > + va_start (ap, fmt); > + ret = __vfwscanf_internal (s, fmt, ap, > + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A > + | SCANF_ISOC23_BIN_CST); > + va_end (ap); > + > + return ret; > +} > + > +int > +attribute_compat_text_section > +__nldbl___isoc23_wscanf (const wchar_t *fmt, ...) > +{ > + va_list ap; > + int ret; > + > + va_start (ap, fmt); > + ret = __vfwscanf_internal (stdin, fmt, ap, > + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A > + | SCANF_ISOC23_BIN_CST); > + va_end (ap); > + > + return ret; > +} > + > void > __nldbl_argp_error (const struct argp_state *state, const char *fmt, ...) > { Ok. > diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-compat.h b/sysdeps/ieee754/ldbl-opt/nldbl-compat.h > index 7309e8a80f..d514442d87 100644 > --- a/sysdeps/ieee754/ldbl-opt/nldbl-compat.h > +++ b/sysdeps/ieee754/ldbl-opt/nldbl-compat.h > @@ -78,6 +78,18 @@ NLDBL_DECL (__isoc99_swscanf); > NLDBL_DECL (__isoc99_vwscanf); > NLDBL_DECL (__isoc99_vfwscanf); > NLDBL_DECL (__isoc99_vswscanf); > +NLDBL_DECL (__isoc23_scanf); > +NLDBL_DECL (__isoc23_fscanf); > +NLDBL_DECL (__isoc23_sscanf); > +NLDBL_DECL (__isoc23_vscanf); > +NLDBL_DECL (__isoc23_vfscanf); > +NLDBL_DECL (__isoc23_vsscanf); > +NLDBL_DECL (__isoc23_wscanf); > +NLDBL_DECL (__isoc23_fwscanf); > +NLDBL_DECL (__isoc23_swscanf); > +NLDBL_DECL (__isoc23_vwscanf); > +NLDBL_DECL (__isoc23_vfwscanf); > +NLDBL_DECL (__isoc23_vswscanf); > NLDBL_DECL (argp_error); > NLDBL_DECL (argp_failure); > NLDBL_DECL (warn); Ok. > diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_fscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_fscanf.c > new file mode 100644 > index 0000000000..7b5a0565f7 > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_fscanf.c > @@ -0,0 +1,15 @@ > +#include "nldbl-compat.h" > + > +int > +attribute_hidden > +__isoc23_fscanf (FILE *stream, const char *fmt, ...) > +{ > + va_list arg; > + int done; > + > + va_start (arg, fmt); > + done = __nldbl___isoc23_vfscanf (stream, fmt, arg); > + va_end (arg); > + > + return done; > +} Ok. > diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_fwscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_fwscanf.c > new file mode 100644 > index 0000000000..4ecb340143 > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_fwscanf.c > @@ -0,0 +1,15 @@ > +#include "nldbl-compat.h" > + > +int > +attribute_hidden > +__isoc23_fwscanf (FILE *stream, const wchar_t *fmt, ...) > +{ > + va_list arg; > + int done; > + > + va_start (arg, fmt); > + done = __nldbl___isoc23_vfwscanf (stream, fmt, arg); > + va_end (arg); > + > + return done; > +} Ok. > diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_scanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_scanf.c > new file mode 100644 > index 0000000000..90ea10c115 > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_scanf.c > @@ -0,0 +1,15 @@ > +#include "nldbl-compat.h" > + > +int > +attribute_hidden > +__isoc23_scanf (const char *fmt, ...) > +{ > + va_list arg; > + int done; > + > + va_start (arg, fmt); > + done = __nldbl___isoc23_vfscanf (stdin, fmt, arg); > + va_end (arg); > + > + return done; > +} Ok. > diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_sscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_sscanf.c > new file mode 100644 > index 0000000000..64124e479c > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_sscanf.c > @@ -0,0 +1,15 @@ > +#include "nldbl-compat.h" > + > +int > +attribute_hidden > +__isoc23_sscanf (const char *s, const char *fmt, ...) > +{ > + va_list arg; > + int done; > + > + va_start (arg, fmt); > + done = __nldbl___isoc23_vsscanf (s, fmt, arg); > + va_end (arg); > + > + return done; > +} Ok. > diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_swscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_swscanf.c > new file mode 100644 > index 0000000000..da84c318b2 > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_swscanf.c > @@ -0,0 +1,15 @@ > +#include "nldbl-compat.h" > + > +int > +attribute_hidden > +__isoc23_swscanf (const wchar_t *s, const wchar_t *fmt, ...) > +{ > + va_list arg; > + int done; > + > + va_start (arg, fmt); > + done = __nldbl___isoc23_vswscanf (s, fmt, arg); > + va_end (arg); > + > + return done; > +} Ok. > diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vfscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vfscanf.c > new file mode 100644 > index 0000000000..671aa63ec6 > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vfscanf.c > @@ -0,0 +1,8 @@ > +#include "nldbl-compat.h" > + > +int > +attribute_hidden > +__isoc23_vfscanf (FILE *s, const char *fmt, va_list ap) > +{ > + return __nldbl___isoc23_vfscanf (s, fmt, ap); > +} Ok. > diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vfwscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vfwscanf.c > new file mode 100644 > index 0000000000..b069522cd1 > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vfwscanf.c > @@ -0,0 +1,8 @@ > +#include "nldbl-compat.h" > + > +int > +attribute_hidden > +__isoc23_vfwscanf (FILE *s, const wchar_t *fmt, va_list ap) > +{ > + return __nldbl___isoc23_vfwscanf (s, fmt, ap); > +} Ok. > diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vscanf.c > new file mode 100644 > index 0000000000..f2256f210f > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vscanf.c > @@ -0,0 +1,8 @@ > +#include "nldbl-compat.h" > + > +int > +attribute_hidden > +__isoc23_vscanf (const char *fmt, va_list ap) > +{ > + return __nldbl___isoc23_vfscanf (stdin, fmt, ap); > +} Ok. > diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vsscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vsscanf.c > new file mode 100644 > index 0000000000..96ce46b317 > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vsscanf.c > @@ -0,0 +1,8 @@ > +#include "nldbl-compat.h" > + > +int > +attribute_hidden > +__isoc23_vsscanf (const char *string, const char *fmt, va_list ap) > +{ > + return __nldbl___isoc23_vsscanf (string, fmt, ap); > +} Ok. > diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vswscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vswscanf.c > new file mode 100644 > index 0000000000..0819b55a2c > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vswscanf.c > @@ -0,0 +1,8 @@ > +#include "nldbl-compat.h" > + > +int > +attribute_hidden > +__isoc23_vswscanf (const wchar_t *string, const wchar_t *fmt, va_list ap) > +{ > + return __nldbl___isoc23_vswscanf (string, fmt, ap); > +} Ok. > diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vwscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vwscanf.c > new file mode 100644 > index 0000000000..f92876ec27 > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vwscanf.c > @@ -0,0 +1,8 @@ > +#include "nldbl-compat.h" > + > +int > +attribute_hidden > +__isoc23_vwscanf (const wchar_t *fmt, va_list ap) > +{ > + return __nldbl___isoc23_vfwscanf (stdin, fmt, ap); > +} Ok. > diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_wscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_wscanf.c > new file mode 100644 > index 0000000000..cece258845 > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_wscanf.c > @@ -0,0 +1,15 @@ > +#include "nldbl-compat.h" > + > +int > +attribute_hidden > +__isoc23_wscanf (const wchar_t *fmt, ...) > +{ > + va_list arg; > + int done; > + > + va_start (arg, fmt); > + done = __nldbl___isoc23_vfwscanf (stdin, fmt, arg); > + va_end (arg); > + > + return done; > +} Ok. > diff --git a/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-c11.c b/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-c11.c > new file mode 100644 > index 0000000000..f5bc396fcc > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-c11.c > @@ -0,0 +1,2 @@ > +#define STDX "nldbl-" > +#include <tst-scanf-binary-c11.c> > diff --git a/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-c2x.c b/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-c2x.c > new file mode 100644 > index 0000000000..4e0cf7570f > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-c2x.c > @@ -0,0 +1,2 @@ > +#define STDX "nldbl-" > +#include <tst-scanf-binary-c2x.c> > diff --git a/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-gnu11.c b/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-gnu11.c > new file mode 100644 > index 0000000000..10e228e98a > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-gnu11.c > @@ -0,0 +1,2 @@ > +#define STDX "nldbl-" > +#include <tst-scanf-binary-gnu11.c> > diff --git a/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-gnu89.c b/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-gnu89.c > new file mode 100644 > index 0000000000..c5da04b644 > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-gnu89.c > @@ -0,0 +1,2 @@ > +#define STDX "nldbl-" > +#include <tst-scanf-binary-gnu89.c> > diff --git a/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-c11.c b/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-c11.c > new file mode 100644 > index 0000000000..0e66e97cf7 > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-c11.c > @@ -0,0 +1,2 @@ > +#define STDX "nldbl-" > +#include <tst-wscanf-binary-c11.c> > diff --git a/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-c2x.c b/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-c2x.c > new file mode 100644 > index 0000000000..7637aab0d4 > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-c2x.c > @@ -0,0 +1,2 @@ > +#define STDX "nldbl-" > +#include <tst-wscanf-binary-c2x.c> > diff --git a/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-gnu11.c b/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-gnu11.c > new file mode 100644 > index 0000000000..106ec38bce > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-gnu11.c > @@ -0,0 +1,2 @@ > +#define STDX "nldbl-" > +#include <tst-wscanf-binary-gnu11.c> > diff --git a/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-gnu89.c b/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-gnu89.c > new file mode 100644 > index 0000000000..61a15619d2 > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-gnu89.c > @@ -0,0 +1,2 @@ > +#define STDX "nldbl-" > +#include <tst-wscanf-binary-gnu89.c> Ok. > diff --git a/sysdeps/mach/hurd/i386/libc.abilist b/sysdeps/mach/hurd/i386/libc.abilist > index a0419a13d0..ed0c4789eb 100644 > --- a/sysdeps/mach/hurd/i386/libc.abilist > +++ b/sysdeps/mach/hurd/i386/libc.abilist > @@ -2294,6 +2294,10 @@ GLIBC_2.36 arc4random_buf F > GLIBC_2.36 arc4random_uniform F > GLIBC_2.36 c8rtomb F > GLIBC_2.36 mbrtoc8 F > +GLIBC_2.38 __isoc23_fscanf F > +GLIBC_2.38 __isoc23_fwscanf F > +GLIBC_2.38 __isoc23_scanf F > +GLIBC_2.38 __isoc23_sscanf F > GLIBC_2.38 __isoc23_strtoimax F > GLIBC_2.38 __isoc23_strtol F > GLIBC_2.38 __isoc23_strtol_l F > @@ -2304,6 +2308,13 @@ GLIBC_2.38 __isoc23_strtoul_l F > GLIBC_2.38 __isoc23_strtoull F > GLIBC_2.38 __isoc23_strtoull_l F > GLIBC_2.38 __isoc23_strtoumax F > +GLIBC_2.38 __isoc23_swscanf F > +GLIBC_2.38 __isoc23_vfscanf F > +GLIBC_2.38 __isoc23_vfwscanf F > +GLIBC_2.38 __isoc23_vscanf F > +GLIBC_2.38 __isoc23_vsscanf F > +GLIBC_2.38 __isoc23_vswscanf F > +GLIBC_2.38 __isoc23_vwscanf F > GLIBC_2.38 __isoc23_wcstoimax F > GLIBC_2.38 __isoc23_wcstol F > GLIBC_2.38 __isoc23_wcstol_l F > @@ -2314,6 +2325,7 @@ GLIBC_2.38 __isoc23_wcstoul_l F > GLIBC_2.38 __isoc23_wcstoull F > GLIBC_2.38 __isoc23_wcstoull_l F > GLIBC_2.38 __isoc23_wcstoumax F > +GLIBC_2.38 __isoc23_wscanf F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist > index 62e80648e8..0e2d9c3045 100644 > --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist > +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist > @@ -2633,6 +2633,10 @@ GLIBC_2.36 pidfd_open F > GLIBC_2.36 pidfd_send_signal F > GLIBC_2.36 process_madvise F > GLIBC_2.36 process_mrelease F > +GLIBC_2.38 __isoc23_fscanf F > +GLIBC_2.38 __isoc23_fwscanf F > +GLIBC_2.38 __isoc23_scanf F > +GLIBC_2.38 __isoc23_sscanf F > GLIBC_2.38 __isoc23_strtoimax F > GLIBC_2.38 __isoc23_strtol F > GLIBC_2.38 __isoc23_strtol_l F > @@ -2643,6 +2647,13 @@ GLIBC_2.38 __isoc23_strtoul_l F > GLIBC_2.38 __isoc23_strtoull F > GLIBC_2.38 __isoc23_strtoull_l F > GLIBC_2.38 __isoc23_strtoumax F > +GLIBC_2.38 __isoc23_swscanf F > +GLIBC_2.38 __isoc23_vfscanf F > +GLIBC_2.38 __isoc23_vfwscanf F > +GLIBC_2.38 __isoc23_vscanf F > +GLIBC_2.38 __isoc23_vsscanf F > +GLIBC_2.38 __isoc23_vswscanf F > +GLIBC_2.38 __isoc23_vwscanf F > GLIBC_2.38 __isoc23_wcstoimax F > GLIBC_2.38 __isoc23_wcstol F > GLIBC_2.38 __isoc23_wcstol_l F > @@ -2653,3 +2664,4 @@ GLIBC_2.38 __isoc23_wcstoul_l F > GLIBC_2.38 __isoc23_wcstoull F > GLIBC_2.38 __isoc23_wcstoull_l F > GLIBC_2.38 __isoc23_wcstoumax F > +GLIBC_2.38 __isoc23_wscanf F > diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist > index 9d490fdee8..f1bec1978d 100644 > --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist > +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist > @@ -2730,6 +2730,10 @@ GLIBC_2.36 pidfd_open F > GLIBC_2.36 pidfd_send_signal F > GLIBC_2.36 process_madvise F > GLIBC_2.36 process_mrelease F > +GLIBC_2.38 __isoc23_fscanf F > +GLIBC_2.38 __isoc23_fwscanf F > +GLIBC_2.38 __isoc23_scanf F > +GLIBC_2.38 __isoc23_sscanf F > GLIBC_2.38 __isoc23_strtoimax F > GLIBC_2.38 __isoc23_strtol F > GLIBC_2.38 __isoc23_strtol_l F > @@ -2740,6 +2744,13 @@ GLIBC_2.38 __isoc23_strtoul_l F > GLIBC_2.38 __isoc23_strtoull F > GLIBC_2.38 __isoc23_strtoull_l F > GLIBC_2.38 __isoc23_strtoumax F > +GLIBC_2.38 __isoc23_swscanf F > +GLIBC_2.38 __isoc23_vfscanf F > +GLIBC_2.38 __isoc23_vfwscanf F > +GLIBC_2.38 __isoc23_vscanf F > +GLIBC_2.38 __isoc23_vsscanf F > +GLIBC_2.38 __isoc23_vswscanf F > +GLIBC_2.38 __isoc23_vwscanf F > GLIBC_2.38 __isoc23_wcstoimax F > GLIBC_2.38 __isoc23_wcstol F > GLIBC_2.38 __isoc23_wcstol_l F > @@ -2750,6 +2761,19 @@ GLIBC_2.38 __isoc23_wcstoul_l F > GLIBC_2.38 __isoc23_wcstoull F > GLIBC_2.38 __isoc23_wcstoull_l F > GLIBC_2.38 __isoc23_wcstoumax F > +GLIBC_2.38 __isoc23_wscanf F > +GLIBC_2.38 __nldbl___isoc23_fscanf F > +GLIBC_2.38 __nldbl___isoc23_fwscanf F > +GLIBC_2.38 __nldbl___isoc23_scanf F > +GLIBC_2.38 __nldbl___isoc23_sscanf F > +GLIBC_2.38 __nldbl___isoc23_swscanf F > +GLIBC_2.38 __nldbl___isoc23_vfscanf F > +GLIBC_2.38 __nldbl___isoc23_vfwscanf F > +GLIBC_2.38 __nldbl___isoc23_vscanf F > +GLIBC_2.38 __nldbl___isoc23_vsscanf F > +GLIBC_2.38 __nldbl___isoc23_vswscanf F > +GLIBC_2.38 __nldbl___isoc23_vwscanf F > +GLIBC_2.38 __nldbl___isoc23_wscanf F > GLIBC_2.4 _IO_fprintf F > GLIBC_2.4 _IO_printf F > GLIBC_2.4 _IO_sprintf F > diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist > index 50874e92fc..aa874b88d0 100644 > --- a/sysdeps/unix/sysv/linux/arc/libc.abilist > +++ b/sysdeps/unix/sysv/linux/arc/libc.abilist > @@ -2394,6 +2394,10 @@ GLIBC_2.36 pidfd_open F > GLIBC_2.36 pidfd_send_signal F > GLIBC_2.36 process_madvise F > GLIBC_2.36 process_mrelease F > +GLIBC_2.38 __isoc23_fscanf F > +GLIBC_2.38 __isoc23_fwscanf F > +GLIBC_2.38 __isoc23_scanf F > +GLIBC_2.38 __isoc23_sscanf F > GLIBC_2.38 __isoc23_strtoimax F > GLIBC_2.38 __isoc23_strtol F > GLIBC_2.38 __isoc23_strtol_l F > @@ -2404,6 +2408,13 @@ GLIBC_2.38 __isoc23_strtoul_l F > GLIBC_2.38 __isoc23_strtoull F > GLIBC_2.38 __isoc23_strtoull_l F > GLIBC_2.38 __isoc23_strtoumax F > +GLIBC_2.38 __isoc23_swscanf F > +GLIBC_2.38 __isoc23_vfscanf F > +GLIBC_2.38 __isoc23_vfwscanf F > +GLIBC_2.38 __isoc23_vscanf F > +GLIBC_2.38 __isoc23_vsscanf F > +GLIBC_2.38 __isoc23_vswscanf F > +GLIBC_2.38 __isoc23_vwscanf F > GLIBC_2.38 __isoc23_wcstoimax F > GLIBC_2.38 __isoc23_wcstol F > GLIBC_2.38 __isoc23_wcstol_l F > @@ -2414,3 +2425,4 @@ GLIBC_2.38 __isoc23_wcstoul_l F > GLIBC_2.38 __isoc23_wcstoull F > GLIBC_2.38 __isoc23_wcstoull_l F > GLIBC_2.38 __isoc23_wcstoumax F > +GLIBC_2.38 __isoc23_wscanf F > diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist > index 544b5b2741..afbd57da6f 100644 > --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist > +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist > @@ -514,6 +514,10 @@ GLIBC_2.36 pidfd_send_signal F > GLIBC_2.36 process_madvise F > GLIBC_2.36 process_mrelease F > GLIBC_2.37 __ppoll64_chk F > +GLIBC_2.38 __isoc23_fscanf F > +GLIBC_2.38 __isoc23_fwscanf F > +GLIBC_2.38 __isoc23_scanf F > +GLIBC_2.38 __isoc23_sscanf F > GLIBC_2.38 __isoc23_strtoimax F > GLIBC_2.38 __isoc23_strtol F > GLIBC_2.38 __isoc23_strtol_l F > @@ -524,6 +528,13 @@ GLIBC_2.38 __isoc23_strtoul_l F > GLIBC_2.38 __isoc23_strtoull F > GLIBC_2.38 __isoc23_strtoull_l F > GLIBC_2.38 __isoc23_strtoumax F > +GLIBC_2.38 __isoc23_swscanf F > +GLIBC_2.38 __isoc23_vfscanf F > +GLIBC_2.38 __isoc23_vfwscanf F > +GLIBC_2.38 __isoc23_vscanf F > +GLIBC_2.38 __isoc23_vsscanf F > +GLIBC_2.38 __isoc23_vswscanf F > +GLIBC_2.38 __isoc23_vwscanf F > GLIBC_2.38 __isoc23_wcstoimax F > GLIBC_2.38 __isoc23_wcstol F > GLIBC_2.38 __isoc23_wcstol_l F > @@ -534,6 +545,7 @@ GLIBC_2.38 __isoc23_wcstoul_l F > GLIBC_2.38 __isoc23_wcstoull F > GLIBC_2.38 __isoc23_wcstoull_l F > GLIBC_2.38 __isoc23_wcstoumax F > +GLIBC_2.38 __isoc23_wscanf F > GLIBC_2.4 _Exit F > GLIBC_2.4 _IO_2_1_stderr_ D 0xa0 > GLIBC_2.4 _IO_2_1_stdin_ D 0xa0 > diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist > index da532a0191..e7364cd3fe 100644 > --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist > +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist > @@ -511,6 +511,10 @@ GLIBC_2.36 pidfd_send_signal F > GLIBC_2.36 process_madvise F > GLIBC_2.36 process_mrelease F > GLIBC_2.37 __ppoll64_chk F > +GLIBC_2.38 __isoc23_fscanf F > +GLIBC_2.38 __isoc23_fwscanf F > +GLIBC_2.38 __isoc23_scanf F > +GLIBC_2.38 __isoc23_sscanf F > GLIBC_2.38 __isoc23_strtoimax F > GLIBC_2.38 __isoc23_strtol F > GLIBC_2.38 __isoc23_strtol_l F > @@ -521,6 +525,13 @@ GLIBC_2.38 __isoc23_strtoul_l F > GLIBC_2.38 __isoc23_strtoull F > GLIBC_2.38 __isoc23_strtoull_l F > GLIBC_2.38 __isoc23_strtoumax F > +GLIBC_2.38 __isoc23_swscanf F > +GLIBC_2.38 __isoc23_vfscanf F > +GLIBC_2.38 __isoc23_vfwscanf F > +GLIBC_2.38 __isoc23_vscanf F > +GLIBC_2.38 __isoc23_vsscanf F > +GLIBC_2.38 __isoc23_vswscanf F > +GLIBC_2.38 __isoc23_vwscanf F > GLIBC_2.38 __isoc23_wcstoimax F > GLIBC_2.38 __isoc23_wcstol F > GLIBC_2.38 __isoc23_wcstol_l F > @@ -531,6 +542,7 @@ GLIBC_2.38 __isoc23_wcstoul_l F > GLIBC_2.38 __isoc23_wcstoull F > GLIBC_2.38 __isoc23_wcstoull_l F > GLIBC_2.38 __isoc23_wcstoumax F > +GLIBC_2.38 __isoc23_wscanf F > GLIBC_2.4 _Exit F > GLIBC_2.4 _IO_2_1_stderr_ D 0xa0 > GLIBC_2.4 _IO_2_1_stdin_ D 0xa0 > diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist > index 6c74a60d69..913fa59215 100644 > --- a/sysdeps/unix/sysv/linux/csky/libc.abilist > +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist > @@ -2670,6 +2670,10 @@ GLIBC_2.36 pidfd_send_signal F > GLIBC_2.36 process_madvise F > GLIBC_2.36 process_mrelease F > GLIBC_2.37 __ppoll64_chk F > +GLIBC_2.38 __isoc23_fscanf F > +GLIBC_2.38 __isoc23_fwscanf F > +GLIBC_2.38 __isoc23_scanf F > +GLIBC_2.38 __isoc23_sscanf F > GLIBC_2.38 __isoc23_strtoimax F > GLIBC_2.38 __isoc23_strtol F > GLIBC_2.38 __isoc23_strtol_l F > @@ -2680,6 +2684,13 @@ GLIBC_2.38 __isoc23_strtoul_l F > GLIBC_2.38 __isoc23_strtoull F > GLIBC_2.38 __isoc23_strtoull_l F > GLIBC_2.38 __isoc23_strtoumax F > +GLIBC_2.38 __isoc23_swscanf F > +GLIBC_2.38 __isoc23_vfscanf F > +GLIBC_2.38 __isoc23_vfwscanf F > +GLIBC_2.38 __isoc23_vscanf F > +GLIBC_2.38 __isoc23_vsscanf F > +GLIBC_2.38 __isoc23_vswscanf F > +GLIBC_2.38 __isoc23_vwscanf F > GLIBC_2.38 __isoc23_wcstoimax F > GLIBC_2.38 __isoc23_wcstol F > GLIBC_2.38 __isoc23_wcstol_l F > @@ -2690,3 +2701,4 @@ GLIBC_2.38 __isoc23_wcstoul_l F > GLIBC_2.38 __isoc23_wcstoull F > GLIBC_2.38 __isoc23_wcstoull_l F > GLIBC_2.38 __isoc23_wcstoumax F > +GLIBC_2.38 __isoc23_wscanf F > diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist > index 13d30e646f..43af3a9811 100644 > --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist > +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist > @@ -2619,6 +2619,10 @@ GLIBC_2.36 pidfd_send_signal F > GLIBC_2.36 process_madvise F > GLIBC_2.36 process_mrelease F > GLIBC_2.37 __ppoll64_chk F > +GLIBC_2.38 __isoc23_fscanf F > +GLIBC_2.38 __isoc23_fwscanf F > +GLIBC_2.38 __isoc23_scanf F > +GLIBC_2.38 __isoc23_sscanf F > GLIBC_2.38 __isoc23_strtoimax F > GLIBC_2.38 __isoc23_strtol F > GLIBC_2.38 __isoc23_strtol_l F > @@ -2629,6 +2633,13 @@ GLIBC_2.38 __isoc23_strtoul_l F > GLIBC_2.38 __isoc23_strtoull F > GLIBC_2.38 __isoc23_strtoull_l F > GLIBC_2.38 __isoc23_strtoumax F > +GLIBC_2.38 __isoc23_swscanf F > +GLIBC_2.38 __isoc23_vfscanf F > +GLIBC_2.38 __isoc23_vfwscanf F > +GLIBC_2.38 __isoc23_vscanf F > +GLIBC_2.38 __isoc23_vsscanf F > +GLIBC_2.38 __isoc23_vswscanf F > +GLIBC_2.38 __isoc23_vwscanf F > GLIBC_2.38 __isoc23_wcstoimax F > GLIBC_2.38 __isoc23_wcstol F > GLIBC_2.38 __isoc23_wcstol_l F > @@ -2639,6 +2650,7 @@ GLIBC_2.38 __isoc23_wcstoul_l F > GLIBC_2.38 __isoc23_wcstoull F > GLIBC_2.38 __isoc23_wcstoull_l F > GLIBC_2.38 __isoc23_wcstoumax F > +GLIBC_2.38 __isoc23_wscanf F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist > index f5dfa2a20e..af72f8fab0 100644 > --- a/sysdeps/unix/sysv/linux/i386/libc.abilist > +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist > @@ -2803,6 +2803,10 @@ GLIBC_2.36 pidfd_send_signal F > GLIBC_2.36 process_madvise F > GLIBC_2.36 process_mrelease F > GLIBC_2.37 __ppoll64_chk F > +GLIBC_2.38 __isoc23_fscanf F > +GLIBC_2.38 __isoc23_fwscanf F > +GLIBC_2.38 __isoc23_scanf F > +GLIBC_2.38 __isoc23_sscanf F > GLIBC_2.38 __isoc23_strtoimax F > GLIBC_2.38 __isoc23_strtol F > GLIBC_2.38 __isoc23_strtol_l F > @@ -2813,6 +2817,13 @@ GLIBC_2.38 __isoc23_strtoul_l F > GLIBC_2.38 __isoc23_strtoull F > GLIBC_2.38 __isoc23_strtoull_l F > GLIBC_2.38 __isoc23_strtoumax F > +GLIBC_2.38 __isoc23_swscanf F > +GLIBC_2.38 __isoc23_vfscanf F > +GLIBC_2.38 __isoc23_vfwscanf F > +GLIBC_2.38 __isoc23_vscanf F > +GLIBC_2.38 __isoc23_vsscanf F > +GLIBC_2.38 __isoc23_vswscanf F > +GLIBC_2.38 __isoc23_vwscanf F > GLIBC_2.38 __isoc23_wcstoimax F > GLIBC_2.38 __isoc23_wcstol F > GLIBC_2.38 __isoc23_wcstol_l F > @@ -2823,6 +2834,7 @@ GLIBC_2.38 __isoc23_wcstoul_l F > GLIBC_2.38 __isoc23_wcstoull F > GLIBC_2.38 __isoc23_wcstoull_l F > GLIBC_2.38 __isoc23_wcstoumax F > +GLIBC_2.38 __isoc23_wscanf F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist > index 58f1526030..48cbb0fa50 100644 > --- a/sysdeps/unix/sysv/linux/ia64/libc.abilist > +++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist > @@ -2568,6 +2568,10 @@ GLIBC_2.36 pidfd_open F > GLIBC_2.36 pidfd_send_signal F > GLIBC_2.36 process_madvise F > GLIBC_2.36 process_mrelease F > +GLIBC_2.38 __isoc23_fscanf F > +GLIBC_2.38 __isoc23_fwscanf F > +GLIBC_2.38 __isoc23_scanf F > +GLIBC_2.38 __isoc23_sscanf F > GLIBC_2.38 __isoc23_strtoimax F > GLIBC_2.38 __isoc23_strtol F > GLIBC_2.38 __isoc23_strtol_l F > @@ -2578,6 +2582,13 @@ GLIBC_2.38 __isoc23_strtoul_l F > GLIBC_2.38 __isoc23_strtoull F > GLIBC_2.38 __isoc23_strtoull_l F > GLIBC_2.38 __isoc23_strtoumax F > +GLIBC_2.38 __isoc23_swscanf F > +GLIBC_2.38 __isoc23_vfscanf F > +GLIBC_2.38 __isoc23_vfwscanf F > +GLIBC_2.38 __isoc23_vscanf F > +GLIBC_2.38 __isoc23_vsscanf F > +GLIBC_2.38 __isoc23_vswscanf F > +GLIBC_2.38 __isoc23_vwscanf F > GLIBC_2.38 __isoc23_wcstoimax F > GLIBC_2.38 __isoc23_wcstol F > GLIBC_2.38 __isoc23_wcstol_l F > @@ -2588,6 +2599,7 @@ GLIBC_2.38 __isoc23_wcstoul_l F > GLIBC_2.38 __isoc23_wcstoull F > GLIBC_2.38 __isoc23_wcstoull_l F > GLIBC_2.38 __isoc23_wcstoumax F > +GLIBC_2.38 __isoc23_wscanf F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist b/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist > index 46ce2437fe..c15884bb0b 100644 > --- a/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist > +++ b/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist > @@ -2154,6 +2154,10 @@ GLIBC_2.36 wprintf F > GLIBC_2.36 write F > GLIBC_2.36 writev F > GLIBC_2.36 wscanf F > +GLIBC_2.38 __isoc23_fscanf F > +GLIBC_2.38 __isoc23_fwscanf F > +GLIBC_2.38 __isoc23_scanf F > +GLIBC_2.38 __isoc23_sscanf F > GLIBC_2.38 __isoc23_strtoimax F > GLIBC_2.38 __isoc23_strtol F > GLIBC_2.38 __isoc23_strtol_l F > @@ -2164,6 +2168,13 @@ GLIBC_2.38 __isoc23_strtoul_l F > GLIBC_2.38 __isoc23_strtoull F > GLIBC_2.38 __isoc23_strtoull_l F > GLIBC_2.38 __isoc23_strtoumax F > +GLIBC_2.38 __isoc23_swscanf F > +GLIBC_2.38 __isoc23_vfscanf F > +GLIBC_2.38 __isoc23_vfwscanf F > +GLIBC_2.38 __isoc23_vscanf F > +GLIBC_2.38 __isoc23_vsscanf F > +GLIBC_2.38 __isoc23_vswscanf F > +GLIBC_2.38 __isoc23_vwscanf F > GLIBC_2.38 __isoc23_wcstoimax F > GLIBC_2.38 __isoc23_wcstol F > GLIBC_2.38 __isoc23_wcstol_l F > @@ -2174,3 +2185,4 @@ GLIBC_2.38 __isoc23_wcstoul_l F > GLIBC_2.38 __isoc23_wcstoull F > GLIBC_2.38 __isoc23_wcstoull_l F > GLIBC_2.38 __isoc23_wcstoumax F > +GLIBC_2.38 __isoc23_wscanf F > diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist > index f34085ce35..3738db81df 100644 > --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist > +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist > @@ -515,6 +515,10 @@ GLIBC_2.36 pidfd_send_signal F > GLIBC_2.36 process_madvise F > GLIBC_2.36 process_mrelease F > GLIBC_2.37 __ppoll64_chk F > +GLIBC_2.38 __isoc23_fscanf F > +GLIBC_2.38 __isoc23_fwscanf F > +GLIBC_2.38 __isoc23_scanf F > +GLIBC_2.38 __isoc23_sscanf F > GLIBC_2.38 __isoc23_strtoimax F > GLIBC_2.38 __isoc23_strtol F > GLIBC_2.38 __isoc23_strtol_l F > @@ -525,6 +529,13 @@ GLIBC_2.38 __isoc23_strtoul_l F > GLIBC_2.38 __isoc23_strtoull F > GLIBC_2.38 __isoc23_strtoull_l F > GLIBC_2.38 __isoc23_strtoumax F > +GLIBC_2.38 __isoc23_swscanf F > +GLIBC_2.38 __isoc23_vfscanf F > +GLIBC_2.38 __isoc23_vfwscanf F > +GLIBC_2.38 __isoc23_vscanf F > +GLIBC_2.38 __isoc23_vsscanf F > +GLIBC_2.38 __isoc23_vswscanf F > +GLIBC_2.38 __isoc23_vwscanf F > GLIBC_2.38 __isoc23_wcstoimax F > GLIBC_2.38 __isoc23_wcstol F > GLIBC_2.38 __isoc23_wcstol_l F > @@ -535,6 +546,7 @@ GLIBC_2.38 __isoc23_wcstoul_l F > GLIBC_2.38 __isoc23_wcstoull F > GLIBC_2.38 __isoc23_wcstoull_l F > GLIBC_2.38 __isoc23_wcstoumax F > +GLIBC_2.38 __isoc23_wscanf F > GLIBC_2.4 _Exit F > GLIBC_2.4 _IO_2_1_stderr_ D 0x98 > GLIBC_2.4 _IO_2_1_stdin_ D 0x98 > diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist > index 349377d154..ed13627752 100644 > --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist > +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist > @@ -2746,6 +2746,10 @@ GLIBC_2.36 pidfd_send_signal F > GLIBC_2.36 process_madvise F > GLIBC_2.36 process_mrelease F > GLIBC_2.37 __ppoll64_chk F > +GLIBC_2.38 __isoc23_fscanf F > +GLIBC_2.38 __isoc23_fwscanf F > +GLIBC_2.38 __isoc23_scanf F > +GLIBC_2.38 __isoc23_sscanf F > GLIBC_2.38 __isoc23_strtoimax F > GLIBC_2.38 __isoc23_strtol F > GLIBC_2.38 __isoc23_strtol_l F > @@ -2756,6 +2760,13 @@ GLIBC_2.38 __isoc23_strtoul_l F > GLIBC_2.38 __isoc23_strtoull F > GLIBC_2.38 __isoc23_strtoull_l F > GLIBC_2.38 __isoc23_strtoumax F > +GLIBC_2.38 __isoc23_swscanf F > +GLIBC_2.38 __isoc23_vfscanf F > +GLIBC_2.38 __isoc23_vfwscanf F > +GLIBC_2.38 __isoc23_vscanf F > +GLIBC_2.38 __isoc23_vsscanf F > +GLIBC_2.38 __isoc23_vswscanf F > +GLIBC_2.38 __isoc23_vwscanf F > GLIBC_2.38 __isoc23_wcstoimax F > GLIBC_2.38 __isoc23_wcstol F > GLIBC_2.38 __isoc23_wcstol_l F > @@ -2766,6 +2777,7 @@ GLIBC_2.38 __isoc23_wcstoul_l F > GLIBC_2.38 __isoc23_wcstoull F > GLIBC_2.38 __isoc23_wcstoull_l F > GLIBC_2.38 __isoc23_wcstoumax F > +GLIBC_2.38 __isoc23_wscanf F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist > index 38e7fb9b2a..8357738621 100644 > --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist > +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist > @@ -2719,6 +2719,10 @@ GLIBC_2.36 pidfd_send_signal F > GLIBC_2.36 process_madvise F > GLIBC_2.36 process_mrelease F > GLIBC_2.37 __ppoll64_chk F > +GLIBC_2.38 __isoc23_fscanf F > +GLIBC_2.38 __isoc23_fwscanf F > +GLIBC_2.38 __isoc23_scanf F > +GLIBC_2.38 __isoc23_sscanf F > GLIBC_2.38 __isoc23_strtoimax F > GLIBC_2.38 __isoc23_strtol F > GLIBC_2.38 __isoc23_strtol_l F > @@ -2729,6 +2733,13 @@ GLIBC_2.38 __isoc23_strtoul_l F > GLIBC_2.38 __isoc23_strtoull F > GLIBC_2.38 __isoc23_strtoull_l F > GLIBC_2.38 __isoc23_strtoumax F > +GLIBC_2.38 __isoc23_swscanf F > +GLIBC_2.38 __isoc23_vfscanf F > +GLIBC_2.38 __isoc23_vfwscanf F > +GLIBC_2.38 __isoc23_vscanf F > +GLIBC_2.38 __isoc23_vsscanf F > +GLIBC_2.38 __isoc23_vswscanf F > +GLIBC_2.38 __isoc23_vwscanf F > GLIBC_2.38 __isoc23_wcstoimax F > GLIBC_2.38 __isoc23_wcstol F > GLIBC_2.38 __isoc23_wcstol_l F > @@ -2739,3 +2750,4 @@ GLIBC_2.38 __isoc23_wcstoul_l F > GLIBC_2.38 __isoc23_wcstoull F > GLIBC_2.38 __isoc23_wcstoull_l F > GLIBC_2.38 __isoc23_wcstoumax F > +GLIBC_2.38 __isoc23_wscanf F > diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist > index ec4ca27b75..58c5da583d 100644 > --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist > +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist > @@ -2716,6 +2716,10 @@ GLIBC_2.36 pidfd_send_signal F > GLIBC_2.36 process_madvise F > GLIBC_2.36 process_mrelease F > GLIBC_2.37 __ppoll64_chk F > +GLIBC_2.38 __isoc23_fscanf F > +GLIBC_2.38 __isoc23_fwscanf F > +GLIBC_2.38 __isoc23_scanf F > +GLIBC_2.38 __isoc23_sscanf F > GLIBC_2.38 __isoc23_strtoimax F > GLIBC_2.38 __isoc23_strtol F > GLIBC_2.38 __isoc23_strtol_l F > @@ -2726,6 +2730,13 @@ GLIBC_2.38 __isoc23_strtoul_l F > GLIBC_2.38 __isoc23_strtoull F > GLIBC_2.38 __isoc23_strtoull_l F > GLIBC_2.38 __isoc23_strtoumax F > +GLIBC_2.38 __isoc23_swscanf F > +GLIBC_2.38 __isoc23_vfscanf F > +GLIBC_2.38 __isoc23_vfwscanf F > +GLIBC_2.38 __isoc23_vscanf F > +GLIBC_2.38 __isoc23_vsscanf F > +GLIBC_2.38 __isoc23_vswscanf F > +GLIBC_2.38 __isoc23_vwscanf F > GLIBC_2.38 __isoc23_wcstoimax F > GLIBC_2.38 __isoc23_wcstol F > GLIBC_2.38 __isoc23_wcstol_l F > @@ -2736,3 +2747,4 @@ GLIBC_2.38 __isoc23_wcstoul_l F > GLIBC_2.38 __isoc23_wcstoull F > GLIBC_2.38 __isoc23_wcstoull_l F > GLIBC_2.38 __isoc23_wcstoumax F > +GLIBC_2.38 __isoc23_wscanf F > diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist > index bd3f3404fb..d3741945cd 100644 > --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist > +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist > @@ -2711,6 +2711,10 @@ GLIBC_2.36 pidfd_send_signal F > GLIBC_2.36 process_madvise F > GLIBC_2.36 process_mrelease F > GLIBC_2.37 __ppoll64_chk F > +GLIBC_2.38 __isoc23_fscanf F > +GLIBC_2.38 __isoc23_fwscanf F > +GLIBC_2.38 __isoc23_scanf F > +GLIBC_2.38 __isoc23_sscanf F > GLIBC_2.38 __isoc23_strtoimax F > GLIBC_2.38 __isoc23_strtol F > GLIBC_2.38 __isoc23_strtol_l F > @@ -2721,6 +2725,13 @@ GLIBC_2.38 __isoc23_strtoul_l F > GLIBC_2.38 __isoc23_strtoull F > GLIBC_2.38 __isoc23_strtoull_l F > GLIBC_2.38 __isoc23_strtoumax F > +GLIBC_2.38 __isoc23_swscanf F > +GLIBC_2.38 __isoc23_vfscanf F > +GLIBC_2.38 __isoc23_vfwscanf F > +GLIBC_2.38 __isoc23_vscanf F > +GLIBC_2.38 __isoc23_vsscanf F > +GLIBC_2.38 __isoc23_vswscanf F > +GLIBC_2.38 __isoc23_vwscanf F > GLIBC_2.38 __isoc23_wcstoimax F > GLIBC_2.38 __isoc23_wcstol F > GLIBC_2.38 __isoc23_wcstol_l F > @@ -2731,6 +2742,7 @@ GLIBC_2.38 __isoc23_wcstoul_l F > GLIBC_2.38 __isoc23_wcstoull F > GLIBC_2.38 __isoc23_wcstoull_l F > GLIBC_2.38 __isoc23_wcstoumax F > +GLIBC_2.38 __isoc23_wscanf F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist > index 9b09fab6ec..5319fdc204 100644 > --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist > +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist > @@ -2709,6 +2709,10 @@ GLIBC_2.36 pidfd_send_signal F > GLIBC_2.36 process_madvise F > GLIBC_2.36 process_mrelease F > GLIBC_2.37 __ppoll64_chk F > +GLIBC_2.38 __isoc23_fscanf F > +GLIBC_2.38 __isoc23_fwscanf F > +GLIBC_2.38 __isoc23_scanf F > +GLIBC_2.38 __isoc23_sscanf F > GLIBC_2.38 __isoc23_strtoimax F > GLIBC_2.38 __isoc23_strtol F > GLIBC_2.38 __isoc23_strtol_l F > @@ -2719,6 +2723,13 @@ GLIBC_2.38 __isoc23_strtoul_l F > GLIBC_2.38 __isoc23_strtoull F > GLIBC_2.38 __isoc23_strtoull_l F > GLIBC_2.38 __isoc23_strtoumax F > +GLIBC_2.38 __isoc23_swscanf F > +GLIBC_2.38 __isoc23_vfscanf F > +GLIBC_2.38 __isoc23_vfwscanf F > +GLIBC_2.38 __isoc23_vscanf F > +GLIBC_2.38 __isoc23_vsscanf F > +GLIBC_2.38 __isoc23_vswscanf F > +GLIBC_2.38 __isoc23_vwscanf F > GLIBC_2.38 __isoc23_wcstoimax F > GLIBC_2.38 __isoc23_wcstol F > GLIBC_2.38 __isoc23_wcstol_l F > @@ -2729,6 +2740,7 @@ GLIBC_2.38 __isoc23_wcstoul_l F > GLIBC_2.38 __isoc23_wcstoull F > GLIBC_2.38 __isoc23_wcstoull_l F > GLIBC_2.38 __isoc23_wcstoumax F > +GLIBC_2.38 __isoc23_wscanf F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist > index 3b8f2b8ca3..1743ea6eb9 100644 > --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist > +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist > @@ -2717,6 +2717,10 @@ GLIBC_2.36 pidfd_send_signal F > GLIBC_2.36 process_madvise F > GLIBC_2.36 process_mrelease F > GLIBC_2.37 __ppoll64_chk F > +GLIBC_2.38 __isoc23_fscanf F > +GLIBC_2.38 __isoc23_fwscanf F > +GLIBC_2.38 __isoc23_scanf F > +GLIBC_2.38 __isoc23_sscanf F > GLIBC_2.38 __isoc23_strtoimax F > GLIBC_2.38 __isoc23_strtol F > GLIBC_2.38 __isoc23_strtol_l F > @@ -2727,6 +2731,13 @@ GLIBC_2.38 __isoc23_strtoul_l F > GLIBC_2.38 __isoc23_strtoull F > GLIBC_2.38 __isoc23_strtoull_l F > GLIBC_2.38 __isoc23_strtoumax F > +GLIBC_2.38 __isoc23_swscanf F > +GLIBC_2.38 __isoc23_vfscanf F > +GLIBC_2.38 __isoc23_vfwscanf F > +GLIBC_2.38 __isoc23_vscanf F > +GLIBC_2.38 __isoc23_vsscanf F > +GLIBC_2.38 __isoc23_vswscanf F > +GLIBC_2.38 __isoc23_vwscanf F > GLIBC_2.38 __isoc23_wcstoimax F > GLIBC_2.38 __isoc23_wcstol F > GLIBC_2.38 __isoc23_wcstol_l F > @@ -2737,6 +2748,7 @@ GLIBC_2.38 __isoc23_wcstoul_l F > GLIBC_2.38 __isoc23_wcstoull F > GLIBC_2.38 __isoc23_wcstoull_l F > GLIBC_2.38 __isoc23_wcstoumax F > +GLIBC_2.38 __isoc23_wscanf F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist > index 497553414d..9b1f53c6ac 100644 > --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist > +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist > @@ -2619,6 +2619,10 @@ GLIBC_2.36 pidfd_open F > GLIBC_2.36 pidfd_send_signal F > GLIBC_2.36 process_madvise F > GLIBC_2.36 process_mrelease F > +GLIBC_2.38 __isoc23_fscanf F > +GLIBC_2.38 __isoc23_fwscanf F > +GLIBC_2.38 __isoc23_scanf F > +GLIBC_2.38 __isoc23_sscanf F > GLIBC_2.38 __isoc23_strtoimax F > GLIBC_2.38 __isoc23_strtol F > GLIBC_2.38 __isoc23_strtol_l F > @@ -2629,6 +2633,13 @@ GLIBC_2.38 __isoc23_strtoul_l F > GLIBC_2.38 __isoc23_strtoull F > GLIBC_2.38 __isoc23_strtoull_l F > GLIBC_2.38 __isoc23_strtoumax F > +GLIBC_2.38 __isoc23_swscanf F > +GLIBC_2.38 __isoc23_vfscanf F > +GLIBC_2.38 __isoc23_vfwscanf F > +GLIBC_2.38 __isoc23_vscanf F > +GLIBC_2.38 __isoc23_vsscanf F > +GLIBC_2.38 __isoc23_vswscanf F > +GLIBC_2.38 __isoc23_vwscanf F > GLIBC_2.38 __isoc23_wcstoimax F > GLIBC_2.38 __isoc23_wcstol F > GLIBC_2.38 __isoc23_wcstol_l F > @@ -2639,6 +2650,7 @@ GLIBC_2.38 __isoc23_wcstoul_l F > GLIBC_2.38 __isoc23_wcstoull F > GLIBC_2.38 __isoc23_wcstoull_l F > GLIBC_2.38 __isoc23_wcstoumax F > +GLIBC_2.38 __isoc23_wscanf F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist > index f67f241498..ae1c6ca1b5 100644 > --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist > +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist > @@ -2758,6 +2758,10 @@ GLIBC_2.36 pidfd_send_signal F > GLIBC_2.36 process_madvise F > GLIBC_2.36 process_mrelease F > GLIBC_2.37 __ppoll64_chk F > +GLIBC_2.38 __isoc23_fscanf F > +GLIBC_2.38 __isoc23_fwscanf F > +GLIBC_2.38 __isoc23_scanf F > +GLIBC_2.38 __isoc23_sscanf F > GLIBC_2.38 __isoc23_strtoimax F > GLIBC_2.38 __isoc23_strtol F > GLIBC_2.38 __isoc23_strtol_l F > @@ -2768,6 +2772,13 @@ GLIBC_2.38 __isoc23_strtoul_l F > GLIBC_2.38 __isoc23_strtoull F > GLIBC_2.38 __isoc23_strtoull_l F > GLIBC_2.38 __isoc23_strtoumax F > +GLIBC_2.38 __isoc23_swscanf F > +GLIBC_2.38 __isoc23_vfscanf F > +GLIBC_2.38 __isoc23_vfwscanf F > +GLIBC_2.38 __isoc23_vscanf F > +GLIBC_2.38 __isoc23_vsscanf F > +GLIBC_2.38 __isoc23_vswscanf F > +GLIBC_2.38 __isoc23_vwscanf F > GLIBC_2.38 __isoc23_wcstoimax F > GLIBC_2.38 __isoc23_wcstol F > GLIBC_2.38 __isoc23_wcstol_l F > @@ -2778,3 +2789,4 @@ GLIBC_2.38 __isoc23_wcstoul_l F > GLIBC_2.38 __isoc23_wcstoull F > GLIBC_2.38 __isoc23_wcstoull_l F > GLIBC_2.38 __isoc23_wcstoumax F > +GLIBC_2.38 __isoc23_wscanf F > diff --git a/sysdeps/unix/sysv/linux/or1k/libc.abilist b/sysdeps/unix/sysv/linux/or1k/libc.abilist > index a59a58f44c..a7c572c947 100644 > --- a/sysdeps/unix/sysv/linux/or1k/libc.abilist > +++ b/sysdeps/unix/sysv/linux/or1k/libc.abilist > @@ -2140,6 +2140,10 @@ GLIBC_2.36 pidfd_open F > GLIBC_2.36 pidfd_send_signal F > GLIBC_2.36 process_madvise F > GLIBC_2.36 process_mrelease F > +GLIBC_2.38 __isoc23_fscanf F > +GLIBC_2.38 __isoc23_fwscanf F > +GLIBC_2.38 __isoc23_scanf F > +GLIBC_2.38 __isoc23_sscanf F > GLIBC_2.38 __isoc23_strtoimax F > GLIBC_2.38 __isoc23_strtol F > GLIBC_2.38 __isoc23_strtol_l F > @@ -2150,6 +2154,13 @@ GLIBC_2.38 __isoc23_strtoul_l F > GLIBC_2.38 __isoc23_strtoull F > GLIBC_2.38 __isoc23_strtoull_l F > GLIBC_2.38 __isoc23_strtoumax F > +GLIBC_2.38 __isoc23_swscanf F > +GLIBC_2.38 __isoc23_vfscanf F > +GLIBC_2.38 __isoc23_vfwscanf F > +GLIBC_2.38 __isoc23_vscanf F > +GLIBC_2.38 __isoc23_vsscanf F > +GLIBC_2.38 __isoc23_vswscanf F > +GLIBC_2.38 __isoc23_vwscanf F > GLIBC_2.38 __isoc23_wcstoimax F > GLIBC_2.38 __isoc23_wcstol F > GLIBC_2.38 __isoc23_wcstol_l F > @@ -2160,3 +2171,4 @@ GLIBC_2.38 __isoc23_wcstoul_l F > GLIBC_2.38 __isoc23_wcstoull F > GLIBC_2.38 __isoc23_wcstoull_l F > GLIBC_2.38 __isoc23_wcstoumax F > +GLIBC_2.38 __isoc23_wscanf F > diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist > index a1bcf79955..074fa031a7 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist > +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist > @@ -2773,6 +2773,10 @@ GLIBC_2.36 pidfd_send_signal F > GLIBC_2.36 process_madvise F > GLIBC_2.36 process_mrelease F > GLIBC_2.37 __ppoll64_chk F > +GLIBC_2.38 __isoc23_fscanf F > +GLIBC_2.38 __isoc23_fwscanf F > +GLIBC_2.38 __isoc23_scanf F > +GLIBC_2.38 __isoc23_sscanf F > GLIBC_2.38 __isoc23_strtoimax F > GLIBC_2.38 __isoc23_strtol F > GLIBC_2.38 __isoc23_strtol_l F > @@ -2783,6 +2787,13 @@ GLIBC_2.38 __isoc23_strtoul_l F > GLIBC_2.38 __isoc23_strtoull F > GLIBC_2.38 __isoc23_strtoull_l F > GLIBC_2.38 __isoc23_strtoumax F > +GLIBC_2.38 __isoc23_swscanf F > +GLIBC_2.38 __isoc23_vfscanf F > +GLIBC_2.38 __isoc23_vfwscanf F > +GLIBC_2.38 __isoc23_vscanf F > +GLIBC_2.38 __isoc23_vsscanf F > +GLIBC_2.38 __isoc23_vswscanf F > +GLIBC_2.38 __isoc23_vwscanf F > GLIBC_2.38 __isoc23_wcstoimax F > GLIBC_2.38 __isoc23_wcstol F > GLIBC_2.38 __isoc23_wcstol_l F > @@ -2793,6 +2804,19 @@ GLIBC_2.38 __isoc23_wcstoul_l F > GLIBC_2.38 __isoc23_wcstoull F > GLIBC_2.38 __isoc23_wcstoull_l F > GLIBC_2.38 __isoc23_wcstoumax F > +GLIBC_2.38 __isoc23_wscanf F > +GLIBC_2.38 __nldbl___isoc23_fscanf F > +GLIBC_2.38 __nldbl___isoc23_fwscanf F > +GLIBC_2.38 __nldbl___isoc23_scanf F > +GLIBC_2.38 __nldbl___isoc23_sscanf F > +GLIBC_2.38 __nldbl___isoc23_swscanf F > +GLIBC_2.38 __nldbl___isoc23_vfscanf F > +GLIBC_2.38 __nldbl___isoc23_vfwscanf F > +GLIBC_2.38 __nldbl___isoc23_vscanf F > +GLIBC_2.38 __nldbl___isoc23_vsscanf F > +GLIBC_2.38 __nldbl___isoc23_vswscanf F > +GLIBC_2.38 __nldbl___isoc23_vwscanf F > +GLIBC_2.38 __nldbl___isoc23_wscanf F > GLIBC_2.4 _IO_fprintf F > GLIBC_2.4 _IO_printf F > GLIBC_2.4 _IO_sprintf F > diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist > index c0f28aea45..dfcb4bd2d5 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist > +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist > @@ -2806,6 +2806,10 @@ GLIBC_2.36 pidfd_send_signal F > GLIBC_2.36 process_madvise F > GLIBC_2.36 process_mrelease F > GLIBC_2.37 __ppoll64_chk F > +GLIBC_2.38 __isoc23_fscanf F > +GLIBC_2.38 __isoc23_fwscanf F > +GLIBC_2.38 __isoc23_scanf F > +GLIBC_2.38 __isoc23_sscanf F > GLIBC_2.38 __isoc23_strtoimax F > GLIBC_2.38 __isoc23_strtol F > GLIBC_2.38 __isoc23_strtol_l F > @@ -2816,6 +2820,13 @@ GLIBC_2.38 __isoc23_strtoul_l F > GLIBC_2.38 __isoc23_strtoull F > GLIBC_2.38 __isoc23_strtoull_l F > GLIBC_2.38 __isoc23_strtoumax F > +GLIBC_2.38 __isoc23_swscanf F > +GLIBC_2.38 __isoc23_vfscanf F > +GLIBC_2.38 __isoc23_vfwscanf F > +GLIBC_2.38 __isoc23_vscanf F > +GLIBC_2.38 __isoc23_vsscanf F > +GLIBC_2.38 __isoc23_vswscanf F > +GLIBC_2.38 __isoc23_vwscanf F > GLIBC_2.38 __isoc23_wcstoimax F > GLIBC_2.38 __isoc23_wcstol F > GLIBC_2.38 __isoc23_wcstol_l F > @@ -2826,6 +2837,19 @@ GLIBC_2.38 __isoc23_wcstoul_l F > GLIBC_2.38 __isoc23_wcstoull F > GLIBC_2.38 __isoc23_wcstoull_l F > GLIBC_2.38 __isoc23_wcstoumax F > +GLIBC_2.38 __isoc23_wscanf F > +GLIBC_2.38 __nldbl___isoc23_fscanf F > +GLIBC_2.38 __nldbl___isoc23_fwscanf F > +GLIBC_2.38 __nldbl___isoc23_scanf F > +GLIBC_2.38 __nldbl___isoc23_sscanf F > +GLIBC_2.38 __nldbl___isoc23_swscanf F > +GLIBC_2.38 __nldbl___isoc23_vfscanf F > +GLIBC_2.38 __nldbl___isoc23_vfwscanf F > +GLIBC_2.38 __nldbl___isoc23_vscanf F > +GLIBC_2.38 __nldbl___isoc23_vsscanf F > +GLIBC_2.38 __nldbl___isoc23_vswscanf F > +GLIBC_2.38 __nldbl___isoc23_vwscanf F > +GLIBC_2.38 __nldbl___isoc23_wscanf F > GLIBC_2.4 _IO_fprintf F > GLIBC_2.4 _IO_printf F > GLIBC_2.4 _IO_sprintf F > diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist > index 6b4459964f..63bbccf3f9 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist > +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist > @@ -2527,6 +2527,10 @@ GLIBC_2.36 pidfd_open F > GLIBC_2.36 pidfd_send_signal F > GLIBC_2.36 process_madvise F > GLIBC_2.36 process_mrelease F > +GLIBC_2.38 __isoc23_fscanf F > +GLIBC_2.38 __isoc23_fwscanf F > +GLIBC_2.38 __isoc23_scanf F > +GLIBC_2.38 __isoc23_sscanf F > GLIBC_2.38 __isoc23_strtoimax F > GLIBC_2.38 __isoc23_strtol F > GLIBC_2.38 __isoc23_strtol_l F > @@ -2537,6 +2541,13 @@ GLIBC_2.38 __isoc23_strtoul_l F > GLIBC_2.38 __isoc23_strtoull F > GLIBC_2.38 __isoc23_strtoull_l F > GLIBC_2.38 __isoc23_strtoumax F > +GLIBC_2.38 __isoc23_swscanf F > +GLIBC_2.38 __isoc23_vfscanf F > +GLIBC_2.38 __isoc23_vfwscanf F > +GLIBC_2.38 __isoc23_vscanf F > +GLIBC_2.38 __isoc23_vsscanf F > +GLIBC_2.38 __isoc23_vswscanf F > +GLIBC_2.38 __isoc23_vwscanf F > GLIBC_2.38 __isoc23_wcstoimax F > GLIBC_2.38 __isoc23_wcstol F > GLIBC_2.38 __isoc23_wcstol_l F > @@ -2547,6 +2558,19 @@ GLIBC_2.38 __isoc23_wcstoul_l F > GLIBC_2.38 __isoc23_wcstoull F > GLIBC_2.38 __isoc23_wcstoull_l F > GLIBC_2.38 __isoc23_wcstoumax F > +GLIBC_2.38 __isoc23_wscanf F > +GLIBC_2.38 __nldbl___isoc23_fscanf F > +GLIBC_2.38 __nldbl___isoc23_fwscanf F > +GLIBC_2.38 __nldbl___isoc23_scanf F > +GLIBC_2.38 __nldbl___isoc23_sscanf F > +GLIBC_2.38 __nldbl___isoc23_swscanf F > +GLIBC_2.38 __nldbl___isoc23_vfscanf F > +GLIBC_2.38 __nldbl___isoc23_vfwscanf F > +GLIBC_2.38 __nldbl___isoc23_vscanf F > +GLIBC_2.38 __nldbl___isoc23_vsscanf F > +GLIBC_2.38 __nldbl___isoc23_vswscanf F > +GLIBC_2.38 __nldbl___isoc23_vwscanf F > +GLIBC_2.38 __nldbl___isoc23_wscanf F > GLIBC_2.4 _IO_fprintf F > GLIBC_2.4 _IO_printf F > GLIBC_2.4 _IO_sprintf F > diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist > index e90fb502d2..ab85fd61ef 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist > +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist > @@ -2829,6 +2829,14 @@ GLIBC_2.36 pidfd_open F > GLIBC_2.36 pidfd_send_signal F > GLIBC_2.36 process_madvise F > GLIBC_2.36 process_mrelease F > +GLIBC_2.38 __isoc23_fscanf F > +GLIBC_2.38 __isoc23_fscanfieee128 F > +GLIBC_2.38 __isoc23_fwscanf F > +GLIBC_2.38 __isoc23_fwscanfieee128 F > +GLIBC_2.38 __isoc23_scanf F > +GLIBC_2.38 __isoc23_scanfieee128 F > +GLIBC_2.38 __isoc23_sscanf F > +GLIBC_2.38 __isoc23_sscanfieee128 F > GLIBC_2.38 __isoc23_strtoimax F > GLIBC_2.38 __isoc23_strtol F > GLIBC_2.38 __isoc23_strtol_l F > @@ -2839,6 +2847,20 @@ GLIBC_2.38 __isoc23_strtoul_l F > GLIBC_2.38 __isoc23_strtoull F > GLIBC_2.38 __isoc23_strtoull_l F > GLIBC_2.38 __isoc23_strtoumax F > +GLIBC_2.38 __isoc23_swscanf F > +GLIBC_2.38 __isoc23_swscanfieee128 F > +GLIBC_2.38 __isoc23_vfscanf F > +GLIBC_2.38 __isoc23_vfscanfieee128 F > +GLIBC_2.38 __isoc23_vfwscanf F > +GLIBC_2.38 __isoc23_vfwscanfieee128 F > +GLIBC_2.38 __isoc23_vscanf F > +GLIBC_2.38 __isoc23_vscanfieee128 F > +GLIBC_2.38 __isoc23_vsscanf F > +GLIBC_2.38 __isoc23_vsscanfieee128 F > +GLIBC_2.38 __isoc23_vswscanf F > +GLIBC_2.38 __isoc23_vswscanfieee128 F > +GLIBC_2.38 __isoc23_vwscanf F > +GLIBC_2.38 __isoc23_vwscanfieee128 F > GLIBC_2.38 __isoc23_wcstoimax F > GLIBC_2.38 __isoc23_wcstol F > GLIBC_2.38 __isoc23_wcstol_l F > @@ -2849,3 +2871,17 @@ GLIBC_2.38 __isoc23_wcstoul_l F > GLIBC_2.38 __isoc23_wcstoull F > GLIBC_2.38 __isoc23_wcstoull_l F > GLIBC_2.38 __isoc23_wcstoumax F > +GLIBC_2.38 __isoc23_wscanf F > +GLIBC_2.38 __isoc23_wscanfieee128 F > +GLIBC_2.38 __nldbl___isoc23_fscanf F > +GLIBC_2.38 __nldbl___isoc23_fwscanf F > +GLIBC_2.38 __nldbl___isoc23_scanf F > +GLIBC_2.38 __nldbl___isoc23_sscanf F > +GLIBC_2.38 __nldbl___isoc23_swscanf F > +GLIBC_2.38 __nldbl___isoc23_vfscanf F > +GLIBC_2.38 __nldbl___isoc23_vfwscanf F > +GLIBC_2.38 __nldbl___isoc23_vscanf F > +GLIBC_2.38 __nldbl___isoc23_vsscanf F > +GLIBC_2.38 __nldbl___isoc23_vswscanf F > +GLIBC_2.38 __nldbl___isoc23_vwscanf F > +GLIBC_2.38 __nldbl___isoc23_wscanf F > diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist > index 29be561b60..b716f5c763 100644 > --- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist > +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist > @@ -2396,6 +2396,10 @@ GLIBC_2.36 pidfd_open F > GLIBC_2.36 pidfd_send_signal F > GLIBC_2.36 process_madvise F > GLIBC_2.36 process_mrelease F > +GLIBC_2.38 __isoc23_fscanf F > +GLIBC_2.38 __isoc23_fwscanf F > +GLIBC_2.38 __isoc23_scanf F > +GLIBC_2.38 __isoc23_sscanf F > GLIBC_2.38 __isoc23_strtoimax F > GLIBC_2.38 __isoc23_strtol F > GLIBC_2.38 __isoc23_strtol_l F > @@ -2406,6 +2410,13 @@ GLIBC_2.38 __isoc23_strtoul_l F > GLIBC_2.38 __isoc23_strtoull F > GLIBC_2.38 __isoc23_strtoull_l F > GLIBC_2.38 __isoc23_strtoumax F > +GLIBC_2.38 __isoc23_swscanf F > +GLIBC_2.38 __isoc23_vfscanf F > +GLIBC_2.38 __isoc23_vfwscanf F > +GLIBC_2.38 __isoc23_vscanf F > +GLIBC_2.38 __isoc23_vsscanf F > +GLIBC_2.38 __isoc23_vswscanf F > +GLIBC_2.38 __isoc23_vwscanf F > GLIBC_2.38 __isoc23_wcstoimax F > GLIBC_2.38 __isoc23_wcstol F > GLIBC_2.38 __isoc23_wcstol_l F > @@ -2416,3 +2427,4 @@ GLIBC_2.38 __isoc23_wcstoul_l F > GLIBC_2.38 __isoc23_wcstoull F > GLIBC_2.38 __isoc23_wcstoull_l F > GLIBC_2.38 __isoc23_wcstoumax F > +GLIBC_2.38 __isoc23_wscanf F > diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist > index 506a4e6a65..774e777b65 100644 > --- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist > +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist > @@ -2596,6 +2596,10 @@ GLIBC_2.36 pidfd_open F > GLIBC_2.36 pidfd_send_signal F > GLIBC_2.36 process_madvise F > GLIBC_2.36 process_mrelease F > +GLIBC_2.38 __isoc23_fscanf F > +GLIBC_2.38 __isoc23_fwscanf F > +GLIBC_2.38 __isoc23_scanf F > +GLIBC_2.38 __isoc23_sscanf F > GLIBC_2.38 __isoc23_strtoimax F > GLIBC_2.38 __isoc23_strtol F > GLIBC_2.38 __isoc23_strtol_l F > @@ -2606,6 +2610,13 @@ GLIBC_2.38 __isoc23_strtoul_l F > GLIBC_2.38 __isoc23_strtoull F > GLIBC_2.38 __isoc23_strtoull_l F > GLIBC_2.38 __isoc23_strtoumax F > +GLIBC_2.38 __isoc23_swscanf F > +GLIBC_2.38 __isoc23_vfscanf F > +GLIBC_2.38 __isoc23_vfwscanf F > +GLIBC_2.38 __isoc23_vscanf F > +GLIBC_2.38 __isoc23_vsscanf F > +GLIBC_2.38 __isoc23_vswscanf F > +GLIBC_2.38 __isoc23_vwscanf F > GLIBC_2.38 __isoc23_wcstoimax F > GLIBC_2.38 __isoc23_wcstol F > GLIBC_2.38 __isoc23_wcstol_l F > @@ -2616,3 +2627,4 @@ GLIBC_2.38 __isoc23_wcstoul_l F > GLIBC_2.38 __isoc23_wcstoull F > GLIBC_2.38 __isoc23_wcstoull_l F > GLIBC_2.38 __isoc23_wcstoumax F > +GLIBC_2.38 __isoc23_wscanf F > diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist > index 976cd741ee..8625135c48 100644 > --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist > +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist > @@ -2771,6 +2771,10 @@ GLIBC_2.36 pidfd_send_signal F > GLIBC_2.36 process_madvise F > GLIBC_2.36 process_mrelease F > GLIBC_2.37 __ppoll64_chk F > +GLIBC_2.38 __isoc23_fscanf F > +GLIBC_2.38 __isoc23_fwscanf F > +GLIBC_2.38 __isoc23_scanf F > +GLIBC_2.38 __isoc23_sscanf F > GLIBC_2.38 __isoc23_strtoimax F > GLIBC_2.38 __isoc23_strtol F > GLIBC_2.38 __isoc23_strtol_l F > @@ -2781,6 +2785,13 @@ GLIBC_2.38 __isoc23_strtoul_l F > GLIBC_2.38 __isoc23_strtoull F > GLIBC_2.38 __isoc23_strtoull_l F > GLIBC_2.38 __isoc23_strtoumax F > +GLIBC_2.38 __isoc23_swscanf F > +GLIBC_2.38 __isoc23_vfscanf F > +GLIBC_2.38 __isoc23_vfwscanf F > +GLIBC_2.38 __isoc23_vscanf F > +GLIBC_2.38 __isoc23_vsscanf F > +GLIBC_2.38 __isoc23_vswscanf F > +GLIBC_2.38 __isoc23_vwscanf F > GLIBC_2.38 __isoc23_wcstoimax F > GLIBC_2.38 __isoc23_wcstol F > GLIBC_2.38 __isoc23_wcstol_l F > @@ -2791,6 +2802,19 @@ GLIBC_2.38 __isoc23_wcstoul_l F > GLIBC_2.38 __isoc23_wcstoull F > GLIBC_2.38 __isoc23_wcstoull_l F > GLIBC_2.38 __isoc23_wcstoumax F > +GLIBC_2.38 __isoc23_wscanf F > +GLIBC_2.38 __nldbl___isoc23_fscanf F > +GLIBC_2.38 __nldbl___isoc23_fwscanf F > +GLIBC_2.38 __nldbl___isoc23_scanf F > +GLIBC_2.38 __nldbl___isoc23_sscanf F > +GLIBC_2.38 __nldbl___isoc23_swscanf F > +GLIBC_2.38 __nldbl___isoc23_vfscanf F > +GLIBC_2.38 __nldbl___isoc23_vfwscanf F > +GLIBC_2.38 __nldbl___isoc23_vscanf F > +GLIBC_2.38 __nldbl___isoc23_vsscanf F > +GLIBC_2.38 __nldbl___isoc23_vswscanf F > +GLIBC_2.38 __nldbl___isoc23_vwscanf F > +GLIBC_2.38 __nldbl___isoc23_wscanf F > GLIBC_2.4 _IO_fprintf F > GLIBC_2.4 _IO_printf F > GLIBC_2.4 _IO_sprintf F > diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist > index 909ec927dc..d00c7eb262 100644 > --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist > +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist > @@ -2564,6 +2564,10 @@ GLIBC_2.36 pidfd_open F > GLIBC_2.36 pidfd_send_signal F > GLIBC_2.36 process_madvise F > GLIBC_2.36 process_mrelease F > +GLIBC_2.38 __isoc23_fscanf F > +GLIBC_2.38 __isoc23_fwscanf F > +GLIBC_2.38 __isoc23_scanf F > +GLIBC_2.38 __isoc23_sscanf F > GLIBC_2.38 __isoc23_strtoimax F > GLIBC_2.38 __isoc23_strtol F > GLIBC_2.38 __isoc23_strtol_l F > @@ -2574,6 +2578,13 @@ GLIBC_2.38 __isoc23_strtoul_l F > GLIBC_2.38 __isoc23_strtoull F > GLIBC_2.38 __isoc23_strtoull_l F > GLIBC_2.38 __isoc23_strtoumax F > +GLIBC_2.38 __isoc23_swscanf F > +GLIBC_2.38 __isoc23_vfscanf F > +GLIBC_2.38 __isoc23_vfwscanf F > +GLIBC_2.38 __isoc23_vscanf F > +GLIBC_2.38 __isoc23_vsscanf F > +GLIBC_2.38 __isoc23_vswscanf F > +GLIBC_2.38 __isoc23_vwscanf F > GLIBC_2.38 __isoc23_wcstoimax F > GLIBC_2.38 __isoc23_wcstol F > GLIBC_2.38 __isoc23_wcstol_l F > @@ -2584,6 +2595,19 @@ GLIBC_2.38 __isoc23_wcstoul_l F > GLIBC_2.38 __isoc23_wcstoull F > GLIBC_2.38 __isoc23_wcstoull_l F > GLIBC_2.38 __isoc23_wcstoumax F > +GLIBC_2.38 __isoc23_wscanf F > +GLIBC_2.38 __nldbl___isoc23_fscanf F > +GLIBC_2.38 __nldbl___isoc23_fwscanf F > +GLIBC_2.38 __nldbl___isoc23_scanf F > +GLIBC_2.38 __nldbl___isoc23_sscanf F > +GLIBC_2.38 __nldbl___isoc23_swscanf F > +GLIBC_2.38 __nldbl___isoc23_vfscanf F > +GLIBC_2.38 __nldbl___isoc23_vfwscanf F > +GLIBC_2.38 __nldbl___isoc23_vscanf F > +GLIBC_2.38 __nldbl___isoc23_vsscanf F > +GLIBC_2.38 __nldbl___isoc23_vswscanf F > +GLIBC_2.38 __nldbl___isoc23_vwscanf F > +GLIBC_2.38 __nldbl___isoc23_wscanf F > GLIBC_2.4 _IO_fprintf F > GLIBC_2.4 _IO_printf F > GLIBC_2.4 _IO_sprintf F > diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist > index 31a777c4aa..b63037241d 100644 > --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist > +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist > @@ -2626,6 +2626,10 @@ GLIBC_2.36 pidfd_send_signal F > GLIBC_2.36 process_madvise F > GLIBC_2.36 process_mrelease F > GLIBC_2.37 __ppoll64_chk F > +GLIBC_2.38 __isoc23_fscanf F > +GLIBC_2.38 __isoc23_fwscanf F > +GLIBC_2.38 __isoc23_scanf F > +GLIBC_2.38 __isoc23_sscanf F > GLIBC_2.38 __isoc23_strtoimax F > GLIBC_2.38 __isoc23_strtol F > GLIBC_2.38 __isoc23_strtol_l F > @@ -2636,6 +2640,13 @@ GLIBC_2.38 __isoc23_strtoul_l F > GLIBC_2.38 __isoc23_strtoull F > GLIBC_2.38 __isoc23_strtoull_l F > GLIBC_2.38 __isoc23_strtoumax F > +GLIBC_2.38 __isoc23_swscanf F > +GLIBC_2.38 __isoc23_vfscanf F > +GLIBC_2.38 __isoc23_vfwscanf F > +GLIBC_2.38 __isoc23_vscanf F > +GLIBC_2.38 __isoc23_vsscanf F > +GLIBC_2.38 __isoc23_vswscanf F > +GLIBC_2.38 __isoc23_vwscanf F > GLIBC_2.38 __isoc23_wcstoimax F > GLIBC_2.38 __isoc23_wcstol F > GLIBC_2.38 __isoc23_wcstol_l F > @@ -2646,6 +2657,7 @@ GLIBC_2.38 __isoc23_wcstoul_l F > GLIBC_2.38 __isoc23_wcstoull F > GLIBC_2.38 __isoc23_wcstoull_l F > GLIBC_2.38 __isoc23_wcstoumax F > +GLIBC_2.38 __isoc23_wscanf F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist > index 8d43e8c952..d80055617d 100644 > --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist > +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist > @@ -2623,6 +2623,10 @@ GLIBC_2.36 pidfd_send_signal F > GLIBC_2.36 process_madvise F > GLIBC_2.36 process_mrelease F > GLIBC_2.37 __ppoll64_chk F > +GLIBC_2.38 __isoc23_fscanf F > +GLIBC_2.38 __isoc23_fwscanf F > +GLIBC_2.38 __isoc23_scanf F > +GLIBC_2.38 __isoc23_sscanf F > GLIBC_2.38 __isoc23_strtoimax F > GLIBC_2.38 __isoc23_strtol F > GLIBC_2.38 __isoc23_strtol_l F > @@ -2633,6 +2637,13 @@ GLIBC_2.38 __isoc23_strtoul_l F > GLIBC_2.38 __isoc23_strtoull F > GLIBC_2.38 __isoc23_strtoull_l F > GLIBC_2.38 __isoc23_strtoumax F > +GLIBC_2.38 __isoc23_swscanf F > +GLIBC_2.38 __isoc23_vfscanf F > +GLIBC_2.38 __isoc23_vfwscanf F > +GLIBC_2.38 __isoc23_vscanf F > +GLIBC_2.38 __isoc23_vsscanf F > +GLIBC_2.38 __isoc23_vswscanf F > +GLIBC_2.38 __isoc23_vwscanf F > GLIBC_2.38 __isoc23_wcstoimax F > GLIBC_2.38 __isoc23_wcstol F > GLIBC_2.38 __isoc23_wcstol_l F > @@ -2643,6 +2654,7 @@ GLIBC_2.38 __isoc23_wcstoul_l F > GLIBC_2.38 __isoc23_wcstoull F > GLIBC_2.38 __isoc23_wcstoull_l F > GLIBC_2.38 __isoc23_wcstoumax F > +GLIBC_2.38 __isoc23_wscanf F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist > index 91c552dc4c..5be55c11d2 100644 > --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist > +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist > @@ -2766,6 +2766,10 @@ GLIBC_2.36 pidfd_send_signal F > GLIBC_2.36 process_madvise F > GLIBC_2.36 process_mrelease F > GLIBC_2.37 __ppoll64_chk F > +GLIBC_2.38 __isoc23_fscanf F > +GLIBC_2.38 __isoc23_fwscanf F > +GLIBC_2.38 __isoc23_scanf F > +GLIBC_2.38 __isoc23_sscanf F > GLIBC_2.38 __isoc23_strtoimax F > GLIBC_2.38 __isoc23_strtol F > GLIBC_2.38 __isoc23_strtol_l F > @@ -2776,6 +2780,13 @@ GLIBC_2.38 __isoc23_strtoul_l F > GLIBC_2.38 __isoc23_strtoull F > GLIBC_2.38 __isoc23_strtoull_l F > GLIBC_2.38 __isoc23_strtoumax F > +GLIBC_2.38 __isoc23_swscanf F > +GLIBC_2.38 __isoc23_vfscanf F > +GLIBC_2.38 __isoc23_vfwscanf F > +GLIBC_2.38 __isoc23_vscanf F > +GLIBC_2.38 __isoc23_vsscanf F > +GLIBC_2.38 __isoc23_vswscanf F > +GLIBC_2.38 __isoc23_vwscanf F > GLIBC_2.38 __isoc23_wcstoimax F > GLIBC_2.38 __isoc23_wcstol F > GLIBC_2.38 __isoc23_wcstol_l F > @@ -2786,6 +2797,19 @@ GLIBC_2.38 __isoc23_wcstoul_l F > GLIBC_2.38 __isoc23_wcstoull F > GLIBC_2.38 __isoc23_wcstoull_l F > GLIBC_2.38 __isoc23_wcstoumax F > +GLIBC_2.38 __isoc23_wscanf F > +GLIBC_2.38 __nldbl___isoc23_fscanf F > +GLIBC_2.38 __nldbl___isoc23_fwscanf F > +GLIBC_2.38 __nldbl___isoc23_scanf F > +GLIBC_2.38 __nldbl___isoc23_sscanf F > +GLIBC_2.38 __nldbl___isoc23_swscanf F > +GLIBC_2.38 __nldbl___isoc23_vfscanf F > +GLIBC_2.38 __nldbl___isoc23_vfwscanf F > +GLIBC_2.38 __nldbl___isoc23_vscanf F > +GLIBC_2.38 __nldbl___isoc23_vsscanf F > +GLIBC_2.38 __nldbl___isoc23_vswscanf F > +GLIBC_2.38 __nldbl___isoc23_vwscanf F > +GLIBC_2.38 __nldbl___isoc23_wscanf F > GLIBC_2.4 _IO_fprintf F > GLIBC_2.4 _IO_printf F > GLIBC_2.4 _IO_sprintf F > diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist > index c5c5e5cf9a..475fdaae15 100644 > --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist > +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist > @@ -2591,6 +2591,10 @@ GLIBC_2.36 pidfd_open F > GLIBC_2.36 pidfd_send_signal F > GLIBC_2.36 process_madvise F > GLIBC_2.36 process_mrelease F > +GLIBC_2.38 __isoc23_fscanf F > +GLIBC_2.38 __isoc23_fwscanf F > +GLIBC_2.38 __isoc23_scanf F > +GLIBC_2.38 __isoc23_sscanf F > GLIBC_2.38 __isoc23_strtoimax F > GLIBC_2.38 __isoc23_strtol F > GLIBC_2.38 __isoc23_strtol_l F > @@ -2601,6 +2605,13 @@ GLIBC_2.38 __isoc23_strtoul_l F > GLIBC_2.38 __isoc23_strtoull F > GLIBC_2.38 __isoc23_strtoull_l F > GLIBC_2.38 __isoc23_strtoumax F > +GLIBC_2.38 __isoc23_swscanf F > +GLIBC_2.38 __isoc23_vfscanf F > +GLIBC_2.38 __isoc23_vfwscanf F > +GLIBC_2.38 __isoc23_vscanf F > +GLIBC_2.38 __isoc23_vsscanf F > +GLIBC_2.38 __isoc23_vswscanf F > +GLIBC_2.38 __isoc23_vwscanf F > GLIBC_2.38 __isoc23_wcstoimax F > GLIBC_2.38 __isoc23_wcstol F > GLIBC_2.38 __isoc23_wcstol_l F > @@ -2611,6 +2622,7 @@ GLIBC_2.38 __isoc23_wcstoul_l F > GLIBC_2.38 __isoc23_wcstoull F > GLIBC_2.38 __isoc23_wcstoull_l F > GLIBC_2.38 __isoc23_wcstoumax F > +GLIBC_2.38 __isoc23_wscanf F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist > index e51996e046..6cfb928bc8 100644 > --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist > +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist > @@ -2542,6 +2542,10 @@ GLIBC_2.36 pidfd_open F > GLIBC_2.36 pidfd_send_signal F > GLIBC_2.36 process_madvise F > GLIBC_2.36 process_mrelease F > +GLIBC_2.38 __isoc23_fscanf F > +GLIBC_2.38 __isoc23_fwscanf F > +GLIBC_2.38 __isoc23_scanf F > +GLIBC_2.38 __isoc23_sscanf F > GLIBC_2.38 __isoc23_strtoimax F > GLIBC_2.38 __isoc23_strtol F > GLIBC_2.38 __isoc23_strtol_l F > @@ -2552,6 +2556,13 @@ GLIBC_2.38 __isoc23_strtoul_l F > GLIBC_2.38 __isoc23_strtoull F > GLIBC_2.38 __isoc23_strtoull_l F > GLIBC_2.38 __isoc23_strtoumax F > +GLIBC_2.38 __isoc23_swscanf F > +GLIBC_2.38 __isoc23_vfscanf F > +GLIBC_2.38 __isoc23_vfwscanf F > +GLIBC_2.38 __isoc23_vscanf F > +GLIBC_2.38 __isoc23_vsscanf F > +GLIBC_2.38 __isoc23_vswscanf F > +GLIBC_2.38 __isoc23_vwscanf F > GLIBC_2.38 __isoc23_wcstoimax F > GLIBC_2.38 __isoc23_wcstol F > GLIBC_2.38 __isoc23_wcstol_l F > @@ -2562,6 +2573,7 @@ GLIBC_2.38 __isoc23_wcstoul_l F > GLIBC_2.38 __isoc23_wcstoull F > GLIBC_2.38 __isoc23_wcstoull_l F > GLIBC_2.38 __isoc23_wcstoumax F > +GLIBC_2.38 __isoc23_wscanf F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist > index 388536b3be..c735097172 100644 > --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist > +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist > @@ -2648,6 +2648,10 @@ GLIBC_2.36 pidfd_open F > GLIBC_2.36 pidfd_send_signal F > GLIBC_2.36 process_madvise F > GLIBC_2.36 process_mrelease F > +GLIBC_2.38 __isoc23_fscanf F > +GLIBC_2.38 __isoc23_fwscanf F > +GLIBC_2.38 __isoc23_scanf F > +GLIBC_2.38 __isoc23_sscanf F > GLIBC_2.38 __isoc23_strtoimax F > GLIBC_2.38 __isoc23_strtol F > GLIBC_2.38 __isoc23_strtol_l F > @@ -2658,6 +2662,13 @@ GLIBC_2.38 __isoc23_strtoul_l F > GLIBC_2.38 __isoc23_strtoull F > GLIBC_2.38 __isoc23_strtoull_l F > GLIBC_2.38 __isoc23_strtoumax F > +GLIBC_2.38 __isoc23_swscanf F > +GLIBC_2.38 __isoc23_vfscanf F > +GLIBC_2.38 __isoc23_vfwscanf F > +GLIBC_2.38 __isoc23_vscanf F > +GLIBC_2.38 __isoc23_vsscanf F > +GLIBC_2.38 __isoc23_vswscanf F > +GLIBC_2.38 __isoc23_vwscanf F > GLIBC_2.38 __isoc23_wcstoimax F > GLIBC_2.38 __isoc23_wcstol F > GLIBC_2.38 __isoc23_wcstol_l F > @@ -2668,3 +2679,4 @@ GLIBC_2.38 __isoc23_wcstoul_l F > GLIBC_2.38 __isoc23_wcstoull F > GLIBC_2.38 __isoc23_wcstoull_l F > GLIBC_2.38 __isoc23_wcstoumax F > +GLIBC_2.38 __isoc23_wscanf F Ok. > diff --git a/wcsmbs/Makefile b/wcsmbs/Makefile > index 16ece4c110..b12a3b0750 100644 > --- a/wcsmbs/Makefile > +++ b/wcsmbs/Makefile > @@ -43,6 +43,8 @@ routines := wcscat wcschr wcscmp wcscpy wcscspn wcsdup wcslen wcsncat \ > wcsmbsload mbsrtowcs_l \ > isoc99_wscanf isoc99_vwscanf isoc99_fwscanf isoc99_vfwscanf \ > isoc99_swscanf isoc99_vswscanf \ > + isoc23_wscanf isoc23_vwscanf isoc23_fwscanf isoc23_vfwscanf \ > + isoc23_swscanf isoc23_vswscanf \ > mbrtoc8 c8rtomb mbrtoc16 c16rtomb mbrtoc32 c32rtomb > Ok. > strop-tests := wcscmp wcsncmp wmemcmp wcslen wcschr wcsrchr wcscpy wcsnlen \ > @@ -59,7 +61,11 @@ tests := tst-wcstof wcsmbs-tst1 tst-wcsnlen tst-btowc tst-mbrtowc \ > tst-wcstol-binary-c11 \ > tst-wcstol-binary-c2x \ > tst-wcstol-binary-gnu11 \ > - tst-wcstol-binary-gnu2x > + tst-wcstol-binary-gnu2x \ > + tst-wscanf-binary-c11 \ > + tst-wscanf-binary-c2x \ > + tst-wscanf-binary-gnu11 \ > + tst-wscanf-binary-gnu89 > > include ../Rules > > @@ -118,6 +124,10 @@ CFLAGS-isoc99_wscanf.c += -fexceptions > CFLAGS-isoc99_fwscanf.c += -fexceptions > CFLAGS-isoc99_vwscanf.c += -fexceptions > CFLAGS-isoc99_vfwscanf.c += -fexceptions > +CFLAGS-isoc23_wscanf.c += -fexceptions > +CFLAGS-isoc23_fwscanf.c += -fexceptions > +CFLAGS-isoc23_vwscanf.c += -fexceptions > +CFLAGS-isoc23_vfwscanf.c += -fexceptions > > CPPFLAGS += $(libio-mtsafe) > > @@ -134,3 +144,7 @@ CFLAGS-tst-wcstol-binary-c11.c += -std=c11 > CFLAGS-tst-wcstol-binary-c2x.c += -std=c11 > CFLAGS-tst-wcstol-binary-gnu11.c += -std=gnu11 > CFLAGS-tst-wcstol-binary-gnu2x.c += -std=gnu11 > +CFLAGS-tst-wscanf-binary-c11.c += -std=c11 -DOBJPFX=\"$(objpfx)\" > +CFLAGS-tst-wscanf-binary-c2x.c += -std=c11 -DOBJPFX=\"$(objpfx)\" > +CFLAGS-tst-wscanf-binary-gnu11.c += -std=gnu11 -DOBJPFX=\"$(objpfx)\" > +CFLAGS-tst-wscanf-binary-gnu89.c += -std=gnu89 -DOBJPFX=\"$(objpfx)\" Ok. > diff --git a/wcsmbs/Versions b/wcsmbs/Versions > index 1866cd8d6e..2d9391348a 100644 > --- a/wcsmbs/Versions > +++ b/wcsmbs/Versions > @@ -59,5 +59,11 @@ libc { > __isoc23_wcstoull; > __isoc23_wcstoimax; > __isoc23_wcstoumax; > + __isoc23_fwscanf; > + __isoc23_swscanf; > + __isoc23_vfwscanf; > + __isoc23_vswscanf; > + __isoc23_vwscanf; > + __isoc23_wscanf; > } > } Ok. > diff --git a/wcsmbs/bits/wchar-ldbl.h b/wcsmbs/bits/wchar-ldbl.h > index 4c6f850a45..ee4a6391c8 100644 > --- a/wcsmbs/bits/wchar-ldbl.h > +++ b/wcsmbs/bits/wchar-ldbl.h > @@ -29,13 +29,25 @@ __LDBL_REDIR_DECL (vwprintf); > __LDBL_REDIR_DECL (vswprintf); > # if !__GLIBC_USE (DEPRECATED_SCANF) > # if defined __LDBL_COMPAT > +# if __GLIBC_USE (C2X_STRTOL) > +__LDBL_REDIR1_DECL (fwscanf, __nldbl___isoc23_fwscanf) > +__LDBL_REDIR1_DECL (wscanf, __nldbl___isoc23_wscanf) > +__LDBL_REDIR1_DECL (swscanf, __nldbl___isoc23_swscanf) > +# else > __LDBL_REDIR1_DECL (fwscanf, __nldbl___isoc99_fwscanf) > __LDBL_REDIR1_DECL (wscanf, __nldbl___isoc99_wscanf) > __LDBL_REDIR1_DECL (swscanf, __nldbl___isoc99_swscanf) > +# endif > # elif __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 > +# if __GLIBC_USE (C2X_STRTOL) > +__LDBL_REDIR1_DECL (fwscanf, __isoc23_fwscanfieee128) > +__LDBL_REDIR1_DECL (wscanf, __isoc23_wscanfieee128) > +__LDBL_REDIR1_DECL (swscanf, __isoc23_swscanfieee128) > +# else > __LDBL_REDIR1_DECL (fwscanf, __isoc99_fwscanfieee128) > __LDBL_REDIR1_DECL (wscanf, __isoc99_wscanfieee128) > __LDBL_REDIR1_DECL (swscanf, __isoc99_swscanfieee128) > +# endif > # else > # error bits/stdlib-ldbl.h included when no ldbl redirections are required. > # endif > @@ -54,13 +66,25 @@ __LDBL_REDIR1_DECL (wcstold, __wcstoieee128) > # endif > # if !__GLIBC_USE (DEPRECATED_SCANF) > # if defined __LDBL_COMPAT > +# if __GLIBC_USE (C2X_STRTOL) > +__LDBL_REDIR1_DECL (vfwscanf, __nldbl___isoc23_vfwscanf) > +__LDBL_REDIR1_DECL (vwscanf, __nldbl___isoc23_vwscanf) > +__LDBL_REDIR1_DECL (vswscanf, __nldbl___isoc23_vswscanf) > +# else > __LDBL_REDIR1_DECL (vfwscanf, __nldbl___isoc99_vfwscanf) > __LDBL_REDIR1_DECL (vwscanf, __nldbl___isoc99_vwscanf) > __LDBL_REDIR1_DECL (vswscanf, __nldbl___isoc99_vswscanf) > +# endif > # elif __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 > +# if __GLIBC_USE (C2X_STRTOL) > +__LDBL_REDIR1_DECL (vfwscanf, __isoc23_vfwscanfieee128) > +__LDBL_REDIR1_DECL (vwscanf, __isoc23_vwscanfieee128) > +__LDBL_REDIR1_DECL (vswscanf, __isoc23_vswscanfieee128) > +# else > __LDBL_REDIR1_DECL (vfwscanf, __isoc99_vfwscanfieee128) > __LDBL_REDIR1_DECL (vwscanf, __isoc99_vwscanfieee128) > __LDBL_REDIR1_DECL (vswscanf, __isoc99_vswscanfieee128) > +# endif > # else > # error bits/stdlib-ldbl.h included when no ldbl redirections are required. > # endif Ok. > diff --git a/wcsmbs/isoc23_fwscanf.c b/wcsmbs/isoc23_fwscanf.c > new file mode 100644 > index 0000000000..90499bb098 > --- /dev/null > +++ b/wcsmbs/isoc23_fwscanf.c > @@ -0,0 +1,36 @@ > +/* Copyright (C) 1991-2023 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <libioP.h> > +#include <stdarg.h> > +#include <stdio.h> > +#include <wchar.h> > + > +/* Read formatted input from STREAM according to the format string FORMAT. */ > +int > +__isoc23_fwscanf (FILE *stream, const wchar_t *format, ...) > +{ > + va_list arg; > + int done; > + > + va_start (arg, format); > + done = __vfwscanf_internal (stream, format, arg, > + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST); > + va_end (arg); > + > + return done; > +} Ok. > diff --git a/wcsmbs/isoc23_swscanf.c b/wcsmbs/isoc23_swscanf.c > new file mode 100644 > index 0000000000..75021a0657 > --- /dev/null > +++ b/wcsmbs/isoc23_swscanf.c > @@ -0,0 +1,38 @@ > +/* Copyright (C) 1991-2023 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <stdarg.h> > +#include <libio/strfile.h> > + > +/* Read formatted input from S, according to the format string FORMAT. */ > + > +int > +__isoc23_swscanf (const wchar_t *s, const wchar_t *format, ...) > +{ > + va_list arg; > + int done; > + _IO_strfile sf; > + struct _IO_wide_data wd; > + FILE *f = _IO_strfile_readw (&sf, &wd, s); > + > + va_start (arg, format); > + done = __vfwscanf_internal (f, format, arg, > + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST); > + va_end (arg); > + > + return done; > +} Ok. > diff --git a/wcsmbs/isoc23_vfwscanf.c b/wcsmbs/isoc23_vfwscanf.c > new file mode 100644 > index 0000000000..6134a84b2e > --- /dev/null > +++ b/wcsmbs/isoc23_vfwscanf.c > @@ -0,0 +1,29 @@ > +/* Copyright (C) 1991-2023 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <libioP.h> > +#include <stdio.h> > +#include <wchar.h> > + > +/* Read formatted input from STREAM according to the format string FORMAT. */ > +int > +__isoc23_vfwscanf (FILE *stream, const wchar_t *format, va_list args) > +{ > + return __vfwscanf_internal (stream, format, args, > + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST); > +} > +libc_hidden_def (__isoc23_vfwscanf) Ok. > diff --git a/wcsmbs/isoc23_vswscanf.c b/wcsmbs/isoc23_vswscanf.c > new file mode 100644 > index 0000000000..77c0e97986 > --- /dev/null > +++ b/wcsmbs/isoc23_vswscanf.c > @@ -0,0 +1,30 @@ > +/* Copyright (C) 1993-2023 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <wchar.h> > +#include <libio/strfile.h> > + > +int > +__isoc23_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); > + return __vfwscanf_internal (f, format, args, > + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST); > +} > +libc_hidden_def (__isoc23_vswscanf) Ok. > diff --git a/wcsmbs/isoc23_vwscanf.c b/wcsmbs/isoc23_vwscanf.c > new file mode 100644 > index 0000000000..95d929268c > --- /dev/null > +++ b/wcsmbs/isoc23_vwscanf.c > @@ -0,0 +1,28 @@ > +/* Copyright (C) 1991-2023 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <libioP.h> > +#include <stdio.h> > +#include <wchar.h> > + > +/* Read formatted input from STDIN according to the format string FORMAT. */ > +int > +__isoc23_vwscanf (const wchar_t *format, va_list args) > +{ > + return __vfwscanf_internal (stdin, format, args, > + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST); > +} Ok. > diff --git a/wcsmbs/isoc23_wscanf.c b/wcsmbs/isoc23_wscanf.c > new file mode 100644 > index 0000000000..4fb54438cc > --- /dev/null > +++ b/wcsmbs/isoc23_wscanf.c > @@ -0,0 +1,37 @@ > +/* Copyright (C) 1991-2023 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <stdarg.h> > +#include <stdio.h> > +#include <libioP.h> > +#include <wchar.h> > + > + > +/* Read formatted input from stdin according to the format string FORMAT. */ > +int > +__isoc23_wscanf (const wchar_t *format, ...) > +{ > + va_list arg; > + int done; > + > + va_start (arg, format); > + done = __vfwscanf_internal (stdin, format, arg, > + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST); > + va_end (arg); > + > + return done; > +} Ok. > diff --git a/wcsmbs/tst-wscanf-binary-c11.c b/wcsmbs/tst-wscanf-binary-c11.c > new file mode 100644 > index 0000000000..cd1127ef5e > --- /dev/null > +++ b/wcsmbs/tst-wscanf-binary-c11.c > @@ -0,0 +1,28 @@ > +/* Test wscanf functions with C2X binary integers (wide strings, > + no extensions to C11). > + Copyright (C) 2022-2023 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#undef _GNU_SOURCE > + > +#define CHAR wchar_t > +#define FNW w > +#define L_(C) L ## C > +#define TEST_C2X 0 > +#define STD "c11" > + > +#include "../stdio-common/tst-scanf-binary-main.c" Ok. > diff --git a/wcsmbs/tst-wscanf-binary-c2x.c b/wcsmbs/tst-wscanf-binary-c2x.c > new file mode 100644 > index 0000000000..05260b8cfd > --- /dev/null > +++ b/wcsmbs/tst-wscanf-binary-c2x.c > @@ -0,0 +1,31 @@ > +/* Test wscanf functions with C2X binary integers (wide strings, > + no extensions). > + Copyright (C) 2022-2023 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +/* Some versions of GCC supported for building glibc do not support > + -std=c2x. */ > +#undef _GNU_SOURCE > +#define _ISOC2X_SOURCE > + > +#define CHAR wchar_t > +#define FNW w > +#define L_(C) L ## C > +#define TEST_C2X 1 > +#define STD "c2x" > + > +#include "../stdio-common/tst-scanf-binary-main.c" Ok. > diff --git a/wcsmbs/tst-wscanf-binary-gnu11.c b/wcsmbs/tst-wscanf-binary-gnu11.c > new file mode 100644 > index 0000000000..4af479e968 > --- /dev/null > +++ b/wcsmbs/tst-wscanf-binary-gnu11.c > @@ -0,0 +1,26 @@ > +/* Test wscanf functions with C2X binary integers (wide strings, > + GNU extensions to C11). > + Copyright (C) 2022-2023 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#define CHAR wchar_t > +#define FNW w > +#define L_(C) L ## C > +#define TEST_C2X 1 > +#define STD "gnu11" > + > +#include "../stdio-common/tst-scanf-binary-main.c" Ok. > diff --git a/wcsmbs/tst-wscanf-binary-gnu89.c b/wcsmbs/tst-wscanf-binary-gnu89.c > new file mode 100644 > index 0000000000..85226aeef9 > --- /dev/null > +++ b/wcsmbs/tst-wscanf-binary-gnu89.c > @@ -0,0 +1,26 @@ > +/* Test wscanf functions with C2X binary integers (wide strings, > + GNU extensions to C89). > + Copyright (C) 2022-2023 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#define CHAR wchar_t > +#define FNW w > +#define L_(C) L ## C > +#define TEST_C2X 0 > +#define STD "gnu89" > + > +#include "../stdio-common/tst-scanf-binary-main.c" Ok. > diff --git a/wcsmbs/wchar.h b/wcsmbs/wchar.h > index cde0d32b0a..7ab99ba93b 100644 > --- a/wcsmbs/wchar.h > +++ b/wcsmbs/wchar.h > @@ -762,9 +762,34 @@ extern int swscanf (const wchar_t *__restrict __s, > functions are at alternative names. When __LDBL_COMPAT or > __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI are in effect, this is handled in > bits/wchar-ldbl.h. */ > -#if !__GLIBC_USE (DEPRECATED_SCANF) && !defined __LDBL_COMPAT \ > +# if !__GLIBC_USE (DEPRECATED_SCANF) && !defined __LDBL_COMPAT \ > && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0 > -# ifdef __REDIRECT > +# if __GLIBC_USE (C2X_STRTOL) > +# ifdef __REDIRECT > +extern int __REDIRECT (fwscanf, (__FILE *__restrict __stream, > + const wchar_t *__restrict __format, ...), > + __isoc23_fwscanf) > + /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */; > +extern int __REDIRECT (wscanf, (const wchar_t *__restrict __format, ...), > + __isoc23_wscanf) > + /* __attribute__ ((__format__ (__wscanf__, 1, 2))) */; > +extern int __REDIRECT_NTH (swscanf, (const wchar_t *__restrict __s, > + const wchar_t *__restrict __format, > + ...), __isoc23_swscanf) > + /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */; > +# else > +extern int __isoc23_fwscanf (__FILE *__restrict __stream, > + const wchar_t *__restrict __format, ...); > +extern int __isoc23_wscanf (const wchar_t *__restrict __format, ...); > +extern int __isoc23_swscanf (const wchar_t *__restrict __s, > + const wchar_t *__restrict __format, ...) > + __THROW; > +# define fwscanf __isoc23_fwscanf > +# define wscanf __isoc23_wscanf > +# define swscanf __isoc23_swscanf > +# endif > +# else > +# ifdef __REDIRECT > extern int __REDIRECT (fwscanf, (__FILE *__restrict __stream, > const wchar_t *__restrict __format, ...), > __isoc99_fwscanf) > @@ -776,16 +801,17 @@ extern int __REDIRECT_NTH (swscanf, (const wchar_t *__restrict __s, > const wchar_t *__restrict __format, > ...), __isoc99_swscanf) > /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */; > -# else > +# else > extern int __isoc99_fwscanf (__FILE *__restrict __stream, > const wchar_t *__restrict __format, ...); > extern int __isoc99_wscanf (const wchar_t *__restrict __format, ...); > extern int __isoc99_swscanf (const wchar_t *__restrict __s, > const wchar_t *__restrict __format, ...) > __THROW; > -# define fwscanf __isoc99_fwscanf > -# define wscanf __isoc99_wscanf > -# define swscanf __isoc99_swscanf > +# define fwscanf __isoc99_fwscanf > +# define wscanf __isoc99_wscanf > +# define swscanf __isoc99_swscanf > +# endif > # endif > # endif > > @@ -818,7 +844,34 @@ extern int vswscanf (const wchar_t *__restrict __s, > && (!defined __LDBL_COMPAT || !defined __REDIRECT) \ > && (defined __STRICT_ANSI__ || defined __USE_XOPEN2K) \ > && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0 > -# ifdef __REDIRECT > +# if __GLIBC_USE (C2X_STRTOL) > +# ifdef __REDIRECT > +extern int __REDIRECT (vfwscanf, (__FILE *__restrict __s, > + const wchar_t *__restrict __format, > + __gnuc_va_list __arg), __isoc23_vfwscanf) > + /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */; > +extern int __REDIRECT (vwscanf, (const wchar_t *__restrict __format, > + __gnuc_va_list __arg), __isoc23_vwscanf) > + /* __attribute__ ((__format__ (__wscanf__, 1, 0))) */; > +extern int __REDIRECT_NTH (vswscanf, (const wchar_t *__restrict __s, > + const wchar_t *__restrict __format, > + __gnuc_va_list __arg), __isoc23_vswscanf) > + /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */; > +# else > +extern int __isoc23_vfwscanf (__FILE *__restrict __s, > + const wchar_t *__restrict __format, > + __gnuc_va_list __arg); > +extern int __isoc23_vwscanf (const wchar_t *__restrict __format, > + __gnuc_va_list __arg); > +extern int __isoc23_vswscanf (const wchar_t *__restrict __s, > + const wchar_t *__restrict __format, > + __gnuc_va_list __arg) __THROW; > +# define vfwscanf __isoc23_vfwscanf > +# define vwscanf __isoc23_vwscanf > +# define vswscanf __isoc23_vswscanf > +# endif > +# else > +# ifdef __REDIRECT > extern int __REDIRECT (vfwscanf, (__FILE *__restrict __s, > const wchar_t *__restrict __format, > __gnuc_va_list __arg), __isoc99_vfwscanf) > @@ -830,7 +883,7 @@ extern int __REDIRECT_NTH (vswscanf, (const wchar_t *__restrict __s, > const wchar_t *__restrict __format, > __gnuc_va_list __arg), __isoc99_vswscanf) > /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */; > -# else > +# else > extern int __isoc99_vfwscanf (__FILE *__restrict __s, > const wchar_t *__restrict __format, > __gnuc_va_list __arg); > @@ -839,9 +892,10 @@ extern int __isoc99_vwscanf (const wchar_t *__restrict __format, > extern int __isoc99_vswscanf (const wchar_t *__restrict __s, > const wchar_t *__restrict __format, > __gnuc_va_list __arg) __THROW; > -# define vfwscanf __isoc99_vfwscanf > -# define vwscanf __isoc99_vwscanf > -# define vswscanf __isoc99_vswscanf > +# define vfwscanf __isoc99_vfwscanf > +# define vwscanf __isoc99_vwscanf > +# define vswscanf __isoc99_vswscanf > +# endif > # endif > # endif > > Ok.
diff --git a/NEWS b/NEWS index 080a2060d4..e54d734600 100644 --- a/NEWS +++ b/NEWS @@ -14,7 +14,10 @@ Major new features: input: strtol, strtoll, strtoul, strtoull, strtol_l, strtoll_l, strtoul_l, strtoull_l, strtoimax, strtoumax, strtoq, strtouq, wcstol, wcstoll, wcstoul, wcstoull, wcstol_l, wcstoll_l, wcstoul_l, - wcstoull_l, wcstoimax, wcstoumax, wcstoq, wcstouq. + wcstoull_l, wcstoimax, wcstoumax, wcstoq, wcstouq. Similarly, the + following functions support binary integers prefixed by 0b or 0B as + input to the %i format: fscanf, scanf, sscanf, vscanf, vsscanf, + vfscanf, fwscanf, wscanf, swscanf, vfwscanf, vwscanf, vswscanf. Deprecated and removed features, and other changes affecting compatibility: diff --git a/include/stdio.h b/include/stdio.h index c3e772ad9a..da47d1ce99 100644 --- a/include/stdio.h +++ b/include/stdio.h @@ -94,18 +94,34 @@ extern int __isoc99_vscanf (const char *__restrict __format, extern int __isoc99_vsscanf (const char *__restrict __s, const char *__restrict __format, __gnuc_va_list __arg) __THROW; +extern int __isoc23_fscanf (FILE *__restrict __stream, + const char *__restrict __format, ...) __wur; +extern int __isoc23_scanf (const char *__restrict __format, ...) __wur; +extern int __isoc23_sscanf (const char *__restrict __s, + const char *__restrict __format, ...) __THROW; +extern int __isoc23_vfscanf (FILE *__restrict __s, + const char *__restrict __format, + __gnuc_va_list __arg) __wur; +extern int __isoc23_vscanf (const char *__restrict __format, + __gnuc_va_list __arg) __wur; +extern int __isoc23_vsscanf (const char *__restrict __s, + const char *__restrict __format, + __gnuc_va_list __arg) __THROW; libc_hidden_proto (__isoc99_sscanf) libc_hidden_proto (__isoc99_vsscanf) libc_hidden_proto (__isoc99_vfscanf) +libc_hidden_proto (__isoc23_sscanf) +libc_hidden_proto (__isoc23_vsscanf) +libc_hidden_proto (__isoc23_vfscanf) -/* Internal uses of sscanf should call the C99-compliant version. +/* Internal uses of sscanf should call the C2X-compliant version. Unfortunately, symbol redirection is not transitive, so the __REDIRECT in the public header does not link up with the above libc_hidden_proto. Bridge the gap with a macro. */ # if !__GLIBC_USE (DEPRECATED_SCANF) # undef sscanf -# define sscanf __isoc99_sscanf +# define sscanf __isoc23_sscanf # endif # if __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 && IS_IN (libc) @@ -114,12 +130,21 @@ libc_hidden_proto (__isoc99_vfscanf) extern __typeof (__isoc99_sscanf) ___ieee128_isoc99_sscanf __THROW; extern __typeof (__isoc99_vsscanf) ___ieee128_isoc99_vsscanf __THROW; extern __typeof (__isoc99_vfscanf) ___ieee128_isoc99_vfscanf __THROW; +extern __typeof (__isoc23_sscanf) ___ieee128_isoc23_sscanf __THROW; +extern __typeof (__isoc23_vsscanf) ___ieee128_isoc23_vsscanf __THROW; +extern __typeof (__isoc23_vfscanf) ___ieee128_isoc23_vfscanf __THROW; libc_hidden_proto (___ieee128_isoc99_sscanf) libc_hidden_proto (___ieee128_isoc99_vsscanf) libc_hidden_proto (___ieee128_isoc99_vfscanf) +libc_hidden_proto (___ieee128_isoc23_sscanf) +libc_hidden_proto (___ieee128_isoc23_vsscanf) +libc_hidden_proto (___ieee128_isoc23_vfscanf) #define __isoc99_sscanf ___ieee128_isoc99_sscanf #define __isoc99_vsscanf ___ieee128_isoc99_vsscanf #define __isoc99_vfscanf ___ieee128_isoc99_vfscanf +#define __isoc23_sscanf ___ieee128_isoc23_sscanf +#define __isoc23_vsscanf ___ieee128_isoc23_vsscanf +#define __isoc23_vfscanf ___ieee128_isoc23_vfscanf # endif /* Prototypes for compatibility functions. */ diff --git a/include/wchar.h b/include/wchar.h index ea7888f605..fafe7c8e9b 100644 --- a/include/wchar.h +++ b/include/wchar.h @@ -288,8 +288,24 @@ extern int __isoc99_vwscanf (const wchar_t *__restrict __format, extern int __isoc99_vswscanf (const wchar_t *__restrict __s, const wchar_t *__restrict __format, __gnuc_va_list __arg) __THROW; +extern int __isoc23_fwscanf (__FILE *__restrict __stream, + const wchar_t *__restrict __format, ...); +extern int __isoc23_wscanf (const wchar_t *__restrict __format, ...); +extern int __isoc23_swscanf (const wchar_t *__restrict __s, + const wchar_t *__restrict __format, ...) + __THROW; +extern int __isoc23_vfwscanf (__FILE *__restrict __s, + const wchar_t *__restrict __format, + __gnuc_va_list __arg); +extern int __isoc23_vwscanf (const wchar_t *__restrict __format, + __gnuc_va_list __arg); +extern int __isoc23_vswscanf (const wchar_t *__restrict __s, + const wchar_t *__restrict __format, + __gnuc_va_list __arg) __THROW; libc_hidden_proto (__isoc99_vswscanf) libc_hidden_proto (__isoc99_vfwscanf) +libc_hidden_proto (__isoc23_vswscanf) +libc_hidden_proto (__isoc23_vfwscanf) /* Internal functions. */ extern size_t __mbsrtowcs_l (wchar_t *dst, const char **src, size_t len, diff --git a/libio/bits/stdio-ldbl.h b/libio/bits/stdio-ldbl.h index b54d00b68b..ed68fc4e28 100644 --- a/libio/bits/stdio-ldbl.h +++ b/libio/bits/stdio-ldbl.h @@ -28,13 +28,25 @@ __LDBL_REDIR_DECL (vprintf) __LDBL_REDIR_DECL (vsprintf) #if !__GLIBC_USE (DEPRECATED_SCANF) # if defined __LDBL_COMPAT +# if __GLIBC_USE (C2X_STRTOL) +__LDBL_REDIR1_DECL (fscanf, __nldbl___isoc23_fscanf) +__LDBL_REDIR1_DECL (scanf, __nldbl___isoc23_scanf) +__LDBL_REDIR1_DECL (sscanf, __nldbl___isoc23_sscanf) +# else __LDBL_REDIR1_DECL (fscanf, __nldbl___isoc99_fscanf) __LDBL_REDIR1_DECL (scanf, __nldbl___isoc99_scanf) __LDBL_REDIR1_DECL (sscanf, __nldbl___isoc99_sscanf) +# endif # elif __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 +# if __GLIBC_USE (C2X_STRTOL) +__LDBL_REDIR1_DECL (fscanf, __isoc23_fscanfieee128) +__LDBL_REDIR1_DECL (scanf, __isoc23_scanfieee128) +__LDBL_REDIR1_DECL (sscanf, __isoc23_sscanfieee128) +# else __LDBL_REDIR1_DECL (fscanf, __isoc99_fscanfieee128) __LDBL_REDIR1_DECL (scanf, __isoc99_scanfieee128) __LDBL_REDIR1_DECL (sscanf, __isoc99_sscanfieee128) +# endif # else # error bits/stdlib-ldbl.h included when no ldbl redirections are required. # endif @@ -52,13 +64,25 @@ __LDBL_REDIR_DECL (vsnprintf) #ifdef __USE_ISOC99 # if !__GLIBC_USE (DEPRECATED_SCANF) # if defined __LDBL_COMPAT +# if __GLIBC_USE (C2X_STRTOL) +__LDBL_REDIR1_DECL (vfscanf, __nldbl___isoc23_vfscanf) +__LDBL_REDIR1_DECL (vscanf, __nldbl___isoc23_vscanf) +__LDBL_REDIR1_DECL (vsscanf, __nldbl___isoc23_vsscanf) +# else __LDBL_REDIR1_DECL (vfscanf, __nldbl___isoc99_vfscanf) __LDBL_REDIR1_DECL (vscanf, __nldbl___isoc99_vscanf) __LDBL_REDIR1_DECL (vsscanf, __nldbl___isoc99_vsscanf) +# endif # elif __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 +# if __GLIBC_USE (C2X_STRTOL) +__LDBL_REDIR1_DECL (vfscanf, __isoc23_vfscanfieee128) +__LDBL_REDIR1_DECL (vscanf, __isoc23_vscanfieee128) +__LDBL_REDIR1_DECL (vsscanf, __isoc23_vsscanfieee128) +# else __LDBL_REDIR1_DECL (vfscanf, __isoc99_vfscanfieee128) __LDBL_REDIR1_DECL (vscanf, __isoc99_vscanfieee128) __LDBL_REDIR1_DECL (vsscanf, __isoc99_vsscanfieee128) +# endif # else # error bits/stdlib-ldbl.h included when no ldbl redirections are required. # endif diff --git a/libio/libioP.h b/libio/libioP.h index a5f00822ab..38507388fd 100644 --- a/libio/libioP.h +++ b/libio/libioP.h @@ -781,6 +781,9 @@ extern off64_t _IO_seekpos_unlocked (FILE *, off64_t, int) functions use. When the flag is set to zero, automatic allocation is enabled. + SCANF_ISOC23_BIN_CST, when set to one, indicates the %i accepts + binary constants starting 0b or 0B. + SCANF_LDBL_USES_FLOAT128 is used on platforms where the long double format used to be different from the IEC 60559 double format *and* also different from the Quadruple 128-bits IEC 60559 format (such as @@ -793,7 +796,8 @@ extern off64_t _IO_seekpos_unlocked (FILE *, off64_t, int) as the previous format on that platform. */ #define SCANF_LDBL_IS_DBL 0x0001 #define SCANF_ISOC99_A 0x0002 -#define SCANF_LDBL_USES_FLOAT128 0x0004 +#define SCANF_ISOC23_BIN_CST 0x0004 +#define SCANF_LDBL_USES_FLOAT128 0x0008 extern int __vfscanf_internal (FILE *fp, const char *format, va_list argp, unsigned int flags) diff --git a/libio/stdio.h b/libio/stdio.h index ed80420a2b..857f02888d 100644 --- a/libio/stdio.h +++ b/libio/stdio.h @@ -430,7 +430,28 @@ extern int sscanf (const char *__restrict __s, #include <bits/floatn.h> #if !__GLIBC_USE (DEPRECATED_SCANF) && !defined __LDBL_COMPAT \ && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0 -# ifdef __REDIRECT +# if __GLIBC_USE (C2X_STRTOL) +# ifdef __REDIRECT +extern int __REDIRECT (fscanf, (FILE *__restrict __stream, + const char *__restrict __format, ...), + __isoc23_fscanf) __wur; +extern int __REDIRECT (scanf, (const char *__restrict __format, ...), + __isoc23_scanf) __wur; +extern int __REDIRECT_NTH (sscanf, (const char *__restrict __s, + const char *__restrict __format, ...), + __isoc23_sscanf); +# else +extern int __isoc23_fscanf (FILE *__restrict __stream, + const char *__restrict __format, ...) __wur; +extern int __isoc23_scanf (const char *__restrict __format, ...) __wur; +extern int __isoc23_sscanf (const char *__restrict __s, + const char *__restrict __format, ...) __THROW; +# define fscanf __isoc23_fscanf +# define scanf __isoc23_scanf +# define sscanf __isoc23_sscanf +# endif +# else +# ifdef __REDIRECT extern int __REDIRECT (fscanf, (FILE *__restrict __stream, const char *__restrict __format, ...), __isoc99_fscanf) __wur; @@ -439,15 +460,16 @@ extern int __REDIRECT (scanf, (const char *__restrict __format, ...), extern int __REDIRECT_NTH (sscanf, (const char *__restrict __s, const char *__restrict __format, ...), __isoc99_sscanf); -# else +# else extern int __isoc99_fscanf (FILE *__restrict __stream, const char *__restrict __format, ...) __wur; extern int __isoc99_scanf (const char *__restrict __format, ...) __wur; extern int __isoc99_sscanf (const char *__restrict __s, const char *__restrict __format, ...) __THROW; -# define fscanf __isoc99_fscanf -# define scanf __isoc99_scanf -# define sscanf __isoc99_sscanf +# define fscanf __isoc99_fscanf +# define scanf __isoc99_scanf +# define sscanf __isoc99_sscanf +# endif # endif #endif @@ -474,7 +496,37 @@ extern int vsscanf (const char *__restrict __s, /* Same redirection as above for the v*scanf family. */ # if !__GLIBC_USE (DEPRECATED_SCANF) -# if defined __REDIRECT && !defined __LDBL_COMPAT \ +# if __GLIBC_USE (C2X_STRTOL) +# if defined __REDIRECT && !defined __LDBL_COMPAT \ + && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0 +extern int __REDIRECT (vfscanf, + (FILE *__restrict __s, + const char *__restrict __format, __gnuc_va_list __arg), + __isoc23_vfscanf) + __attribute__ ((__format__ (__scanf__, 2, 0))) __wur; +extern int __REDIRECT (vscanf, (const char *__restrict __format, + __gnuc_va_list __arg), __isoc23_vscanf) + __attribute__ ((__format__ (__scanf__, 1, 0))) __wur; +extern int __REDIRECT_NTH (vsscanf, + (const char *__restrict __s, + const char *__restrict __format, + __gnuc_va_list __arg), __isoc23_vsscanf) + __attribute__ ((__format__ (__scanf__, 2, 0))); +# elif !defined __REDIRECT +extern int __isoc23_vfscanf (FILE *__restrict __s, + const char *__restrict __format, + __gnuc_va_list __arg) __wur; +extern int __isoc23_vscanf (const char *__restrict __format, + __gnuc_va_list __arg) __wur; +extern int __isoc23_vsscanf (const char *__restrict __s, + const char *__restrict __format, + __gnuc_va_list __arg) __THROW; +# define vfscanf __isoc23_vfscanf +# define vscanf __isoc23_vscanf +# define vsscanf __isoc23_vsscanf +# endif +# else +# if defined __REDIRECT && !defined __LDBL_COMPAT \ && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0 extern int __REDIRECT (vfscanf, (FILE *__restrict __s, @@ -489,7 +541,7 @@ extern int __REDIRECT_NTH (vsscanf, const char *__restrict __format, __gnuc_va_list __arg), __isoc99_vsscanf) __attribute__ ((__format__ (__scanf__, 2, 0))); -# elif !defined __REDIRECT +# elif !defined __REDIRECT extern int __isoc99_vfscanf (FILE *__restrict __s, const char *__restrict __format, __gnuc_va_list __arg) __wur; @@ -498,9 +550,10 @@ extern int __isoc99_vscanf (const char *__restrict __format, extern int __isoc99_vsscanf (const char *__restrict __s, const char *__restrict __format, __gnuc_va_list __arg) __THROW; -# define vfscanf __isoc99_vfscanf -# define vscanf __isoc99_vscanf -# define vsscanf __isoc99_vsscanf +# define vfscanf __isoc99_vfscanf +# define vscanf __isoc99_vscanf +# define vsscanf __isoc99_vsscanf +# endif # endif # endif #endif /* Use ISO C9x. */ diff --git a/manual/stdio.texi b/manual/stdio.texi index d7eab1843a..e86aa5933b 100644 --- a/manual/stdio.texi +++ b/manual/stdio.texi @@ -3624,7 +3624,8 @@ constant. The syntax that is recognized is the same as that for the @code{strtol} function (@pxref{Parsing of Integers}) with the value @code{0} for the @var{base} argument. (You can print integers in this syntax with @code{printf} by using the @samp{#} flag character with the -@samp{%x}, @samp{%o}, or @samp{%d} conversion. @xref{Integer Conversions}.) +@samp{%x}, @samp{%o}, @samp{%b}, or @samp{%d} conversion. +@xref{Integer Conversions}.) For example, any of the strings @samp{10}, @samp{0xa}, or @samp{012} could be read in as integers under the @samp{%i} conversion. Each of diff --git a/stdio-common/Makefile b/stdio-common/Makefile index 92a3499a94..a14ee487ea 100644 --- a/stdio-common/Makefile +++ b/stdio-common/Makefile @@ -47,6 +47,12 @@ routines := \ isoc99_vfscanf \ isoc99_vscanf \ isoc99_vsscanf \ + isoc23_fscanf \ + isoc23_scanf \ + isoc23_sscanf \ + isoc23_vfscanf \ + isoc23_vscanf \ + isoc23_vsscanf \ itoa-digits \ itoa-udigits \ itowa-digits \ @@ -214,6 +220,10 @@ tests := \ tst-put-error \ tst-renameat2 \ tst-rndseek \ + tst-scanf-binary-c11 \ + tst-scanf-binary-c2x \ + tst-scanf-binary-gnu11 \ + tst-scanf-binary-gnu89 \ tst-scanf-round \ tst-setvbuf1 \ tst-sprintf \ @@ -415,6 +425,10 @@ CFLAGS-isoc99_vfscanf.c += -fexceptions CFLAGS-isoc99_vscanf.c += -fexceptions CFLAGS-isoc99_fscanf.c += -fexceptions CFLAGS-isoc99_scanf.c += -fexceptions +CFLAGS-isoc23_vfscanf.c += -fexceptions +CFLAGS-isoc23_vscanf.c += -fexceptions +CFLAGS-isoc23_fscanf.c += -fexceptions +CFLAGS-isoc23_scanf.c += -fexceptions CFLAGS-dprintf.c += $(config-cflags-wno-ignored-attributes) @@ -440,6 +454,14 @@ CFLAGS-tst-bz11319-fortify2.c += -D_FORTIFY_SOURCE=2 CFLAGS-tst-memstream-string.c += -fno-builtin-fprintf +# Some versions of GCC supported for building glibc do not support -std=c2x, so +# the test for that version uses -std=c11 and then _ISOC2X_SOURCE is defined in +# the test as needed. +CFLAGS-tst-scanf-binary-c11.c += -std=c11 -DOBJPFX=\"$(objpfx)\" +CFLAGS-tst-scanf-binary-c2x.c += -std=c11 -DOBJPFX=\"$(objpfx)\" +CFLAGS-tst-scanf-binary-gnu11.c += -std=gnu11 -DOBJPFX=\"$(objpfx)\" +CFLAGS-tst-scanf-binary-gnu89.c += -std=gnu89 -DOBJPFX=\"$(objpfx)\" + CPPFLAGS += $(libio-mtsafe) $(objpfx)tst-setvbuf1.out: /dev/null $(objpfx)tst-setvbuf1 diff --git a/stdio-common/Versions b/stdio-common/Versions index 522f302198..4bcfc3fb41 100644 --- a/stdio-common/Versions +++ b/stdio-common/Versions @@ -63,6 +63,14 @@ libc { GLIBC_2.29 { # SHLIB_COMPAT(GLIBC_2_0, GLIBC_2_29) used in iovfscanf.c etc. } + GLIBC_2.38 { + __isoc23_scanf; + __isoc23_vscanf; + __isoc23_fscanf; + __isoc23_vfscanf; + __isoc23_sscanf; + __isoc23_vsscanf; + } GLIBC_PRIVATE { # global variables _itoa_lower_digits; diff --git a/stdio-common/isoc23_fscanf.c b/stdio-common/isoc23_fscanf.c new file mode 100644 index 0000000000..dc19f57bec --- /dev/null +++ b/stdio-common/isoc23_fscanf.c @@ -0,0 +1,35 @@ +/* Copyright (C) 1991-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <libioP.h> +#include <stdarg.h> +#include <stdio.h> + +/* Read formatted input from STREAM according to the format string FORMAT. */ +int +__isoc23_fscanf (FILE *stream, const char *format, ...) +{ + va_list arg; + int done; + + va_start (arg, format); + done = __vfscanf_internal (stream, format, arg, + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST); + va_end (arg); + + return done; +} diff --git a/stdio-common/isoc23_scanf.c b/stdio-common/isoc23_scanf.c new file mode 100644 index 0000000000..22b5aaebda --- /dev/null +++ b/stdio-common/isoc23_scanf.c @@ -0,0 +1,35 @@ +/* Copyright (C) 1991-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdarg.h> +#include <stdio.h> +#include <libioP.h> + +/* Read formatted input from stdin according to the format string FORMAT. */ +int +__isoc23_scanf (const char *format, ...) +{ + va_list arg; + int done; + + va_start (arg, format); + done = __vfscanf_internal (stdin, format, arg, + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST); + va_end (arg); + + return done; +} diff --git a/stdio-common/isoc23_sscanf.c b/stdio-common/isoc23_sscanf.c new file mode 100644 index 0000000000..1da4c53846 --- /dev/null +++ b/stdio-common/isoc23_sscanf.c @@ -0,0 +1,37 @@ +/* Copyright (C) 1991-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdarg.h> +#include <libio/strfile.h> + +/* Read formatted input from S, according to the format string FORMAT. */ +int +__isoc23_sscanf (const char *s, const char *format, ...) +{ + va_list arg; + int done; + _IO_strfile sf; + FILE *f = _IO_strfile_read (&sf, s); + + va_start (arg, format); + done = __vfscanf_internal (f, format, arg, + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST); + va_end (arg); + + return done; +} +libc_hidden_def (__isoc23_sscanf) diff --git a/stdio-common/isoc23_vfscanf.c b/stdio-common/isoc23_vfscanf.c new file mode 100644 index 0000000000..d1411a2d65 --- /dev/null +++ b/stdio-common/isoc23_vfscanf.c @@ -0,0 +1,28 @@ +/* Copyright (C) 1991-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <libioP.h> +#include <stdio.h> + +/* Read formatted input from STREAM according to the format string FORMAT. */ +int +__isoc23_vfscanf (FILE *stream, const char *format, va_list args) +{ + return __vfscanf_internal (stream, format, args, + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST); +} +libc_hidden_def (__isoc23_vfscanf) diff --git a/stdio-common/isoc23_vscanf.c b/stdio-common/isoc23_vscanf.c new file mode 100644 index 0000000000..81be184c3b --- /dev/null +++ b/stdio-common/isoc23_vscanf.c @@ -0,0 +1,27 @@ +/* Copyright (C) 1991-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <libioP.h> +#include <stdio.h> + +/* Read formatted input from STDIN according to the format string FORMAT. */ +int +__isoc23_vscanf (const char *format, va_list args) +{ + return __vfscanf_internal (stdin, format, args, + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST); +} diff --git a/stdio-common/isoc23_vsscanf.c b/stdio-common/isoc23_vsscanf.c new file mode 100644 index 0000000000..6cc9a89edc --- /dev/null +++ b/stdio-common/isoc23_vsscanf.c @@ -0,0 +1,28 @@ +/* Copyright (C) 1993-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <libio/strfile.h> + +int +__isoc23_vsscanf (const char *string, const char *format, va_list args) +{ + _IO_strfile sf; + FILE *f = _IO_strfile_read (&sf, string); + return __vfscanf_internal (f, format, args, + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST); +} +libc_hidden_def (__isoc23_vsscanf) diff --git a/stdio-common/tst-scanf-binary-c11.c b/stdio-common/tst-scanf-binary-c11.c new file mode 100644 index 0000000000..1869bb6881 --- /dev/null +++ b/stdio-common/tst-scanf-binary-c11.c @@ -0,0 +1,28 @@ +/* Test scanf functions with C2X binary integers (narrow strings, + no extensions to C11). + Copyright (C) 2022-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#undef _GNU_SOURCE + +#define CHAR char +#define FNW +#define L_(C) C +#define TEST_C2X 0 +#define STD "c11" + +#include <tst-scanf-binary-main.c> diff --git a/stdio-common/tst-scanf-binary-c2x.c b/stdio-common/tst-scanf-binary-c2x.c new file mode 100644 index 0000000000..6033b1f375 --- /dev/null +++ b/stdio-common/tst-scanf-binary-c2x.c @@ -0,0 +1,31 @@ +/* Test scanf functions with C2X binary integers (narrow strings, + no extensions). + Copyright (C) 2022-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +/* Some versions of GCC supported for building glibc do not support + -std=c2x. */ +#undef _GNU_SOURCE +#define _ISOC2X_SOURCE + +#define CHAR char +#define FNW +#define L_(C) C +#define TEST_C2X 1 +#define STD "c2x" + +#include <tst-scanf-binary-main.c> diff --git a/stdio-common/tst-scanf-binary-gnu11.c b/stdio-common/tst-scanf-binary-gnu11.c new file mode 100644 index 0000000000..4bd49700d7 --- /dev/null +++ b/stdio-common/tst-scanf-binary-gnu11.c @@ -0,0 +1,26 @@ +/* Test scanf functions with C2X binary integers (narrow strings, + GNU extensions to C11). + Copyright (C) 2022-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#define CHAR char +#define FNW +#define L_(C) C +#define TEST_C2X 1 +#define STD "gnu11" + +#include <tst-scanf-binary-main.c> diff --git a/stdio-common/tst-scanf-binary-gnu89.c b/stdio-common/tst-scanf-binary-gnu89.c new file mode 100644 index 0000000000..5325732f7c --- /dev/null +++ b/stdio-common/tst-scanf-binary-gnu89.c @@ -0,0 +1,26 @@ +/* Test scanf functions with C2X binary integers (narrow strings, + GNU extensions to C89). + Copyright (C) 2022-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#define CHAR char +#define FNW +#define L_(C) C +#define TEST_C2X 0 +#define STD "gnu89" + +#include <tst-scanf-binary-main.c> diff --git a/stdio-common/tst-scanf-binary-main.c b/stdio-common/tst-scanf-binary-main.c new file mode 100644 index 0000000000..858283843e --- /dev/null +++ b/stdio-common/tst-scanf-binary-main.c @@ -0,0 +1,208 @@ +/* Test scanf functions with C2X binary integers. + Copyright (C) 2022-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdarg.h> +#include <stdio.h> +#include <wchar.h> + +#include <support/check.h> + +#define CONCAT_(X, Y, Z) X ## Y ## Z +#define CONCAT(X, Y, Z) CONCAT_ (X, Y, Z) +#define FNX(FN1, FN2) CONCAT (FN1, FNW, FN2) +#ifndef STDX +# define STDX "" +#endif + +#define INFILE OBJPFX "/tst-" STDX "scanf-binary-" STD "-in" + +static int +wrap_vfscanf (FILE *fp, const CHAR *format, ...) +{ + va_list ap; + va_start (ap, format); + int ret = FNX (vf, scanf) (fp, format, ap); + va_end (ap); + return ret; +} + +static int +wrap_vscanf (const CHAR *format, ...) +{ + va_list ap; + va_start (ap, format); + int ret = FNX (v, scanf) (format, ap); + va_end (ap); + return ret; +} + +static int +wrap_vsscanf (const CHAR *s, const CHAR *format, ...) +{ + va_list ap; + va_start (ap, format); + int ret = FNX (vs, scanf) (s, format, ap); + va_end (ap); + return ret; +} + +static void +one_check (const CHAR *s, int expected, char expected_c) +{ + int ret; + FILE *fp; + int ret_i; + long int ret_l; + long long int ret_ll; + char ret_c; + fp = fopen (INFILE, "w"); + TEST_VERIFY_EXIT (fp != NULL); + ret = FNX (fput, s) (s, fp); + TEST_VERIFY_EXIT (0 <= ret); + ret = fclose (fp); + TEST_VERIFY_EXIT (ret == 0); + + if (!TEST_C2X) + { + expected = 0; + expected_c = s[0] == L_('-') ? s[2] : s[1]; + } + + ret = FNX (s, scanf) (s, L_("%i %c"), &ret_i, &ret_c); + TEST_COMPARE (ret, 2); + TEST_COMPARE (ret_i, expected); + TEST_COMPARE (ret_c, expected_c); + fp = fopen (INFILE, "r"); + TEST_VERIFY_EXIT (fp != NULL); + ret = FNX (f, scanf) (fp, L_("%i %c"), &ret_i, &ret_c); + TEST_COMPARE (ret, 2); + TEST_COMPARE (ret_i, expected); + TEST_COMPARE (ret_c, expected_c); + ret = fclose (fp); + TEST_VERIFY_EXIT (ret == 0); + fp = freopen (INFILE, "r", stdin); + TEST_VERIFY_EXIT (fp != NULL); + ret = FNX (, scanf) (L_("%i %c"), &ret_i, &ret_c); + TEST_COMPARE (ret, 2); + TEST_COMPARE (ret_i, expected); + TEST_COMPARE (ret_c, expected_c); + ret = wrap_vsscanf (s, L_("%i %c"), &ret_i, &ret_c); + TEST_COMPARE (ret, 2); + TEST_COMPARE (ret_i, expected); + TEST_COMPARE (ret_c, expected_c); + fp = fopen (INFILE, "r"); + TEST_VERIFY_EXIT (fp != NULL); + ret = wrap_vfscanf (fp, L_("%i %c"), &ret_i, &ret_c); + TEST_COMPARE (ret, 2); + TEST_COMPARE (ret_i, expected); + TEST_COMPARE (ret_c, expected_c); + ret = fclose (fp); + TEST_VERIFY_EXIT (ret == 0); + fp = freopen (INFILE, "r", stdin); + TEST_VERIFY_EXIT (fp != NULL); + ret = wrap_vscanf (L_("%i %c"), &ret_i, &ret_c); + TEST_COMPARE (ret, 2); + TEST_COMPARE (ret_i, expected); + TEST_COMPARE (ret_c, expected_c); + + ret = FNX (s, scanf) (s, L_("%li %c"), &ret_l, &ret_c); + TEST_COMPARE (ret, 2); + TEST_COMPARE (ret_l, expected); + TEST_COMPARE (ret_c, expected_c); + fp = fopen (INFILE, "r"); + TEST_VERIFY_EXIT (fp != NULL); + ret = FNX (f, scanf) (fp, L_("%li %c"), &ret_l, &ret_c); + TEST_COMPARE (ret, 2); + TEST_COMPARE (ret_l, expected); + TEST_COMPARE (ret_c, expected_c); + ret = fclose (fp); + TEST_VERIFY_EXIT (ret == 0); + fp = freopen (INFILE, "r", stdin); + TEST_VERIFY_EXIT (fp != NULL); + ret = FNX (, scanf) (L_("%li %c"), &ret_l, &ret_c); + TEST_COMPARE (ret, 2); + TEST_COMPARE (ret_l, expected); + TEST_COMPARE (ret_c, expected_c); + ret = wrap_vsscanf (s, L_("%li %c"), &ret_l, &ret_c); + TEST_COMPARE (ret, 2); + TEST_COMPARE (ret_l, expected); + TEST_COMPARE (ret_c, expected_c); + fp = fopen (INFILE, "r"); + TEST_VERIFY_EXIT (fp != NULL); + ret = wrap_vfscanf (fp, L_("%li %c"), &ret_l, &ret_c); + TEST_COMPARE (ret, 2); + TEST_COMPARE (ret_l, expected); + TEST_COMPARE (ret_c, expected_c); + ret = fclose (fp); + TEST_VERIFY_EXIT (ret == 0); + fp = freopen (INFILE, "r", stdin); + TEST_VERIFY_EXIT (fp != NULL); + ret = wrap_vscanf (L_("%li %c"), &ret_l, &ret_c); + TEST_COMPARE (ret, 2); + TEST_COMPARE (ret_l, expected); + TEST_COMPARE (ret_c, expected_c); + + ret = FNX (s, scanf) (s, L_("%lli %c"), &ret_ll, &ret_c); + TEST_COMPARE (ret, 2); + TEST_COMPARE (ret_ll, expected); + TEST_COMPARE (ret_c, expected_c); + fp = fopen (INFILE, "r"); + TEST_VERIFY_EXIT (fp != NULL); + ret = FNX (f, scanf) (fp, L_("%lli %c"), &ret_ll, &ret_c); + TEST_COMPARE (ret, 2); + TEST_COMPARE (ret_ll, expected); + TEST_COMPARE (ret_c, expected_c); + ret = fclose (fp); + TEST_VERIFY_EXIT (ret == 0); + fp = freopen (INFILE, "r", stdin); + TEST_VERIFY_EXIT (fp != NULL); + ret = FNX (, scanf) (L_("%lli %c"), &ret_ll, &ret_c); + TEST_COMPARE (ret, 2); + TEST_COMPARE (ret_ll, expected); + TEST_COMPARE (ret_c, expected_c); + ret = wrap_vsscanf (s, L_("%lli %c"), &ret_ll, &ret_c); + TEST_COMPARE (ret, 2); + TEST_COMPARE (ret_ll, expected); + TEST_COMPARE (ret_c, expected_c); + fp = fopen (INFILE, "r"); + TEST_VERIFY_EXIT (fp != NULL); + ret = wrap_vfscanf (fp, L_("%lli %c"), &ret_ll, &ret_c); + TEST_COMPARE (ret, 2); + TEST_COMPARE (ret_ll, expected); + TEST_COMPARE (ret_c, expected_c); + ret = fclose (fp); + TEST_VERIFY_EXIT (ret == 0); + fp = freopen (INFILE, "r", stdin); + TEST_VERIFY_EXIT (fp != NULL); + ret = wrap_vscanf (L_("%lli %c"), &ret_ll, &ret_c); + TEST_COMPARE (ret, 2); + TEST_COMPARE (ret_ll, expected); + TEST_COMPARE (ret_c, expected_c); +} + +static int +do_test (void) +{ + one_check (L_("0b101 x"), 5, 'x'); + one_check (L_("0B101 x"), 5, 'x'); + one_check (L_("-0b11111 y"), -31, 'y'); + one_check (L_("-0B11111 y"), -31, 'y'); + return 0; +} + +#include <support/test-driver.c> diff --git a/stdio-common/vfscanf-internal.c b/stdio-common/vfscanf-internal.c index 4fec12345c..d9675bd4b1 100644 --- a/stdio-common/vfscanf-internal.c +++ b/stdio-common/vfscanf-internal.c @@ -1428,6 +1428,16 @@ __vfscanf_internal (FILE *s, const char *format, va_list argptr, c = inchar (); } } + else if ((mode_flags & SCANF_ISOC23_BIN_CST) != 0 + && base == 0 + && width != 0 + && TOLOWER (c) == L_('b')) + { + base = 2; + if (width > 0) + --width; + c = inchar (); + } else if (base == 0) base = 8; } diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/Makefile b/sysdeps/ieee754/ldbl-128ibm-compat/Makefile index 67d476383a..4b047d608d 100644 --- a/sysdeps/ieee754/ldbl-128ibm-compat/Makefile +++ b/sysdeps/ieee754/ldbl-128ibm-compat/Makefile @@ -24,7 +24,13 @@ ldbl-extra-routines += isoc99_fwscanf \ isoc99_wscanf \ isoc99_vfwscanf \ isoc99_vswscanf \ - isoc99_vwscanf + isoc99_vwscanf \ + isoc23_fwscanf \ + isoc23_swscanf \ + isoc23_wscanf \ + isoc23_vfwscanf \ + isoc23_vswscanf \ + isoc23_vwscanf tests-internal += test-wcstold-ibm128 test-wcstold-ieee128 CFLAGS-test-wcstold-ieee128.c += -mfloat128 -mabi=ieeelongdouble -Wno-psabi @@ -53,7 +59,13 @@ ldbl-extra-routines += printf_size \ isoc99_sscanf \ isoc99_vfscanf \ isoc99_vscanf \ - isoc99_vsscanf + isoc99_vsscanf \ + isoc23_fscanf \ + isoc23_scanf \ + isoc23_sscanf \ + isoc23_vfscanf \ + isoc23_vscanf \ + isoc23_vsscanf # Printing long double values with IEEE binary128 format reuses part # of the internal float128 implementation (__printf_fp, __printf_fphex, @@ -306,6 +318,70 @@ CFLAGS-test-ldouble-compat_totalorder.c += -mabi=ibmlongdouble CFLAGS-test-ldouble-compat_totalordermag.c += -mabi=ibmlongdouble endif +ifeq ($(subdir), stdio-common) +tests += tst-ibm128-scanf-binary-c11 tst-ibm128-scanf-binary-c2x \ + tst-ibm128-scanf-binary-gnu11 tst-ibm128-scanf-binary-gnu89 \ + tst-ieee128-scanf-binary-c11 tst-ieee128-scanf-binary-c2x \ + tst-ieee128-scanf-binary-gnu11 tst-ieee128-scanf-binary-gnu89 + +# Some versions of GCC supported for building glibc do not support -std=c2x, so +# the test for that version uses -std=c11 and then _ISOC2X_SOURCE is defined in +# the test as needed. +CFLAGS-tst-ibm128-scanf-binary-c11.c += -mabi=ibmlongdouble -Wno-psabi \ + -std=c11 -DOBJPFX=\"$(objpfx)\" +CFLAGS-tst-ibm128-scanf-binary-c2x.c += -mabi=ibmlongdouble -Wno-psabi \ + -std=c11 -DOBJPFX=\"$(objpfx)\" +CFLAGS-tst-ibm128-scanf-binary-gnu11.c += -mabi=ibmlongdouble -Wno-psabi \ + -std=gnu11 -DOBJPFX=\"$(objpfx)\" +CFLAGS-tst-ibm128-scanf-binary-gnu89.c += -mabi=ibmlongdouble -Wno-psabi \ + -std=gnu89 -DOBJPFX=\"$(objpfx)\" +CFLAGS-tst-ieee128-scanf-binary-c11.c += -mfloat128 -mabi=ieeelongdouble \ + -Wno-psabi -std=c11 \ + -DOBJPFX=\"$(objpfx)\" +CFLAGS-tst-ieee128-scanf-binary-c2x.c += -mfloat128 -mabi=ieeelongdouble \ + -Wno-psabi -std=c11 \ + -DOBJPFX=\"$(objpfx)\" +CFLAGS-tst-ieee128-scanf-binary-gnu11.c += -mfloat128 -mabi=ieeelongdouble \ + -Wno-psabi -std=gnu11 \ + -DOBJPFX=\"$(objpfx)\" +CFLAGS-tst-ieee128-scanf-binary-gnu89.c += -mfloat128 -mabi=ieeelongdouble \ + -Wno-psabi -std=gnu89 \ + -DOBJPFX=\"$(objpfx)\" + +endif + +ifeq ($(subdir), wcsmbs) +tests += tst-ibm128-wscanf-binary-c11 tst-ibm128-wscanf-binary-c2x \ + tst-ibm128-wscanf-binary-gnu11 tst-ibm128-wscanf-binary-gnu89 \ + tst-ieee128-wscanf-binary-c11 tst-ieee128-wscanf-binary-c2x \ + tst-ieee128-wscanf-binary-gnu11 tst-ieee128-wscanf-binary-gnu89 + +# Some versions of GCC supported for building glibc do not support -std=c2x, so +# the test for that version uses -std=c11 and then _ISOC2X_SOURCE is defined in +# the test as needed. +CFLAGS-tst-ibm128-wscanf-binary-c11.c += -mabi=ibmlongdouble -Wno-psabi \ + -std=c11 -DOBJPFX=\"$(objpfx)\" +CFLAGS-tst-ibm128-wscanf-binary-c2x.c += -mabi=ibmlongdouble -Wno-psabi \ + -std=c11 -DOBJPFX=\"$(objpfx)\" +CFLAGS-tst-ibm128-wscanf-binary-gnu11.c += -mabi=ibmlongdouble -Wno-psabi \ + -std=gnu11 -DOBJPFX=\"$(objpfx)\" +CFLAGS-tst-ibm128-wscanf-binary-gnu89.c += -mabi=ibmlongdouble -Wno-psabi \ + -std=gnu89 -DOBJPFX=\"$(objpfx)\" +CFLAGS-tst-ieee128-wscanf-binary-c11.c += -mfloat128 -mabi=ieeelongdouble \ + -Wno-psabi -std=c11 \ + -DOBJPFX=\"$(objpfx)\" +CFLAGS-tst-ieee128-wscanf-binary-c2x.c += -mfloat128 -mabi=ieeelongdouble \ + -Wno-psabi -std=c11 \ + -DOBJPFX=\"$(objpfx)\" +CFLAGS-tst-ieee128-wscanf-binary-gnu11.c += -mfloat128 -mabi=ieeelongdouble \ + -Wno-psabi -std=gnu11 \ + -DOBJPFX=\"$(objpfx)\" +CFLAGS-tst-ieee128-wscanf-binary-gnu89.c += -mfloat128 -mabi=ieeelongdouble \ + -Wno-psabi -std=gnu89 \ + -DOBJPFX=\"$(objpfx)\" + +endif + # Add IEEE binary128 files as make targets. routines += $(foreach r,$(ldbl-extra-routines),ieee128-$(r)) diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/Versions b/sysdeps/ieee754/ldbl-128ibm-compat/Versions index d4ffd3762b..c0679a1153 100644 --- a/sysdeps/ieee754/ldbl-128ibm-compat/Versions +++ b/sysdeps/ieee754/ldbl-128ibm-compat/Versions @@ -258,4 +258,18 @@ libc { __qecvtieee128_r; __qfcvtieee128_r; } + GLIBC_2.38 { + __isoc23_fscanfieee128; + __isoc23_scanfieee128; + __isoc23_sscanfieee128; + __isoc23_vfscanfieee128; + __isoc23_vscanfieee128; + __isoc23_vsscanfieee128; + __isoc23_fwscanfieee128; + __isoc23_swscanfieee128; + __isoc23_wscanfieee128; + __isoc23_vfwscanfieee128; + __isoc23_vswscanfieee128; + __isoc23_vwscanfieee128; + } } diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_fscanf.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_fscanf.c new file mode 100644 index 0000000000..6d651a5d3f --- /dev/null +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_fscanf.c @@ -0,0 +1,36 @@ +/* Wrapper for __isoc23_fscanf. IEEE128 version. + Copyright (C) 2019-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdarg.h> +#include <libio/libioP.h> + +extern int +___ieee128_isoc23_fscanf (FILE *fp, const char *format, ...) +{ + va_list arg; + int done; + int mode_flags = + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST | SCANF_LDBL_USES_FLOAT128; + + va_start (arg, format); + done = __vfscanf_internal (fp, format, arg, mode_flags); + va_end (arg); + + return done; +} +strong_alias (___ieee128_isoc23_fscanf, __isoc23_fscanfieee128) diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_fwscanf.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_fwscanf.c new file mode 100644 index 0000000000..f9ba69ba50 --- /dev/null +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_fwscanf.c @@ -0,0 +1,36 @@ +/* Wrapper for __isoc23_fwscanf. IEEE128 version. + Copyright (C) 2019-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdarg.h> +#include <libioP.h> + +extern int +___ieee128_isoc23_fwscanf (FILE *fp, const wchar_t *format, ...) +{ + va_list ap; + int done; + int mode_flags = + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST | SCANF_LDBL_USES_FLOAT128; + + va_start (ap, format); + done = __vfwscanf_internal (fp, format, ap, mode_flags); + va_end (ap); + + return done; +} +strong_alias (___ieee128_isoc23_fwscanf, __isoc23_fwscanfieee128) diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_scanf.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_scanf.c new file mode 100644 index 0000000000..4a128392b8 --- /dev/null +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_scanf.c @@ -0,0 +1,36 @@ +/* Wrapper for __isoc23_scanf. IEEE128 version. + Copyright (C) 2019-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdarg.h> +#include <libio/libioP.h> + +extern int +___ieee128_isoc23_scanf (const char *format, ...) +{ + va_list arg; + int done; + int mode_flags = + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST | SCANF_LDBL_USES_FLOAT128; + + va_start (arg, format); + done = __vfscanf_internal (stdin, format, arg, mode_flags); + va_end (arg); + + return done; +} +strong_alias (___ieee128_isoc23_scanf, __isoc23_scanfieee128) diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_sscanf.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_sscanf.c new file mode 100644 index 0000000000..9845e6a282 --- /dev/null +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_sscanf.c @@ -0,0 +1,41 @@ +/* Wrapper for __isoc23_sscanf. IEEE128 version. + Copyright (C) 2019-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdarg.h> +#include <strfile.h> +#include <libioP.h> + +extern int +___ieee128_isoc23_sscanf (const char *string, const char *format, ...) +{ + va_list arg; + int done; + int mode_flags = + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST | SCANF_LDBL_USES_FLOAT128; + + _IO_strfile sf; + FILE *fp = _IO_strfile_read (&sf, string); + + va_start (arg, format); + done = __vfscanf_internal (fp, format, arg, mode_flags); + va_end (arg); + + return done; +} +strong_alias (___ieee128_isoc23_sscanf, __isoc23_sscanfieee128) +hidden_def (___ieee128_isoc23_sscanf) diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_swscanf.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_swscanf.c new file mode 100644 index 0000000000..b50a2bfbca --- /dev/null +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_swscanf.c @@ -0,0 +1,41 @@ +/* Wrapper for __isoc23_swscanf. IEEE128 version. + Copyright (C) 2019-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdarg.h> +#include <strfile.h> +#include <libioP.h> + +extern int +___ieee128_isoc23_swscanf (const wchar_t *string, const wchar_t *format, ...) +{ + va_list ap; + int done; + int mode_flags = + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST | SCANF_LDBL_USES_FLOAT128; + + _IO_strfile sf; + struct _IO_wide_data wd; + FILE *fp = _IO_strfile_readw (&sf, &wd, string); + + va_start (ap, format); + done = __vfwscanf_internal (fp, format, ap, mode_flags); + va_end (ap); + + return done; +} +strong_alias (___ieee128_isoc23_swscanf, __isoc23_swscanfieee128) diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vfscanf.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vfscanf.c new file mode 100644 index 0000000000..876cc0c6d0 --- /dev/null +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vfscanf.c @@ -0,0 +1,30 @@ +/* Wrapper for __isoc23_vfscanf. IEEE128 version. + Copyright (C) 2019-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <libio/libioP.h> +#include <stdio.h> + +extern int +___ieee128_isoc23_vfscanf (FILE *fp, const char *format, va_list ap) +{ + int mode_flags = + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST | SCANF_LDBL_USES_FLOAT128; + return __vfscanf_internal (fp, format, ap, mode_flags); +} +strong_alias (___ieee128_isoc23_vfscanf, __isoc23_vfscanfieee128) +hidden_def (___ieee128_isoc23_vfscanf) diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vfwscanf.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vfwscanf.c new file mode 100644 index 0000000000..752b245343 --- /dev/null +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vfwscanf.c @@ -0,0 +1,28 @@ +/* Wrapper for __isoc23_vfwscanf. IEEE128 version. + Copyright (C) 2019-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <libioP.h> + +extern int +___ieee128_isoc23_vfwscanf (FILE *fp, const wchar_t *format, va_list ap) +{ + int mode_flags = + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST | SCANF_LDBL_USES_FLOAT128; + return __vfwscanf_internal (fp, format, ap, mode_flags); +} +strong_alias (___ieee128_isoc23_vfwscanf, __isoc23_vfwscanfieee128) diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vscanf.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vscanf.c new file mode 100644 index 0000000000..ef36bd162f --- /dev/null +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vscanf.c @@ -0,0 +1,28 @@ +/* Wrapper for __isoc23_vscanf. IEEE128 version. + Copyright (C) 2019-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <libio/libioP.h> + +extern int +___ieee128_isoc23_vscanf (const char *format, va_list ap) +{ + int mode_flags = + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST | SCANF_LDBL_USES_FLOAT128; + return __vfscanf_internal (stdin, format, ap, mode_flags); +} +strong_alias (___ieee128_isoc23_vscanf, __isoc23_vscanfieee128) diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vsscanf.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vsscanf.c new file mode 100644 index 0000000000..5524d788a7 --- /dev/null +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vsscanf.c @@ -0,0 +1,32 @@ +/* Wrapper for __isoc23_vsscanf. IEEE128 version. + Copyright (C) 2019-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <strfile.h> +#include <libioP.h> + +extern int +___ieee128_isoc23_vsscanf (const char *string, const char *format, va_list ap) +{ + _IO_strfile sf; + FILE *fp = _IO_strfile_read (&sf, string); + int mode_flags = + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST | SCANF_LDBL_USES_FLOAT128; + return __vfscanf_internal (fp, format, ap, mode_flags); +} +strong_alias (___ieee128_isoc23_vsscanf, __isoc23_vsscanfieee128) +hidden_def (___ieee128_isoc23_vsscanf) diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vswscanf.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vswscanf.c new file mode 100644 index 0000000000..4e893f2942 --- /dev/null +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vswscanf.c @@ -0,0 +1,33 @@ +/* Wrapper for __isoc23_vswscanf. IEEE128 version. + Copyright (C) 2019-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <libioP.h> +#include <wchar.h> +#include <strfile.h> + +extern int +___ieee128_isoc23_vswscanf (wchar_t *string, const wchar_t *format, va_list ap) +{ + _IO_strfile sf; + struct _IO_wide_data wd; + FILE *fp = _IO_strfile_readw (&sf, &wd, string); + int mode_flags = + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST | SCANF_LDBL_USES_FLOAT128; + return __vfwscanf_internal (fp, format, ap, mode_flags); +} +strong_alias (___ieee128_isoc23_vswscanf, __isoc23_vswscanfieee128) diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vwscanf.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vwscanf.c new file mode 100644 index 0000000000..a68239d9f0 --- /dev/null +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vwscanf.c @@ -0,0 +1,28 @@ +/* Wrapper for __isoc23_vwscanf. IEEE128 version. + Copyright (C) 2019-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <libioP.h> + +extern int +___ieee128_isoc23_vwscanf (const wchar_t *format, va_list ap) +{ + int mode_flags = + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST | SCANF_LDBL_USES_FLOAT128; + return __vfwscanf_internal (stdin, format, ap, mode_flags); +} +strong_alias (___ieee128_isoc23_vwscanf, __isoc23_vwscanfieee128) diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_wscanf.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_wscanf.c new file mode 100644 index 0000000000..f596df2a39 --- /dev/null +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_wscanf.c @@ -0,0 +1,36 @@ +/* Wrapper for __isoc23_wscanf. IEEE128 version. + Copyright (C) 2019-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdarg.h> +#include <libioP.h> + +extern int +___ieee128_isoc23_wscanf (const wchar_t *format, ...) +{ + va_list ap; + int done; + int mode_flags = + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST | SCANF_LDBL_USES_FLOAT128; + + va_start (ap, format); + done = __vfwscanf_internal (stdin, format, ap, mode_flags); + va_end (ap); + + return done; +} +strong_alias (___ieee128_isoc23_wscanf, __isoc23_wscanfieee128) diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-scanf-binary-c11.c b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-scanf-binary-c11.c new file mode 100644 index 0000000000..31706beee6 --- /dev/null +++ b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-scanf-binary-c11.c @@ -0,0 +1,2 @@ +#define STDX "ibm128-" +#include <tst-scanf-binary-c11.c> diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-scanf-binary-c2x.c b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-scanf-binary-c2x.c new file mode 100644 index 0000000000..f8bb2e4be3 --- /dev/null +++ b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-scanf-binary-c2x.c @@ -0,0 +1,2 @@ +#define STDX "ibm128-" +#include <tst-scanf-binary-c2x.c> diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-scanf-binary-gnu11.c b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-scanf-binary-gnu11.c new file mode 100644 index 0000000000..074aeee208 --- /dev/null +++ b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-scanf-binary-gnu11.c @@ -0,0 +1,2 @@ +#define STDX "ibm128-" +#include <tst-scanf-binary-gnu11.c> diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-scanf-binary-gnu89.c b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-scanf-binary-gnu89.c new file mode 100644 index 0000000000..6091b33cb6 --- /dev/null +++ b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-scanf-binary-gnu89.c @@ -0,0 +1,2 @@ +#define STDX "ibm128-" +#include <tst-scanf-binary-gnu89.c> diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-wscanf-binary-c11.c b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-wscanf-binary-c11.c new file mode 100644 index 0000000000..4885a8e265 --- /dev/null +++ b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-wscanf-binary-c11.c @@ -0,0 +1,2 @@ +#define STDX "ibm128-" +#include <tst-wscanf-binary-c11.c> diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-wscanf-binary-c2x.c b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-wscanf-binary-c2x.c new file mode 100644 index 0000000000..bf0c3da75e --- /dev/null +++ b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-wscanf-binary-c2x.c @@ -0,0 +1,2 @@ +#define STDX "ibm128-" +#include <tst-wscanf-binary-c2x.c> diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-wscanf-binary-gnu11.c b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-wscanf-binary-gnu11.c new file mode 100644 index 0000000000..49ae257fbd --- /dev/null +++ b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-wscanf-binary-gnu11.c @@ -0,0 +1,2 @@ +#define STDX "ibm128-" +#include <tst-wscanf-binary-gnu11.c> diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-wscanf-binary-gnu89.c b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-wscanf-binary-gnu89.c new file mode 100644 index 0000000000..a76be283be --- /dev/null +++ b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ibm128-wscanf-binary-gnu89.c @@ -0,0 +1,2 @@ +#define STDX "ibm128-" +#include <tst-wscanf-binary-gnu89.c> diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-scanf-binary-c11.c b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-scanf-binary-c11.c new file mode 100644 index 0000000000..2570fcad5c --- /dev/null +++ b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-scanf-binary-c11.c @@ -0,0 +1,2 @@ +#define STDX "ieee128-" +#include <tst-scanf-binary-c11.c> diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-scanf-binary-c2x.c b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-scanf-binary-c2x.c new file mode 100644 index 0000000000..d09c21394c --- /dev/null +++ b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-scanf-binary-c2x.c @@ -0,0 +1,2 @@ +#define STDX "ieee128-" +#include <tst-scanf-binary-c2x.c> diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-scanf-binary-gnu11.c b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-scanf-binary-gnu11.c new file mode 100644 index 0000000000..4e08b6417f --- /dev/null +++ b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-scanf-binary-gnu11.c @@ -0,0 +1,2 @@ +#define STDX "ieee128-" +#include <tst-scanf-binary-gnu11.c> diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-scanf-binary-gnu89.c b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-scanf-binary-gnu89.c new file mode 100644 index 0000000000..a917b3bfef --- /dev/null +++ b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-scanf-binary-gnu89.c @@ -0,0 +1,2 @@ +#define STDX "ieee128-" +#include <tst-scanf-binary-gnu89.c> diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-wscanf-binary-c11.c b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-wscanf-binary-c11.c new file mode 100644 index 0000000000..a6a6bae1cd --- /dev/null +++ b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-wscanf-binary-c11.c @@ -0,0 +1,2 @@ +#define STDX "ieee128-" +#include <tst-wscanf-binary-c11.c> diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-wscanf-binary-c2x.c b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-wscanf-binary-c2x.c new file mode 100644 index 0000000000..7e2d27c6d2 --- /dev/null +++ b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-wscanf-binary-c2x.c @@ -0,0 +1,2 @@ +#define STDX "ieee128-" +#include <tst-wscanf-binary-c2x.c> diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-wscanf-binary-gnu11.c b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-wscanf-binary-gnu11.c new file mode 100644 index 0000000000..d81d2d7136 --- /dev/null +++ b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-wscanf-binary-gnu11.c @@ -0,0 +1,2 @@ +#define STDX "ieee128-" +#include <tst-wscanf-binary-gnu11.c> diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-wscanf-binary-gnu89.c b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-wscanf-binary-gnu89.c new file mode 100644 index 0000000000..f405923e0f --- /dev/null +++ b/sysdeps/ieee754/ldbl-128ibm-compat/tst-ieee128-wscanf-binary-gnu89.c @@ -0,0 +1,2 @@ +#define STDX "ieee128-" +#include <tst-wscanf-binary-gnu89.c> diff --git a/sysdeps/ieee754/ldbl-opt/Makefile b/sysdeps/ieee754/ldbl-opt/Makefile index 1d01846476..fec804808c 100644 --- a/sysdeps/ieee754/ldbl-opt/Makefile +++ b/sysdeps/ieee754/ldbl-opt/Makefile @@ -42,6 +42,10 @@ libnldbl-calls = asprintf dprintf fprintf fscanf fwprintf fwscanf iovfscanf \ isoc99_vscanf isoc99_vfscanf isoc99_vsscanf \ isoc99_wscanf isoc99_fwscanf isoc99_swscanf \ isoc99_vwscanf isoc99_vfwscanf isoc99_vswscanf \ + isoc23_scanf isoc23_fscanf isoc23_sscanf \ + isoc23_vscanf isoc23_vfscanf isoc23_vsscanf \ + isoc23_wscanf isoc23_fwscanf isoc23_swscanf \ + isoc23_vwscanf isoc23_vfwscanf isoc23_vswscanf \ nextup nextdown totalorder totalordermag getpayload \ canonicalize setpayload setpayloadsig llogb fmaxmag fminmag \ roundeven fromfp ufromfp fromfpx ufromfpx fadd dadd \ @@ -221,3 +225,39 @@ $(objpfx)tst-nldbl-error.c: tst-ldbl-error.c CFLAGS-tst-nldbl-warn.c += -mlong-double-64 CFLAGS-tst-nldbl-error.c += -mlong-double-64 endif + +ifeq ($(subdir), stdio-common) +tests += tst-nldbl-scanf-binary-c11 tst-nldbl-scanf-binary-c2x \ + tst-nldbl-scanf-binary-gnu11 tst-nldbl-scanf-binary-gnu89 + +# Some versions of GCC supported for building glibc do not support -std=c2x, so +# the test for that version uses -std=c11 and then _ISOC2X_SOURCE is defined in +# the test as needed. +CFLAGS-tst-nldbl-scanf-binary-c11.c += -mlong-double-64 -std=c11 \ + -DOBJPFX=\"$(objpfx)\" +CFLAGS-tst-nldbl-scanf-binary-c2x.c += -mlong-double-64 -std=c11 \ + -DOBJPFX=\"$(objpfx)\" +CFLAGS-tst-nldbl-scanf-binary-gnu11.c += -mlong-double-64 -std=gnu11 \ + -DOBJPFX=\"$(objpfx)\" +CFLAGS-tst-nldbl-scanf-binary-gnu89.c += -mlong-double-64 -std=gnu89 \ + -DOBJPFX=\"$(objpfx)\" + +endif + +ifeq ($(subdir), wcsmbs) +tests += tst-nldbl-wscanf-binary-c11 tst-nldbl-wscanf-binary-c2x \ + tst-nldbl-wscanf-binary-gnu11 tst-nldbl-wscanf-binary-gnu89 + +# Some versions of GCC supported for building glibc do not support -std=c2x, so +# the test for that version uses -std=c11 and then _ISOC2X_SOURCE is defined in +# the test as needed. +CFLAGS-tst-nldbl-wscanf-binary-c11.c += -mlong-double-64 -std=c11 \ + -DOBJPFX=\"$(objpfx)\" +CFLAGS-tst-nldbl-wscanf-binary-c2x.c += -mlong-double-64 -std=c11 \ + -DOBJPFX=\"$(objpfx)\" +CFLAGS-tst-nldbl-wscanf-binary-gnu11.c += -mlong-double-64 -std=gnu11 \ + -DOBJPFX=\"$(objpfx)\" +CFLAGS-tst-nldbl-wscanf-binary-gnu89.c += -mlong-double-64 -std=gnu89 \ + -DOBJPFX=\"$(objpfx)\" + +endif diff --git a/sysdeps/ieee754/ldbl-opt/Versions b/sysdeps/ieee754/ldbl-opt/Versions index 21a2db6888..5345f1c683 100644 --- a/sysdeps/ieee754/ldbl-opt/Versions +++ b/sysdeps/ieee754/ldbl-opt/Versions @@ -84,6 +84,20 @@ libc { __nldbl_err; __nldbl_verr; __nldbl_errx; __nldbl_verrx; __nldbl_error; __nldbl_error_at_line; } + GLIBC_2.38 { + __nldbl___isoc23_scanf; + __nldbl___isoc23_fscanf; + __nldbl___isoc23_sscanf; + __nldbl___isoc23_vscanf; + __nldbl___isoc23_vfscanf; + __nldbl___isoc23_vsscanf; + __nldbl___isoc23_wscanf; + __nldbl___isoc23_fwscanf; + __nldbl___isoc23_swscanf; + __nldbl___isoc23_vwscanf; + __nldbl___isoc23_vfwscanf; + __nldbl___isoc23_vswscanf; + } } libm { NLDBL_VERSION { diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-compat.c b/sysdeps/ieee754/ldbl-opt/nldbl-compat.c index c654ebe416..22112c54d4 100644 --- a/sysdeps/ieee754/ldbl-opt/nldbl-compat.c +++ b/sysdeps/ieee754/ldbl-opt/nldbl-compat.c @@ -45,6 +45,10 @@ libc_hidden_proto (__nldbl___isoc99_vsscanf) libc_hidden_proto (__nldbl___isoc99_vfscanf) libc_hidden_proto (__nldbl___isoc99_vswscanf) libc_hidden_proto (__nldbl___isoc99_vfwscanf) +libc_hidden_proto (__nldbl___isoc23_vsscanf) +libc_hidden_proto (__nldbl___isoc23_vfscanf) +libc_hidden_proto (__nldbl___isoc23_vswscanf) +libc_hidden_proto (__nldbl___isoc23_vfwscanf) /* Compatibility with IEEE double as long double. IEEE quad long double is used by default for most programs, so @@ -992,6 +996,172 @@ __nldbl___isoc99_wscanf (const wchar_t *fmt, ...) return ret; } +int +attribute_compat_text_section +__nldbl___isoc23_vfscanf (FILE *s, const char *fmt, va_list ap) +{ + return __vfscanf_internal (s, fmt, ap, + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A + | SCANF_ISOC23_BIN_CST); +} +libc_hidden_def (__nldbl___isoc23_vfscanf) + +int +attribute_compat_text_section +__nldbl___isoc23_sscanf (const char *s, const char *fmt, ...) +{ + _IO_strfile sf; + FILE *f = _IO_strfile_read (&sf, s); + va_list ap; + int ret; + + va_start (ap, fmt); + ret = __vfscanf_internal (f, fmt, ap, + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A + | SCANF_ISOC23_BIN_CST); + va_end (ap); + + return ret; +} + +int +attribute_compat_text_section +__nldbl___isoc23_vsscanf (const char *s, const char *fmt, va_list ap) +{ + _IO_strfile sf; + FILE *f = _IO_strfile_read (&sf, s); + + return __vfscanf_internal (f, fmt, ap, + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A + | SCANF_ISOC23_BIN_CST); +} +libc_hidden_def (__nldbl___isoc23_vsscanf) + +int +attribute_compat_text_section +__nldbl___isoc23_vscanf (const char *fmt, va_list ap) +{ + return __vfscanf_internal (stdin, fmt, ap, + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A + | SCANF_ISOC23_BIN_CST); +} + +int +attribute_compat_text_section +__nldbl___isoc23_fscanf (FILE *s, const char *fmt, ...) +{ + va_list ap; + int ret; + + va_start (ap, fmt); + ret = __vfscanf_internal (s, fmt, ap, + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A + | SCANF_ISOC23_BIN_CST); + va_end (ap); + + return ret; +} + +int +attribute_compat_text_section +__nldbl___isoc23_scanf (const char *fmt, ...) +{ + va_list ap; + int ret; + + va_start (ap, fmt); + ret = __vfscanf_internal (stdin, fmt, ap, + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A + | SCANF_ISOC23_BIN_CST); + va_end (ap); + + return ret; +} + +int +attribute_compat_text_section +__nldbl___isoc23_vfwscanf (FILE *s, const wchar_t *fmt, va_list ap) +{ + return __vfwscanf_internal (s, fmt, ap, + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A + | SCANF_ISOC23_BIN_CST); +} +libc_hidden_def (__nldbl___isoc23_vfwscanf) + +int +attribute_compat_text_section +__nldbl___isoc23_swscanf (const wchar_t *s, const wchar_t *fmt, ...) +{ + _IO_strfile sf; + struct _IO_wide_data wd; + FILE *f = _IO_strfile_readw (&sf, &wd, s); + va_list ap; + int ret; + + va_start (ap, fmt); + ret = __vfwscanf_internal (f, fmt, ap, + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A + | SCANF_ISOC23_BIN_CST); + va_end (ap); + + return ret; +} + +int +attribute_compat_text_section +__nldbl___isoc23_vswscanf (const wchar_t *s, const wchar_t *fmt, va_list ap) +{ + _IO_strfile sf; + struct _IO_wide_data wd; + FILE *f = _IO_strfile_readw (&sf, &wd, s); + + return __vfwscanf_internal (f, fmt, ap, + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A + | SCANF_ISOC23_BIN_CST); +} +libc_hidden_def (__nldbl___isoc23_vswscanf) + +int +attribute_compat_text_section +__nldbl___isoc23_vwscanf (const wchar_t *fmt, va_list ap) +{ + return __vfwscanf_internal (stdin, fmt, ap, + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A + | SCANF_ISOC23_BIN_CST); +} + +int +attribute_compat_text_section +__nldbl___isoc23_fwscanf (FILE *s, const wchar_t *fmt, ...) +{ + va_list ap; + int ret; + + va_start (ap, fmt); + ret = __vfwscanf_internal (s, fmt, ap, + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A + | SCANF_ISOC23_BIN_CST); + va_end (ap); + + return ret; +} + +int +attribute_compat_text_section +__nldbl___isoc23_wscanf (const wchar_t *fmt, ...) +{ + va_list ap; + int ret; + + va_start (ap, fmt); + ret = __vfwscanf_internal (stdin, fmt, ap, + SCANF_LDBL_IS_DBL | SCANF_ISOC99_A + | SCANF_ISOC23_BIN_CST); + va_end (ap); + + return ret; +} + void __nldbl_argp_error (const struct argp_state *state, const char *fmt, ...) { diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-compat.h b/sysdeps/ieee754/ldbl-opt/nldbl-compat.h index 7309e8a80f..d514442d87 100644 --- a/sysdeps/ieee754/ldbl-opt/nldbl-compat.h +++ b/sysdeps/ieee754/ldbl-opt/nldbl-compat.h @@ -78,6 +78,18 @@ NLDBL_DECL (__isoc99_swscanf); NLDBL_DECL (__isoc99_vwscanf); NLDBL_DECL (__isoc99_vfwscanf); NLDBL_DECL (__isoc99_vswscanf); +NLDBL_DECL (__isoc23_scanf); +NLDBL_DECL (__isoc23_fscanf); +NLDBL_DECL (__isoc23_sscanf); +NLDBL_DECL (__isoc23_vscanf); +NLDBL_DECL (__isoc23_vfscanf); +NLDBL_DECL (__isoc23_vsscanf); +NLDBL_DECL (__isoc23_wscanf); +NLDBL_DECL (__isoc23_fwscanf); +NLDBL_DECL (__isoc23_swscanf); +NLDBL_DECL (__isoc23_vwscanf); +NLDBL_DECL (__isoc23_vfwscanf); +NLDBL_DECL (__isoc23_vswscanf); NLDBL_DECL (argp_error); NLDBL_DECL (argp_failure); NLDBL_DECL (warn); diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_fscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_fscanf.c new file mode 100644 index 0000000000..7b5a0565f7 --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_fscanf.c @@ -0,0 +1,15 @@ +#include "nldbl-compat.h" + +int +attribute_hidden +__isoc23_fscanf (FILE *stream, const char *fmt, ...) +{ + va_list arg; + int done; + + va_start (arg, fmt); + done = __nldbl___isoc23_vfscanf (stream, fmt, arg); + va_end (arg); + + return done; +} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_fwscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_fwscanf.c new file mode 100644 index 0000000000..4ecb340143 --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_fwscanf.c @@ -0,0 +1,15 @@ +#include "nldbl-compat.h" + +int +attribute_hidden +__isoc23_fwscanf (FILE *stream, const wchar_t *fmt, ...) +{ + va_list arg; + int done; + + va_start (arg, fmt); + done = __nldbl___isoc23_vfwscanf (stream, fmt, arg); + va_end (arg); + + return done; +} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_scanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_scanf.c new file mode 100644 index 0000000000..90ea10c115 --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_scanf.c @@ -0,0 +1,15 @@ +#include "nldbl-compat.h" + +int +attribute_hidden +__isoc23_scanf (const char *fmt, ...) +{ + va_list arg; + int done; + + va_start (arg, fmt); + done = __nldbl___isoc23_vfscanf (stdin, fmt, arg); + va_end (arg); + + return done; +} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_sscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_sscanf.c new file mode 100644 index 0000000000..64124e479c --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_sscanf.c @@ -0,0 +1,15 @@ +#include "nldbl-compat.h" + +int +attribute_hidden +__isoc23_sscanf (const char *s, const char *fmt, ...) +{ + va_list arg; + int done; + + va_start (arg, fmt); + done = __nldbl___isoc23_vsscanf (s, fmt, arg); + va_end (arg); + + return done; +} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_swscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_swscanf.c new file mode 100644 index 0000000000..da84c318b2 --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_swscanf.c @@ -0,0 +1,15 @@ +#include "nldbl-compat.h" + +int +attribute_hidden +__isoc23_swscanf (const wchar_t *s, const wchar_t *fmt, ...) +{ + va_list arg; + int done; + + va_start (arg, fmt); + done = __nldbl___isoc23_vswscanf (s, fmt, arg); + va_end (arg); + + return done; +} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vfscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vfscanf.c new file mode 100644 index 0000000000..671aa63ec6 --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vfscanf.c @@ -0,0 +1,8 @@ +#include "nldbl-compat.h" + +int +attribute_hidden +__isoc23_vfscanf (FILE *s, const char *fmt, va_list ap) +{ + return __nldbl___isoc23_vfscanf (s, fmt, ap); +} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vfwscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vfwscanf.c new file mode 100644 index 0000000000..b069522cd1 --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vfwscanf.c @@ -0,0 +1,8 @@ +#include "nldbl-compat.h" + +int +attribute_hidden +__isoc23_vfwscanf (FILE *s, const wchar_t *fmt, va_list ap) +{ + return __nldbl___isoc23_vfwscanf (s, fmt, ap); +} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vscanf.c new file mode 100644 index 0000000000..f2256f210f --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vscanf.c @@ -0,0 +1,8 @@ +#include "nldbl-compat.h" + +int +attribute_hidden +__isoc23_vscanf (const char *fmt, va_list ap) +{ + return __nldbl___isoc23_vfscanf (stdin, fmt, ap); +} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vsscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vsscanf.c new file mode 100644 index 0000000000..96ce46b317 --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vsscanf.c @@ -0,0 +1,8 @@ +#include "nldbl-compat.h" + +int +attribute_hidden +__isoc23_vsscanf (const char *string, const char *fmt, va_list ap) +{ + return __nldbl___isoc23_vsscanf (string, fmt, ap); +} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vswscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vswscanf.c new file mode 100644 index 0000000000..0819b55a2c --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vswscanf.c @@ -0,0 +1,8 @@ +#include "nldbl-compat.h" + +int +attribute_hidden +__isoc23_vswscanf (const wchar_t *string, const wchar_t *fmt, va_list ap) +{ + return __nldbl___isoc23_vswscanf (string, fmt, ap); +} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vwscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vwscanf.c new file mode 100644 index 0000000000..f92876ec27 --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_vwscanf.c @@ -0,0 +1,8 @@ +#include "nldbl-compat.h" + +int +attribute_hidden +__isoc23_vwscanf (const wchar_t *fmt, va_list ap) +{ + return __nldbl___isoc23_vfwscanf (stdin, fmt, ap); +} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_wscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_wscanf.c new file mode 100644 index 0000000000..cece258845 --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/nldbl-isoc23_wscanf.c @@ -0,0 +1,15 @@ +#include "nldbl-compat.h" + +int +attribute_hidden +__isoc23_wscanf (const wchar_t *fmt, ...) +{ + va_list arg; + int done; + + va_start (arg, fmt); + done = __nldbl___isoc23_vfwscanf (stdin, fmt, arg); + va_end (arg); + + return done; +} diff --git a/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-c11.c b/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-c11.c new file mode 100644 index 0000000000..f5bc396fcc --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-c11.c @@ -0,0 +1,2 @@ +#define STDX "nldbl-" +#include <tst-scanf-binary-c11.c> diff --git a/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-c2x.c b/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-c2x.c new file mode 100644 index 0000000000..4e0cf7570f --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-c2x.c @@ -0,0 +1,2 @@ +#define STDX "nldbl-" +#include <tst-scanf-binary-c2x.c> diff --git a/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-gnu11.c b/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-gnu11.c new file mode 100644 index 0000000000..10e228e98a --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-gnu11.c @@ -0,0 +1,2 @@ +#define STDX "nldbl-" +#include <tst-scanf-binary-gnu11.c> diff --git a/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-gnu89.c b/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-gnu89.c new file mode 100644 index 0000000000..c5da04b644 --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/tst-nldbl-scanf-binary-gnu89.c @@ -0,0 +1,2 @@ +#define STDX "nldbl-" +#include <tst-scanf-binary-gnu89.c> diff --git a/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-c11.c b/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-c11.c new file mode 100644 index 0000000000..0e66e97cf7 --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-c11.c @@ -0,0 +1,2 @@ +#define STDX "nldbl-" +#include <tst-wscanf-binary-c11.c> diff --git a/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-c2x.c b/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-c2x.c new file mode 100644 index 0000000000..7637aab0d4 --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-c2x.c @@ -0,0 +1,2 @@ +#define STDX "nldbl-" +#include <tst-wscanf-binary-c2x.c> diff --git a/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-gnu11.c b/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-gnu11.c new file mode 100644 index 0000000000..106ec38bce --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-gnu11.c @@ -0,0 +1,2 @@ +#define STDX "nldbl-" +#include <tst-wscanf-binary-gnu11.c> diff --git a/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-gnu89.c b/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-gnu89.c new file mode 100644 index 0000000000..61a15619d2 --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/tst-nldbl-wscanf-binary-gnu89.c @@ -0,0 +1,2 @@ +#define STDX "nldbl-" +#include <tst-wscanf-binary-gnu89.c> diff --git a/sysdeps/mach/hurd/i386/libc.abilist b/sysdeps/mach/hurd/i386/libc.abilist index a0419a13d0..ed0c4789eb 100644 --- a/sysdeps/mach/hurd/i386/libc.abilist +++ b/sysdeps/mach/hurd/i386/libc.abilist @@ -2294,6 +2294,10 @@ GLIBC_2.36 arc4random_buf F GLIBC_2.36 arc4random_uniform F GLIBC_2.36 c8rtomb F GLIBC_2.36 mbrtoc8 F +GLIBC_2.38 __isoc23_fscanf F +GLIBC_2.38 __isoc23_fwscanf F +GLIBC_2.38 __isoc23_scanf F +GLIBC_2.38 __isoc23_sscanf F GLIBC_2.38 __isoc23_strtoimax F GLIBC_2.38 __isoc23_strtol F GLIBC_2.38 __isoc23_strtol_l F @@ -2304,6 +2308,13 @@ GLIBC_2.38 __isoc23_strtoul_l F GLIBC_2.38 __isoc23_strtoull F GLIBC_2.38 __isoc23_strtoull_l F GLIBC_2.38 __isoc23_strtoumax F +GLIBC_2.38 __isoc23_swscanf F +GLIBC_2.38 __isoc23_vfscanf F +GLIBC_2.38 __isoc23_vfwscanf F +GLIBC_2.38 __isoc23_vscanf F +GLIBC_2.38 __isoc23_vsscanf F +GLIBC_2.38 __isoc23_vswscanf F +GLIBC_2.38 __isoc23_vwscanf F GLIBC_2.38 __isoc23_wcstoimax F GLIBC_2.38 __isoc23_wcstol F GLIBC_2.38 __isoc23_wcstol_l F @@ -2314,6 +2325,7 @@ GLIBC_2.38 __isoc23_wcstoul_l F GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F +GLIBC_2.38 __isoc23_wscanf F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist index 62e80648e8..0e2d9c3045 100644 --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist @@ -2633,6 +2633,10 @@ GLIBC_2.36 pidfd_open F GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F +GLIBC_2.38 __isoc23_fscanf F +GLIBC_2.38 __isoc23_fwscanf F +GLIBC_2.38 __isoc23_scanf F +GLIBC_2.38 __isoc23_sscanf F GLIBC_2.38 __isoc23_strtoimax F GLIBC_2.38 __isoc23_strtol F GLIBC_2.38 __isoc23_strtol_l F @@ -2643,6 +2647,13 @@ GLIBC_2.38 __isoc23_strtoul_l F GLIBC_2.38 __isoc23_strtoull F GLIBC_2.38 __isoc23_strtoull_l F GLIBC_2.38 __isoc23_strtoumax F +GLIBC_2.38 __isoc23_swscanf F +GLIBC_2.38 __isoc23_vfscanf F +GLIBC_2.38 __isoc23_vfwscanf F +GLIBC_2.38 __isoc23_vscanf F +GLIBC_2.38 __isoc23_vsscanf F +GLIBC_2.38 __isoc23_vswscanf F +GLIBC_2.38 __isoc23_vwscanf F GLIBC_2.38 __isoc23_wcstoimax F GLIBC_2.38 __isoc23_wcstol F GLIBC_2.38 __isoc23_wcstol_l F @@ -2653,3 +2664,4 @@ GLIBC_2.38 __isoc23_wcstoul_l F GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F +GLIBC_2.38 __isoc23_wscanf F diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist index 9d490fdee8..f1bec1978d 100644 --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist @@ -2730,6 +2730,10 @@ GLIBC_2.36 pidfd_open F GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F +GLIBC_2.38 __isoc23_fscanf F +GLIBC_2.38 __isoc23_fwscanf F +GLIBC_2.38 __isoc23_scanf F +GLIBC_2.38 __isoc23_sscanf F GLIBC_2.38 __isoc23_strtoimax F GLIBC_2.38 __isoc23_strtol F GLIBC_2.38 __isoc23_strtol_l F @@ -2740,6 +2744,13 @@ GLIBC_2.38 __isoc23_strtoul_l F GLIBC_2.38 __isoc23_strtoull F GLIBC_2.38 __isoc23_strtoull_l F GLIBC_2.38 __isoc23_strtoumax F +GLIBC_2.38 __isoc23_swscanf F +GLIBC_2.38 __isoc23_vfscanf F +GLIBC_2.38 __isoc23_vfwscanf F +GLIBC_2.38 __isoc23_vscanf F +GLIBC_2.38 __isoc23_vsscanf F +GLIBC_2.38 __isoc23_vswscanf F +GLIBC_2.38 __isoc23_vwscanf F GLIBC_2.38 __isoc23_wcstoimax F GLIBC_2.38 __isoc23_wcstol F GLIBC_2.38 __isoc23_wcstol_l F @@ -2750,6 +2761,19 @@ GLIBC_2.38 __isoc23_wcstoul_l F GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F +GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __nldbl___isoc23_fscanf F +GLIBC_2.38 __nldbl___isoc23_fwscanf F +GLIBC_2.38 __nldbl___isoc23_scanf F +GLIBC_2.38 __nldbl___isoc23_sscanf F +GLIBC_2.38 __nldbl___isoc23_swscanf F +GLIBC_2.38 __nldbl___isoc23_vfscanf F +GLIBC_2.38 __nldbl___isoc23_vfwscanf F +GLIBC_2.38 __nldbl___isoc23_vscanf F +GLIBC_2.38 __nldbl___isoc23_vsscanf F +GLIBC_2.38 __nldbl___isoc23_vswscanf F +GLIBC_2.38 __nldbl___isoc23_vwscanf F +GLIBC_2.38 __nldbl___isoc23_wscanf F GLIBC_2.4 _IO_fprintf F GLIBC_2.4 _IO_printf F GLIBC_2.4 _IO_sprintf F diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist index 50874e92fc..aa874b88d0 100644 --- a/sysdeps/unix/sysv/linux/arc/libc.abilist +++ b/sysdeps/unix/sysv/linux/arc/libc.abilist @@ -2394,6 +2394,10 @@ GLIBC_2.36 pidfd_open F GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F +GLIBC_2.38 __isoc23_fscanf F +GLIBC_2.38 __isoc23_fwscanf F +GLIBC_2.38 __isoc23_scanf F +GLIBC_2.38 __isoc23_sscanf F GLIBC_2.38 __isoc23_strtoimax F GLIBC_2.38 __isoc23_strtol F GLIBC_2.38 __isoc23_strtol_l F @@ -2404,6 +2408,13 @@ GLIBC_2.38 __isoc23_strtoul_l F GLIBC_2.38 __isoc23_strtoull F GLIBC_2.38 __isoc23_strtoull_l F GLIBC_2.38 __isoc23_strtoumax F +GLIBC_2.38 __isoc23_swscanf F +GLIBC_2.38 __isoc23_vfscanf F +GLIBC_2.38 __isoc23_vfwscanf F +GLIBC_2.38 __isoc23_vscanf F +GLIBC_2.38 __isoc23_vsscanf F +GLIBC_2.38 __isoc23_vswscanf F +GLIBC_2.38 __isoc23_vwscanf F GLIBC_2.38 __isoc23_wcstoimax F GLIBC_2.38 __isoc23_wcstol F GLIBC_2.38 __isoc23_wcstol_l F @@ -2414,3 +2425,4 @@ GLIBC_2.38 __isoc23_wcstoul_l F GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F +GLIBC_2.38 __isoc23_wscanf F diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist index 544b5b2741..afbd57da6f 100644 --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist @@ -514,6 +514,10 @@ GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F GLIBC_2.37 __ppoll64_chk F +GLIBC_2.38 __isoc23_fscanf F +GLIBC_2.38 __isoc23_fwscanf F +GLIBC_2.38 __isoc23_scanf F +GLIBC_2.38 __isoc23_sscanf F GLIBC_2.38 __isoc23_strtoimax F GLIBC_2.38 __isoc23_strtol F GLIBC_2.38 __isoc23_strtol_l F @@ -524,6 +528,13 @@ GLIBC_2.38 __isoc23_strtoul_l F GLIBC_2.38 __isoc23_strtoull F GLIBC_2.38 __isoc23_strtoull_l F GLIBC_2.38 __isoc23_strtoumax F +GLIBC_2.38 __isoc23_swscanf F +GLIBC_2.38 __isoc23_vfscanf F +GLIBC_2.38 __isoc23_vfwscanf F +GLIBC_2.38 __isoc23_vscanf F +GLIBC_2.38 __isoc23_vsscanf F +GLIBC_2.38 __isoc23_vswscanf F +GLIBC_2.38 __isoc23_vwscanf F GLIBC_2.38 __isoc23_wcstoimax F GLIBC_2.38 __isoc23_wcstol F GLIBC_2.38 __isoc23_wcstol_l F @@ -534,6 +545,7 @@ GLIBC_2.38 __isoc23_wcstoul_l F GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F +GLIBC_2.38 __isoc23_wscanf F GLIBC_2.4 _Exit F GLIBC_2.4 _IO_2_1_stderr_ D 0xa0 GLIBC_2.4 _IO_2_1_stdin_ D 0xa0 diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist index da532a0191..e7364cd3fe 100644 --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist @@ -511,6 +511,10 @@ GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F GLIBC_2.37 __ppoll64_chk F +GLIBC_2.38 __isoc23_fscanf F +GLIBC_2.38 __isoc23_fwscanf F +GLIBC_2.38 __isoc23_scanf F +GLIBC_2.38 __isoc23_sscanf F GLIBC_2.38 __isoc23_strtoimax F GLIBC_2.38 __isoc23_strtol F GLIBC_2.38 __isoc23_strtol_l F @@ -521,6 +525,13 @@ GLIBC_2.38 __isoc23_strtoul_l F GLIBC_2.38 __isoc23_strtoull F GLIBC_2.38 __isoc23_strtoull_l F GLIBC_2.38 __isoc23_strtoumax F +GLIBC_2.38 __isoc23_swscanf F +GLIBC_2.38 __isoc23_vfscanf F +GLIBC_2.38 __isoc23_vfwscanf F +GLIBC_2.38 __isoc23_vscanf F +GLIBC_2.38 __isoc23_vsscanf F +GLIBC_2.38 __isoc23_vswscanf F +GLIBC_2.38 __isoc23_vwscanf F GLIBC_2.38 __isoc23_wcstoimax F GLIBC_2.38 __isoc23_wcstol F GLIBC_2.38 __isoc23_wcstol_l F @@ -531,6 +542,7 @@ GLIBC_2.38 __isoc23_wcstoul_l F GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F +GLIBC_2.38 __isoc23_wscanf F GLIBC_2.4 _Exit F GLIBC_2.4 _IO_2_1_stderr_ D 0xa0 GLIBC_2.4 _IO_2_1_stdin_ D 0xa0 diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist index 6c74a60d69..913fa59215 100644 --- a/sysdeps/unix/sysv/linux/csky/libc.abilist +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist @@ -2670,6 +2670,10 @@ GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F GLIBC_2.37 __ppoll64_chk F +GLIBC_2.38 __isoc23_fscanf F +GLIBC_2.38 __isoc23_fwscanf F +GLIBC_2.38 __isoc23_scanf F +GLIBC_2.38 __isoc23_sscanf F GLIBC_2.38 __isoc23_strtoimax F GLIBC_2.38 __isoc23_strtol F GLIBC_2.38 __isoc23_strtol_l F @@ -2680,6 +2684,13 @@ GLIBC_2.38 __isoc23_strtoul_l F GLIBC_2.38 __isoc23_strtoull F GLIBC_2.38 __isoc23_strtoull_l F GLIBC_2.38 __isoc23_strtoumax F +GLIBC_2.38 __isoc23_swscanf F +GLIBC_2.38 __isoc23_vfscanf F +GLIBC_2.38 __isoc23_vfwscanf F +GLIBC_2.38 __isoc23_vscanf F +GLIBC_2.38 __isoc23_vsscanf F +GLIBC_2.38 __isoc23_vswscanf F +GLIBC_2.38 __isoc23_vwscanf F GLIBC_2.38 __isoc23_wcstoimax F GLIBC_2.38 __isoc23_wcstol F GLIBC_2.38 __isoc23_wcstol_l F @@ -2690,3 +2701,4 @@ GLIBC_2.38 __isoc23_wcstoul_l F GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F +GLIBC_2.38 __isoc23_wscanf F diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist index 13d30e646f..43af3a9811 100644 --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist @@ -2619,6 +2619,10 @@ GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F GLIBC_2.37 __ppoll64_chk F +GLIBC_2.38 __isoc23_fscanf F +GLIBC_2.38 __isoc23_fwscanf F +GLIBC_2.38 __isoc23_scanf F +GLIBC_2.38 __isoc23_sscanf F GLIBC_2.38 __isoc23_strtoimax F GLIBC_2.38 __isoc23_strtol F GLIBC_2.38 __isoc23_strtol_l F @@ -2629,6 +2633,13 @@ GLIBC_2.38 __isoc23_strtoul_l F GLIBC_2.38 __isoc23_strtoull F GLIBC_2.38 __isoc23_strtoull_l F GLIBC_2.38 __isoc23_strtoumax F +GLIBC_2.38 __isoc23_swscanf F +GLIBC_2.38 __isoc23_vfscanf F +GLIBC_2.38 __isoc23_vfwscanf F +GLIBC_2.38 __isoc23_vscanf F +GLIBC_2.38 __isoc23_vsscanf F +GLIBC_2.38 __isoc23_vswscanf F +GLIBC_2.38 __isoc23_vwscanf F GLIBC_2.38 __isoc23_wcstoimax F GLIBC_2.38 __isoc23_wcstol F GLIBC_2.38 __isoc23_wcstol_l F @@ -2639,6 +2650,7 @@ GLIBC_2.38 __isoc23_wcstoul_l F GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F +GLIBC_2.38 __isoc23_wscanf F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist index f5dfa2a20e..af72f8fab0 100644 --- a/sysdeps/unix/sysv/linux/i386/libc.abilist +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist @@ -2803,6 +2803,10 @@ GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F GLIBC_2.37 __ppoll64_chk F +GLIBC_2.38 __isoc23_fscanf F +GLIBC_2.38 __isoc23_fwscanf F +GLIBC_2.38 __isoc23_scanf F +GLIBC_2.38 __isoc23_sscanf F GLIBC_2.38 __isoc23_strtoimax F GLIBC_2.38 __isoc23_strtol F GLIBC_2.38 __isoc23_strtol_l F @@ -2813,6 +2817,13 @@ GLIBC_2.38 __isoc23_strtoul_l F GLIBC_2.38 __isoc23_strtoull F GLIBC_2.38 __isoc23_strtoull_l F GLIBC_2.38 __isoc23_strtoumax F +GLIBC_2.38 __isoc23_swscanf F +GLIBC_2.38 __isoc23_vfscanf F +GLIBC_2.38 __isoc23_vfwscanf F +GLIBC_2.38 __isoc23_vscanf F +GLIBC_2.38 __isoc23_vsscanf F +GLIBC_2.38 __isoc23_vswscanf F +GLIBC_2.38 __isoc23_vwscanf F GLIBC_2.38 __isoc23_wcstoimax F GLIBC_2.38 __isoc23_wcstol F GLIBC_2.38 __isoc23_wcstol_l F @@ -2823,6 +2834,7 @@ GLIBC_2.38 __isoc23_wcstoul_l F GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F +GLIBC_2.38 __isoc23_wscanf F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist index 58f1526030..48cbb0fa50 100644 --- a/sysdeps/unix/sysv/linux/ia64/libc.abilist +++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist @@ -2568,6 +2568,10 @@ GLIBC_2.36 pidfd_open F GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F +GLIBC_2.38 __isoc23_fscanf F +GLIBC_2.38 __isoc23_fwscanf F +GLIBC_2.38 __isoc23_scanf F +GLIBC_2.38 __isoc23_sscanf F GLIBC_2.38 __isoc23_strtoimax F GLIBC_2.38 __isoc23_strtol F GLIBC_2.38 __isoc23_strtol_l F @@ -2578,6 +2582,13 @@ GLIBC_2.38 __isoc23_strtoul_l F GLIBC_2.38 __isoc23_strtoull F GLIBC_2.38 __isoc23_strtoull_l F GLIBC_2.38 __isoc23_strtoumax F +GLIBC_2.38 __isoc23_swscanf F +GLIBC_2.38 __isoc23_vfscanf F +GLIBC_2.38 __isoc23_vfwscanf F +GLIBC_2.38 __isoc23_vscanf F +GLIBC_2.38 __isoc23_vsscanf F +GLIBC_2.38 __isoc23_vswscanf F +GLIBC_2.38 __isoc23_vwscanf F GLIBC_2.38 __isoc23_wcstoimax F GLIBC_2.38 __isoc23_wcstol F GLIBC_2.38 __isoc23_wcstol_l F @@ -2588,6 +2599,7 @@ GLIBC_2.38 __isoc23_wcstoul_l F GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F +GLIBC_2.38 __isoc23_wscanf F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist b/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist index 46ce2437fe..c15884bb0b 100644 --- a/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist +++ b/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist @@ -2154,6 +2154,10 @@ GLIBC_2.36 wprintf F GLIBC_2.36 write F GLIBC_2.36 writev F GLIBC_2.36 wscanf F +GLIBC_2.38 __isoc23_fscanf F +GLIBC_2.38 __isoc23_fwscanf F +GLIBC_2.38 __isoc23_scanf F +GLIBC_2.38 __isoc23_sscanf F GLIBC_2.38 __isoc23_strtoimax F GLIBC_2.38 __isoc23_strtol F GLIBC_2.38 __isoc23_strtol_l F @@ -2164,6 +2168,13 @@ GLIBC_2.38 __isoc23_strtoul_l F GLIBC_2.38 __isoc23_strtoull F GLIBC_2.38 __isoc23_strtoull_l F GLIBC_2.38 __isoc23_strtoumax F +GLIBC_2.38 __isoc23_swscanf F +GLIBC_2.38 __isoc23_vfscanf F +GLIBC_2.38 __isoc23_vfwscanf F +GLIBC_2.38 __isoc23_vscanf F +GLIBC_2.38 __isoc23_vsscanf F +GLIBC_2.38 __isoc23_vswscanf F +GLIBC_2.38 __isoc23_vwscanf F GLIBC_2.38 __isoc23_wcstoimax F GLIBC_2.38 __isoc23_wcstol F GLIBC_2.38 __isoc23_wcstol_l F @@ -2174,3 +2185,4 @@ GLIBC_2.38 __isoc23_wcstoul_l F GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F +GLIBC_2.38 __isoc23_wscanf F diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist index f34085ce35..3738db81df 100644 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist @@ -515,6 +515,10 @@ GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F GLIBC_2.37 __ppoll64_chk F +GLIBC_2.38 __isoc23_fscanf F +GLIBC_2.38 __isoc23_fwscanf F +GLIBC_2.38 __isoc23_scanf F +GLIBC_2.38 __isoc23_sscanf F GLIBC_2.38 __isoc23_strtoimax F GLIBC_2.38 __isoc23_strtol F GLIBC_2.38 __isoc23_strtol_l F @@ -525,6 +529,13 @@ GLIBC_2.38 __isoc23_strtoul_l F GLIBC_2.38 __isoc23_strtoull F GLIBC_2.38 __isoc23_strtoull_l F GLIBC_2.38 __isoc23_strtoumax F +GLIBC_2.38 __isoc23_swscanf F +GLIBC_2.38 __isoc23_vfscanf F +GLIBC_2.38 __isoc23_vfwscanf F +GLIBC_2.38 __isoc23_vscanf F +GLIBC_2.38 __isoc23_vsscanf F +GLIBC_2.38 __isoc23_vswscanf F +GLIBC_2.38 __isoc23_vwscanf F GLIBC_2.38 __isoc23_wcstoimax F GLIBC_2.38 __isoc23_wcstol F GLIBC_2.38 __isoc23_wcstol_l F @@ -535,6 +546,7 @@ GLIBC_2.38 __isoc23_wcstoul_l F GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F +GLIBC_2.38 __isoc23_wscanf F GLIBC_2.4 _Exit F GLIBC_2.4 _IO_2_1_stderr_ D 0x98 GLIBC_2.4 _IO_2_1_stdin_ D 0x98 diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist index 349377d154..ed13627752 100644 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist @@ -2746,6 +2746,10 @@ GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F GLIBC_2.37 __ppoll64_chk F +GLIBC_2.38 __isoc23_fscanf F +GLIBC_2.38 __isoc23_fwscanf F +GLIBC_2.38 __isoc23_scanf F +GLIBC_2.38 __isoc23_sscanf F GLIBC_2.38 __isoc23_strtoimax F GLIBC_2.38 __isoc23_strtol F GLIBC_2.38 __isoc23_strtol_l F @@ -2756,6 +2760,13 @@ GLIBC_2.38 __isoc23_strtoul_l F GLIBC_2.38 __isoc23_strtoull F GLIBC_2.38 __isoc23_strtoull_l F GLIBC_2.38 __isoc23_strtoumax F +GLIBC_2.38 __isoc23_swscanf F +GLIBC_2.38 __isoc23_vfscanf F +GLIBC_2.38 __isoc23_vfwscanf F +GLIBC_2.38 __isoc23_vscanf F +GLIBC_2.38 __isoc23_vsscanf F +GLIBC_2.38 __isoc23_vswscanf F +GLIBC_2.38 __isoc23_vwscanf F GLIBC_2.38 __isoc23_wcstoimax F GLIBC_2.38 __isoc23_wcstol F GLIBC_2.38 __isoc23_wcstol_l F @@ -2766,6 +2777,7 @@ GLIBC_2.38 __isoc23_wcstoul_l F GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F +GLIBC_2.38 __isoc23_wscanf F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist index 38e7fb9b2a..8357738621 100644 --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist @@ -2719,6 +2719,10 @@ GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F GLIBC_2.37 __ppoll64_chk F +GLIBC_2.38 __isoc23_fscanf F +GLIBC_2.38 __isoc23_fwscanf F +GLIBC_2.38 __isoc23_scanf F +GLIBC_2.38 __isoc23_sscanf F GLIBC_2.38 __isoc23_strtoimax F GLIBC_2.38 __isoc23_strtol F GLIBC_2.38 __isoc23_strtol_l F @@ -2729,6 +2733,13 @@ GLIBC_2.38 __isoc23_strtoul_l F GLIBC_2.38 __isoc23_strtoull F GLIBC_2.38 __isoc23_strtoull_l F GLIBC_2.38 __isoc23_strtoumax F +GLIBC_2.38 __isoc23_swscanf F +GLIBC_2.38 __isoc23_vfscanf F +GLIBC_2.38 __isoc23_vfwscanf F +GLIBC_2.38 __isoc23_vscanf F +GLIBC_2.38 __isoc23_vsscanf F +GLIBC_2.38 __isoc23_vswscanf F +GLIBC_2.38 __isoc23_vwscanf F GLIBC_2.38 __isoc23_wcstoimax F GLIBC_2.38 __isoc23_wcstol F GLIBC_2.38 __isoc23_wcstol_l F @@ -2739,3 +2750,4 @@ GLIBC_2.38 __isoc23_wcstoul_l F GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F +GLIBC_2.38 __isoc23_wscanf F diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist index ec4ca27b75..58c5da583d 100644 --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist @@ -2716,6 +2716,10 @@ GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F GLIBC_2.37 __ppoll64_chk F +GLIBC_2.38 __isoc23_fscanf F +GLIBC_2.38 __isoc23_fwscanf F +GLIBC_2.38 __isoc23_scanf F +GLIBC_2.38 __isoc23_sscanf F GLIBC_2.38 __isoc23_strtoimax F GLIBC_2.38 __isoc23_strtol F GLIBC_2.38 __isoc23_strtol_l F @@ -2726,6 +2730,13 @@ GLIBC_2.38 __isoc23_strtoul_l F GLIBC_2.38 __isoc23_strtoull F GLIBC_2.38 __isoc23_strtoull_l F GLIBC_2.38 __isoc23_strtoumax F +GLIBC_2.38 __isoc23_swscanf F +GLIBC_2.38 __isoc23_vfscanf F +GLIBC_2.38 __isoc23_vfwscanf F +GLIBC_2.38 __isoc23_vscanf F +GLIBC_2.38 __isoc23_vsscanf F +GLIBC_2.38 __isoc23_vswscanf F +GLIBC_2.38 __isoc23_vwscanf F GLIBC_2.38 __isoc23_wcstoimax F GLIBC_2.38 __isoc23_wcstol F GLIBC_2.38 __isoc23_wcstol_l F @@ -2736,3 +2747,4 @@ GLIBC_2.38 __isoc23_wcstoul_l F GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F +GLIBC_2.38 __isoc23_wscanf F diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist index bd3f3404fb..d3741945cd 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist @@ -2711,6 +2711,10 @@ GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F GLIBC_2.37 __ppoll64_chk F +GLIBC_2.38 __isoc23_fscanf F +GLIBC_2.38 __isoc23_fwscanf F +GLIBC_2.38 __isoc23_scanf F +GLIBC_2.38 __isoc23_sscanf F GLIBC_2.38 __isoc23_strtoimax F GLIBC_2.38 __isoc23_strtol F GLIBC_2.38 __isoc23_strtol_l F @@ -2721,6 +2725,13 @@ GLIBC_2.38 __isoc23_strtoul_l F GLIBC_2.38 __isoc23_strtoull F GLIBC_2.38 __isoc23_strtoull_l F GLIBC_2.38 __isoc23_strtoumax F +GLIBC_2.38 __isoc23_swscanf F +GLIBC_2.38 __isoc23_vfscanf F +GLIBC_2.38 __isoc23_vfwscanf F +GLIBC_2.38 __isoc23_vscanf F +GLIBC_2.38 __isoc23_vsscanf F +GLIBC_2.38 __isoc23_vswscanf F +GLIBC_2.38 __isoc23_vwscanf F GLIBC_2.38 __isoc23_wcstoimax F GLIBC_2.38 __isoc23_wcstol F GLIBC_2.38 __isoc23_wcstol_l F @@ -2731,6 +2742,7 @@ GLIBC_2.38 __isoc23_wcstoul_l F GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F +GLIBC_2.38 __isoc23_wscanf F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist index 9b09fab6ec..5319fdc204 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist @@ -2709,6 +2709,10 @@ GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F GLIBC_2.37 __ppoll64_chk F +GLIBC_2.38 __isoc23_fscanf F +GLIBC_2.38 __isoc23_fwscanf F +GLIBC_2.38 __isoc23_scanf F +GLIBC_2.38 __isoc23_sscanf F GLIBC_2.38 __isoc23_strtoimax F GLIBC_2.38 __isoc23_strtol F GLIBC_2.38 __isoc23_strtol_l F @@ -2719,6 +2723,13 @@ GLIBC_2.38 __isoc23_strtoul_l F GLIBC_2.38 __isoc23_strtoull F GLIBC_2.38 __isoc23_strtoull_l F GLIBC_2.38 __isoc23_strtoumax F +GLIBC_2.38 __isoc23_swscanf F +GLIBC_2.38 __isoc23_vfscanf F +GLIBC_2.38 __isoc23_vfwscanf F +GLIBC_2.38 __isoc23_vscanf F +GLIBC_2.38 __isoc23_vsscanf F +GLIBC_2.38 __isoc23_vswscanf F +GLIBC_2.38 __isoc23_vwscanf F GLIBC_2.38 __isoc23_wcstoimax F GLIBC_2.38 __isoc23_wcstol F GLIBC_2.38 __isoc23_wcstol_l F @@ -2729,6 +2740,7 @@ GLIBC_2.38 __isoc23_wcstoul_l F GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F +GLIBC_2.38 __isoc23_wscanf F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist index 3b8f2b8ca3..1743ea6eb9 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist @@ -2717,6 +2717,10 @@ GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F GLIBC_2.37 __ppoll64_chk F +GLIBC_2.38 __isoc23_fscanf F +GLIBC_2.38 __isoc23_fwscanf F +GLIBC_2.38 __isoc23_scanf F +GLIBC_2.38 __isoc23_sscanf F GLIBC_2.38 __isoc23_strtoimax F GLIBC_2.38 __isoc23_strtol F GLIBC_2.38 __isoc23_strtol_l F @@ -2727,6 +2731,13 @@ GLIBC_2.38 __isoc23_strtoul_l F GLIBC_2.38 __isoc23_strtoull F GLIBC_2.38 __isoc23_strtoull_l F GLIBC_2.38 __isoc23_strtoumax F +GLIBC_2.38 __isoc23_swscanf F +GLIBC_2.38 __isoc23_vfscanf F +GLIBC_2.38 __isoc23_vfwscanf F +GLIBC_2.38 __isoc23_vscanf F +GLIBC_2.38 __isoc23_vsscanf F +GLIBC_2.38 __isoc23_vswscanf F +GLIBC_2.38 __isoc23_vwscanf F GLIBC_2.38 __isoc23_wcstoimax F GLIBC_2.38 __isoc23_wcstol F GLIBC_2.38 __isoc23_wcstol_l F @@ -2737,6 +2748,7 @@ GLIBC_2.38 __isoc23_wcstoul_l F GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F +GLIBC_2.38 __isoc23_wscanf F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist index 497553414d..9b1f53c6ac 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist @@ -2619,6 +2619,10 @@ GLIBC_2.36 pidfd_open F GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F +GLIBC_2.38 __isoc23_fscanf F +GLIBC_2.38 __isoc23_fwscanf F +GLIBC_2.38 __isoc23_scanf F +GLIBC_2.38 __isoc23_sscanf F GLIBC_2.38 __isoc23_strtoimax F GLIBC_2.38 __isoc23_strtol F GLIBC_2.38 __isoc23_strtol_l F @@ -2629,6 +2633,13 @@ GLIBC_2.38 __isoc23_strtoul_l F GLIBC_2.38 __isoc23_strtoull F GLIBC_2.38 __isoc23_strtoull_l F GLIBC_2.38 __isoc23_strtoumax F +GLIBC_2.38 __isoc23_swscanf F +GLIBC_2.38 __isoc23_vfscanf F +GLIBC_2.38 __isoc23_vfwscanf F +GLIBC_2.38 __isoc23_vscanf F +GLIBC_2.38 __isoc23_vsscanf F +GLIBC_2.38 __isoc23_vswscanf F +GLIBC_2.38 __isoc23_vwscanf F GLIBC_2.38 __isoc23_wcstoimax F GLIBC_2.38 __isoc23_wcstol F GLIBC_2.38 __isoc23_wcstol_l F @@ -2639,6 +2650,7 @@ GLIBC_2.38 __isoc23_wcstoul_l F GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F +GLIBC_2.38 __isoc23_wscanf F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist index f67f241498..ae1c6ca1b5 100644 --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist @@ -2758,6 +2758,10 @@ GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F GLIBC_2.37 __ppoll64_chk F +GLIBC_2.38 __isoc23_fscanf F +GLIBC_2.38 __isoc23_fwscanf F +GLIBC_2.38 __isoc23_scanf F +GLIBC_2.38 __isoc23_sscanf F GLIBC_2.38 __isoc23_strtoimax F GLIBC_2.38 __isoc23_strtol F GLIBC_2.38 __isoc23_strtol_l F @@ -2768,6 +2772,13 @@ GLIBC_2.38 __isoc23_strtoul_l F GLIBC_2.38 __isoc23_strtoull F GLIBC_2.38 __isoc23_strtoull_l F GLIBC_2.38 __isoc23_strtoumax F +GLIBC_2.38 __isoc23_swscanf F +GLIBC_2.38 __isoc23_vfscanf F +GLIBC_2.38 __isoc23_vfwscanf F +GLIBC_2.38 __isoc23_vscanf F +GLIBC_2.38 __isoc23_vsscanf F +GLIBC_2.38 __isoc23_vswscanf F +GLIBC_2.38 __isoc23_vwscanf F GLIBC_2.38 __isoc23_wcstoimax F GLIBC_2.38 __isoc23_wcstol F GLIBC_2.38 __isoc23_wcstol_l F @@ -2778,3 +2789,4 @@ GLIBC_2.38 __isoc23_wcstoul_l F GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F +GLIBC_2.38 __isoc23_wscanf F diff --git a/sysdeps/unix/sysv/linux/or1k/libc.abilist b/sysdeps/unix/sysv/linux/or1k/libc.abilist index a59a58f44c..a7c572c947 100644 --- a/sysdeps/unix/sysv/linux/or1k/libc.abilist +++ b/sysdeps/unix/sysv/linux/or1k/libc.abilist @@ -2140,6 +2140,10 @@ GLIBC_2.36 pidfd_open F GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F +GLIBC_2.38 __isoc23_fscanf F +GLIBC_2.38 __isoc23_fwscanf F +GLIBC_2.38 __isoc23_scanf F +GLIBC_2.38 __isoc23_sscanf F GLIBC_2.38 __isoc23_strtoimax F GLIBC_2.38 __isoc23_strtol F GLIBC_2.38 __isoc23_strtol_l F @@ -2150,6 +2154,13 @@ GLIBC_2.38 __isoc23_strtoul_l F GLIBC_2.38 __isoc23_strtoull F GLIBC_2.38 __isoc23_strtoull_l F GLIBC_2.38 __isoc23_strtoumax F +GLIBC_2.38 __isoc23_swscanf F +GLIBC_2.38 __isoc23_vfscanf F +GLIBC_2.38 __isoc23_vfwscanf F +GLIBC_2.38 __isoc23_vscanf F +GLIBC_2.38 __isoc23_vsscanf F +GLIBC_2.38 __isoc23_vswscanf F +GLIBC_2.38 __isoc23_vwscanf F GLIBC_2.38 __isoc23_wcstoimax F GLIBC_2.38 __isoc23_wcstol F GLIBC_2.38 __isoc23_wcstol_l F @@ -2160,3 +2171,4 @@ GLIBC_2.38 __isoc23_wcstoul_l F GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F +GLIBC_2.38 __isoc23_wscanf F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist index a1bcf79955..074fa031a7 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist @@ -2773,6 +2773,10 @@ GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F GLIBC_2.37 __ppoll64_chk F +GLIBC_2.38 __isoc23_fscanf F +GLIBC_2.38 __isoc23_fwscanf F +GLIBC_2.38 __isoc23_scanf F +GLIBC_2.38 __isoc23_sscanf F GLIBC_2.38 __isoc23_strtoimax F GLIBC_2.38 __isoc23_strtol F GLIBC_2.38 __isoc23_strtol_l F @@ -2783,6 +2787,13 @@ GLIBC_2.38 __isoc23_strtoul_l F GLIBC_2.38 __isoc23_strtoull F GLIBC_2.38 __isoc23_strtoull_l F GLIBC_2.38 __isoc23_strtoumax F +GLIBC_2.38 __isoc23_swscanf F +GLIBC_2.38 __isoc23_vfscanf F +GLIBC_2.38 __isoc23_vfwscanf F +GLIBC_2.38 __isoc23_vscanf F +GLIBC_2.38 __isoc23_vsscanf F +GLIBC_2.38 __isoc23_vswscanf F +GLIBC_2.38 __isoc23_vwscanf F GLIBC_2.38 __isoc23_wcstoimax F GLIBC_2.38 __isoc23_wcstol F GLIBC_2.38 __isoc23_wcstol_l F @@ -2793,6 +2804,19 @@ GLIBC_2.38 __isoc23_wcstoul_l F GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F +GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __nldbl___isoc23_fscanf F +GLIBC_2.38 __nldbl___isoc23_fwscanf F +GLIBC_2.38 __nldbl___isoc23_scanf F +GLIBC_2.38 __nldbl___isoc23_sscanf F +GLIBC_2.38 __nldbl___isoc23_swscanf F +GLIBC_2.38 __nldbl___isoc23_vfscanf F +GLIBC_2.38 __nldbl___isoc23_vfwscanf F +GLIBC_2.38 __nldbl___isoc23_vscanf F +GLIBC_2.38 __nldbl___isoc23_vsscanf F +GLIBC_2.38 __nldbl___isoc23_vswscanf F +GLIBC_2.38 __nldbl___isoc23_vwscanf F +GLIBC_2.38 __nldbl___isoc23_wscanf F GLIBC_2.4 _IO_fprintf F GLIBC_2.4 _IO_printf F GLIBC_2.4 _IO_sprintf F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist index c0f28aea45..dfcb4bd2d5 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist @@ -2806,6 +2806,10 @@ GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F GLIBC_2.37 __ppoll64_chk F +GLIBC_2.38 __isoc23_fscanf F +GLIBC_2.38 __isoc23_fwscanf F +GLIBC_2.38 __isoc23_scanf F +GLIBC_2.38 __isoc23_sscanf F GLIBC_2.38 __isoc23_strtoimax F GLIBC_2.38 __isoc23_strtol F GLIBC_2.38 __isoc23_strtol_l F @@ -2816,6 +2820,13 @@ GLIBC_2.38 __isoc23_strtoul_l F GLIBC_2.38 __isoc23_strtoull F GLIBC_2.38 __isoc23_strtoull_l F GLIBC_2.38 __isoc23_strtoumax F +GLIBC_2.38 __isoc23_swscanf F +GLIBC_2.38 __isoc23_vfscanf F +GLIBC_2.38 __isoc23_vfwscanf F +GLIBC_2.38 __isoc23_vscanf F +GLIBC_2.38 __isoc23_vsscanf F +GLIBC_2.38 __isoc23_vswscanf F +GLIBC_2.38 __isoc23_vwscanf F GLIBC_2.38 __isoc23_wcstoimax F GLIBC_2.38 __isoc23_wcstol F GLIBC_2.38 __isoc23_wcstol_l F @@ -2826,6 +2837,19 @@ GLIBC_2.38 __isoc23_wcstoul_l F GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F +GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __nldbl___isoc23_fscanf F +GLIBC_2.38 __nldbl___isoc23_fwscanf F +GLIBC_2.38 __nldbl___isoc23_scanf F +GLIBC_2.38 __nldbl___isoc23_sscanf F +GLIBC_2.38 __nldbl___isoc23_swscanf F +GLIBC_2.38 __nldbl___isoc23_vfscanf F +GLIBC_2.38 __nldbl___isoc23_vfwscanf F +GLIBC_2.38 __nldbl___isoc23_vscanf F +GLIBC_2.38 __nldbl___isoc23_vsscanf F +GLIBC_2.38 __nldbl___isoc23_vswscanf F +GLIBC_2.38 __nldbl___isoc23_vwscanf F +GLIBC_2.38 __nldbl___isoc23_wscanf F GLIBC_2.4 _IO_fprintf F GLIBC_2.4 _IO_printf F GLIBC_2.4 _IO_sprintf F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist index 6b4459964f..63bbccf3f9 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist @@ -2527,6 +2527,10 @@ GLIBC_2.36 pidfd_open F GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F +GLIBC_2.38 __isoc23_fscanf F +GLIBC_2.38 __isoc23_fwscanf F +GLIBC_2.38 __isoc23_scanf F +GLIBC_2.38 __isoc23_sscanf F GLIBC_2.38 __isoc23_strtoimax F GLIBC_2.38 __isoc23_strtol F GLIBC_2.38 __isoc23_strtol_l F @@ -2537,6 +2541,13 @@ GLIBC_2.38 __isoc23_strtoul_l F GLIBC_2.38 __isoc23_strtoull F GLIBC_2.38 __isoc23_strtoull_l F GLIBC_2.38 __isoc23_strtoumax F +GLIBC_2.38 __isoc23_swscanf F +GLIBC_2.38 __isoc23_vfscanf F +GLIBC_2.38 __isoc23_vfwscanf F +GLIBC_2.38 __isoc23_vscanf F +GLIBC_2.38 __isoc23_vsscanf F +GLIBC_2.38 __isoc23_vswscanf F +GLIBC_2.38 __isoc23_vwscanf F GLIBC_2.38 __isoc23_wcstoimax F GLIBC_2.38 __isoc23_wcstol F GLIBC_2.38 __isoc23_wcstol_l F @@ -2547,6 +2558,19 @@ GLIBC_2.38 __isoc23_wcstoul_l F GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F +GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __nldbl___isoc23_fscanf F +GLIBC_2.38 __nldbl___isoc23_fwscanf F +GLIBC_2.38 __nldbl___isoc23_scanf F +GLIBC_2.38 __nldbl___isoc23_sscanf F +GLIBC_2.38 __nldbl___isoc23_swscanf F +GLIBC_2.38 __nldbl___isoc23_vfscanf F +GLIBC_2.38 __nldbl___isoc23_vfwscanf F +GLIBC_2.38 __nldbl___isoc23_vscanf F +GLIBC_2.38 __nldbl___isoc23_vsscanf F +GLIBC_2.38 __nldbl___isoc23_vswscanf F +GLIBC_2.38 __nldbl___isoc23_vwscanf F +GLIBC_2.38 __nldbl___isoc23_wscanf F GLIBC_2.4 _IO_fprintf F GLIBC_2.4 _IO_printf F GLIBC_2.4 _IO_sprintf F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist index e90fb502d2..ab85fd61ef 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist @@ -2829,6 +2829,14 @@ GLIBC_2.36 pidfd_open F GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F +GLIBC_2.38 __isoc23_fscanf F +GLIBC_2.38 __isoc23_fscanfieee128 F +GLIBC_2.38 __isoc23_fwscanf F +GLIBC_2.38 __isoc23_fwscanfieee128 F +GLIBC_2.38 __isoc23_scanf F +GLIBC_2.38 __isoc23_scanfieee128 F +GLIBC_2.38 __isoc23_sscanf F +GLIBC_2.38 __isoc23_sscanfieee128 F GLIBC_2.38 __isoc23_strtoimax F GLIBC_2.38 __isoc23_strtol F GLIBC_2.38 __isoc23_strtol_l F @@ -2839,6 +2847,20 @@ GLIBC_2.38 __isoc23_strtoul_l F GLIBC_2.38 __isoc23_strtoull F GLIBC_2.38 __isoc23_strtoull_l F GLIBC_2.38 __isoc23_strtoumax F +GLIBC_2.38 __isoc23_swscanf F +GLIBC_2.38 __isoc23_swscanfieee128 F +GLIBC_2.38 __isoc23_vfscanf F +GLIBC_2.38 __isoc23_vfscanfieee128 F +GLIBC_2.38 __isoc23_vfwscanf F +GLIBC_2.38 __isoc23_vfwscanfieee128 F +GLIBC_2.38 __isoc23_vscanf F +GLIBC_2.38 __isoc23_vscanfieee128 F +GLIBC_2.38 __isoc23_vsscanf F +GLIBC_2.38 __isoc23_vsscanfieee128 F +GLIBC_2.38 __isoc23_vswscanf F +GLIBC_2.38 __isoc23_vswscanfieee128 F +GLIBC_2.38 __isoc23_vwscanf F +GLIBC_2.38 __isoc23_vwscanfieee128 F GLIBC_2.38 __isoc23_wcstoimax F GLIBC_2.38 __isoc23_wcstol F GLIBC_2.38 __isoc23_wcstol_l F @@ -2849,3 +2871,17 @@ GLIBC_2.38 __isoc23_wcstoul_l F GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F +GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __isoc23_wscanfieee128 F +GLIBC_2.38 __nldbl___isoc23_fscanf F +GLIBC_2.38 __nldbl___isoc23_fwscanf F +GLIBC_2.38 __nldbl___isoc23_scanf F +GLIBC_2.38 __nldbl___isoc23_sscanf F +GLIBC_2.38 __nldbl___isoc23_swscanf F +GLIBC_2.38 __nldbl___isoc23_vfscanf F +GLIBC_2.38 __nldbl___isoc23_vfwscanf F +GLIBC_2.38 __nldbl___isoc23_vscanf F +GLIBC_2.38 __nldbl___isoc23_vsscanf F +GLIBC_2.38 __nldbl___isoc23_vswscanf F +GLIBC_2.38 __nldbl___isoc23_vwscanf F +GLIBC_2.38 __nldbl___isoc23_wscanf F diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist index 29be561b60..b716f5c763 100644 --- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist @@ -2396,6 +2396,10 @@ GLIBC_2.36 pidfd_open F GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F +GLIBC_2.38 __isoc23_fscanf F +GLIBC_2.38 __isoc23_fwscanf F +GLIBC_2.38 __isoc23_scanf F +GLIBC_2.38 __isoc23_sscanf F GLIBC_2.38 __isoc23_strtoimax F GLIBC_2.38 __isoc23_strtol F GLIBC_2.38 __isoc23_strtol_l F @@ -2406,6 +2410,13 @@ GLIBC_2.38 __isoc23_strtoul_l F GLIBC_2.38 __isoc23_strtoull F GLIBC_2.38 __isoc23_strtoull_l F GLIBC_2.38 __isoc23_strtoumax F +GLIBC_2.38 __isoc23_swscanf F +GLIBC_2.38 __isoc23_vfscanf F +GLIBC_2.38 __isoc23_vfwscanf F +GLIBC_2.38 __isoc23_vscanf F +GLIBC_2.38 __isoc23_vsscanf F +GLIBC_2.38 __isoc23_vswscanf F +GLIBC_2.38 __isoc23_vwscanf F GLIBC_2.38 __isoc23_wcstoimax F GLIBC_2.38 __isoc23_wcstol F GLIBC_2.38 __isoc23_wcstol_l F @@ -2416,3 +2427,4 @@ GLIBC_2.38 __isoc23_wcstoul_l F GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F +GLIBC_2.38 __isoc23_wscanf F diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist index 506a4e6a65..774e777b65 100644 --- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist @@ -2596,6 +2596,10 @@ GLIBC_2.36 pidfd_open F GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F +GLIBC_2.38 __isoc23_fscanf F +GLIBC_2.38 __isoc23_fwscanf F +GLIBC_2.38 __isoc23_scanf F +GLIBC_2.38 __isoc23_sscanf F GLIBC_2.38 __isoc23_strtoimax F GLIBC_2.38 __isoc23_strtol F GLIBC_2.38 __isoc23_strtol_l F @@ -2606,6 +2610,13 @@ GLIBC_2.38 __isoc23_strtoul_l F GLIBC_2.38 __isoc23_strtoull F GLIBC_2.38 __isoc23_strtoull_l F GLIBC_2.38 __isoc23_strtoumax F +GLIBC_2.38 __isoc23_swscanf F +GLIBC_2.38 __isoc23_vfscanf F +GLIBC_2.38 __isoc23_vfwscanf F +GLIBC_2.38 __isoc23_vscanf F +GLIBC_2.38 __isoc23_vsscanf F +GLIBC_2.38 __isoc23_vswscanf F +GLIBC_2.38 __isoc23_vwscanf F GLIBC_2.38 __isoc23_wcstoimax F GLIBC_2.38 __isoc23_wcstol F GLIBC_2.38 __isoc23_wcstol_l F @@ -2616,3 +2627,4 @@ GLIBC_2.38 __isoc23_wcstoul_l F GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F +GLIBC_2.38 __isoc23_wscanf F diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist index 976cd741ee..8625135c48 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist @@ -2771,6 +2771,10 @@ GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F GLIBC_2.37 __ppoll64_chk F +GLIBC_2.38 __isoc23_fscanf F +GLIBC_2.38 __isoc23_fwscanf F +GLIBC_2.38 __isoc23_scanf F +GLIBC_2.38 __isoc23_sscanf F GLIBC_2.38 __isoc23_strtoimax F GLIBC_2.38 __isoc23_strtol F GLIBC_2.38 __isoc23_strtol_l F @@ -2781,6 +2785,13 @@ GLIBC_2.38 __isoc23_strtoul_l F GLIBC_2.38 __isoc23_strtoull F GLIBC_2.38 __isoc23_strtoull_l F GLIBC_2.38 __isoc23_strtoumax F +GLIBC_2.38 __isoc23_swscanf F +GLIBC_2.38 __isoc23_vfscanf F +GLIBC_2.38 __isoc23_vfwscanf F +GLIBC_2.38 __isoc23_vscanf F +GLIBC_2.38 __isoc23_vsscanf F +GLIBC_2.38 __isoc23_vswscanf F +GLIBC_2.38 __isoc23_vwscanf F GLIBC_2.38 __isoc23_wcstoimax F GLIBC_2.38 __isoc23_wcstol F GLIBC_2.38 __isoc23_wcstol_l F @@ -2791,6 +2802,19 @@ GLIBC_2.38 __isoc23_wcstoul_l F GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F +GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __nldbl___isoc23_fscanf F +GLIBC_2.38 __nldbl___isoc23_fwscanf F +GLIBC_2.38 __nldbl___isoc23_scanf F +GLIBC_2.38 __nldbl___isoc23_sscanf F +GLIBC_2.38 __nldbl___isoc23_swscanf F +GLIBC_2.38 __nldbl___isoc23_vfscanf F +GLIBC_2.38 __nldbl___isoc23_vfwscanf F +GLIBC_2.38 __nldbl___isoc23_vscanf F +GLIBC_2.38 __nldbl___isoc23_vsscanf F +GLIBC_2.38 __nldbl___isoc23_vswscanf F +GLIBC_2.38 __nldbl___isoc23_vwscanf F +GLIBC_2.38 __nldbl___isoc23_wscanf F GLIBC_2.4 _IO_fprintf F GLIBC_2.4 _IO_printf F GLIBC_2.4 _IO_sprintf F diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist index 909ec927dc..d00c7eb262 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist @@ -2564,6 +2564,10 @@ GLIBC_2.36 pidfd_open F GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F +GLIBC_2.38 __isoc23_fscanf F +GLIBC_2.38 __isoc23_fwscanf F +GLIBC_2.38 __isoc23_scanf F +GLIBC_2.38 __isoc23_sscanf F GLIBC_2.38 __isoc23_strtoimax F GLIBC_2.38 __isoc23_strtol F GLIBC_2.38 __isoc23_strtol_l F @@ -2574,6 +2578,13 @@ GLIBC_2.38 __isoc23_strtoul_l F GLIBC_2.38 __isoc23_strtoull F GLIBC_2.38 __isoc23_strtoull_l F GLIBC_2.38 __isoc23_strtoumax F +GLIBC_2.38 __isoc23_swscanf F +GLIBC_2.38 __isoc23_vfscanf F +GLIBC_2.38 __isoc23_vfwscanf F +GLIBC_2.38 __isoc23_vscanf F +GLIBC_2.38 __isoc23_vsscanf F +GLIBC_2.38 __isoc23_vswscanf F +GLIBC_2.38 __isoc23_vwscanf F GLIBC_2.38 __isoc23_wcstoimax F GLIBC_2.38 __isoc23_wcstol F GLIBC_2.38 __isoc23_wcstol_l F @@ -2584,6 +2595,19 @@ GLIBC_2.38 __isoc23_wcstoul_l F GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F +GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __nldbl___isoc23_fscanf F +GLIBC_2.38 __nldbl___isoc23_fwscanf F +GLIBC_2.38 __nldbl___isoc23_scanf F +GLIBC_2.38 __nldbl___isoc23_sscanf F +GLIBC_2.38 __nldbl___isoc23_swscanf F +GLIBC_2.38 __nldbl___isoc23_vfscanf F +GLIBC_2.38 __nldbl___isoc23_vfwscanf F +GLIBC_2.38 __nldbl___isoc23_vscanf F +GLIBC_2.38 __nldbl___isoc23_vsscanf F +GLIBC_2.38 __nldbl___isoc23_vswscanf F +GLIBC_2.38 __nldbl___isoc23_vwscanf F +GLIBC_2.38 __nldbl___isoc23_wscanf F GLIBC_2.4 _IO_fprintf F GLIBC_2.4 _IO_printf F GLIBC_2.4 _IO_sprintf F diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist index 31a777c4aa..b63037241d 100644 --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist @@ -2626,6 +2626,10 @@ GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F GLIBC_2.37 __ppoll64_chk F +GLIBC_2.38 __isoc23_fscanf F +GLIBC_2.38 __isoc23_fwscanf F +GLIBC_2.38 __isoc23_scanf F +GLIBC_2.38 __isoc23_sscanf F GLIBC_2.38 __isoc23_strtoimax F GLIBC_2.38 __isoc23_strtol F GLIBC_2.38 __isoc23_strtol_l F @@ -2636,6 +2640,13 @@ GLIBC_2.38 __isoc23_strtoul_l F GLIBC_2.38 __isoc23_strtoull F GLIBC_2.38 __isoc23_strtoull_l F GLIBC_2.38 __isoc23_strtoumax F +GLIBC_2.38 __isoc23_swscanf F +GLIBC_2.38 __isoc23_vfscanf F +GLIBC_2.38 __isoc23_vfwscanf F +GLIBC_2.38 __isoc23_vscanf F +GLIBC_2.38 __isoc23_vsscanf F +GLIBC_2.38 __isoc23_vswscanf F +GLIBC_2.38 __isoc23_vwscanf F GLIBC_2.38 __isoc23_wcstoimax F GLIBC_2.38 __isoc23_wcstol F GLIBC_2.38 __isoc23_wcstol_l F @@ -2646,6 +2657,7 @@ GLIBC_2.38 __isoc23_wcstoul_l F GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F +GLIBC_2.38 __isoc23_wscanf F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist index 8d43e8c952..d80055617d 100644 --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist @@ -2623,6 +2623,10 @@ GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F GLIBC_2.37 __ppoll64_chk F +GLIBC_2.38 __isoc23_fscanf F +GLIBC_2.38 __isoc23_fwscanf F +GLIBC_2.38 __isoc23_scanf F +GLIBC_2.38 __isoc23_sscanf F GLIBC_2.38 __isoc23_strtoimax F GLIBC_2.38 __isoc23_strtol F GLIBC_2.38 __isoc23_strtol_l F @@ -2633,6 +2637,13 @@ GLIBC_2.38 __isoc23_strtoul_l F GLIBC_2.38 __isoc23_strtoull F GLIBC_2.38 __isoc23_strtoull_l F GLIBC_2.38 __isoc23_strtoumax F +GLIBC_2.38 __isoc23_swscanf F +GLIBC_2.38 __isoc23_vfscanf F +GLIBC_2.38 __isoc23_vfwscanf F +GLIBC_2.38 __isoc23_vscanf F +GLIBC_2.38 __isoc23_vsscanf F +GLIBC_2.38 __isoc23_vswscanf F +GLIBC_2.38 __isoc23_vwscanf F GLIBC_2.38 __isoc23_wcstoimax F GLIBC_2.38 __isoc23_wcstol F GLIBC_2.38 __isoc23_wcstol_l F @@ -2643,6 +2654,7 @@ GLIBC_2.38 __isoc23_wcstoul_l F GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F +GLIBC_2.38 __isoc23_wscanf F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist index 91c552dc4c..5be55c11d2 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist @@ -2766,6 +2766,10 @@ GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F GLIBC_2.37 __ppoll64_chk F +GLIBC_2.38 __isoc23_fscanf F +GLIBC_2.38 __isoc23_fwscanf F +GLIBC_2.38 __isoc23_scanf F +GLIBC_2.38 __isoc23_sscanf F GLIBC_2.38 __isoc23_strtoimax F GLIBC_2.38 __isoc23_strtol F GLIBC_2.38 __isoc23_strtol_l F @@ -2776,6 +2780,13 @@ GLIBC_2.38 __isoc23_strtoul_l F GLIBC_2.38 __isoc23_strtoull F GLIBC_2.38 __isoc23_strtoull_l F GLIBC_2.38 __isoc23_strtoumax F +GLIBC_2.38 __isoc23_swscanf F +GLIBC_2.38 __isoc23_vfscanf F +GLIBC_2.38 __isoc23_vfwscanf F +GLIBC_2.38 __isoc23_vscanf F +GLIBC_2.38 __isoc23_vsscanf F +GLIBC_2.38 __isoc23_vswscanf F +GLIBC_2.38 __isoc23_vwscanf F GLIBC_2.38 __isoc23_wcstoimax F GLIBC_2.38 __isoc23_wcstol F GLIBC_2.38 __isoc23_wcstol_l F @@ -2786,6 +2797,19 @@ GLIBC_2.38 __isoc23_wcstoul_l F GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F +GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __nldbl___isoc23_fscanf F +GLIBC_2.38 __nldbl___isoc23_fwscanf F +GLIBC_2.38 __nldbl___isoc23_scanf F +GLIBC_2.38 __nldbl___isoc23_sscanf F +GLIBC_2.38 __nldbl___isoc23_swscanf F +GLIBC_2.38 __nldbl___isoc23_vfscanf F +GLIBC_2.38 __nldbl___isoc23_vfwscanf F +GLIBC_2.38 __nldbl___isoc23_vscanf F +GLIBC_2.38 __nldbl___isoc23_vsscanf F +GLIBC_2.38 __nldbl___isoc23_vswscanf F +GLIBC_2.38 __nldbl___isoc23_vwscanf F +GLIBC_2.38 __nldbl___isoc23_wscanf F GLIBC_2.4 _IO_fprintf F GLIBC_2.4 _IO_printf F GLIBC_2.4 _IO_sprintf F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist index c5c5e5cf9a..475fdaae15 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist @@ -2591,6 +2591,10 @@ GLIBC_2.36 pidfd_open F GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F +GLIBC_2.38 __isoc23_fscanf F +GLIBC_2.38 __isoc23_fwscanf F +GLIBC_2.38 __isoc23_scanf F +GLIBC_2.38 __isoc23_sscanf F GLIBC_2.38 __isoc23_strtoimax F GLIBC_2.38 __isoc23_strtol F GLIBC_2.38 __isoc23_strtol_l F @@ -2601,6 +2605,13 @@ GLIBC_2.38 __isoc23_strtoul_l F GLIBC_2.38 __isoc23_strtoull F GLIBC_2.38 __isoc23_strtoull_l F GLIBC_2.38 __isoc23_strtoumax F +GLIBC_2.38 __isoc23_swscanf F +GLIBC_2.38 __isoc23_vfscanf F +GLIBC_2.38 __isoc23_vfwscanf F +GLIBC_2.38 __isoc23_vscanf F +GLIBC_2.38 __isoc23_vsscanf F +GLIBC_2.38 __isoc23_vswscanf F +GLIBC_2.38 __isoc23_vwscanf F GLIBC_2.38 __isoc23_wcstoimax F GLIBC_2.38 __isoc23_wcstol F GLIBC_2.38 __isoc23_wcstol_l F @@ -2611,6 +2622,7 @@ GLIBC_2.38 __isoc23_wcstoul_l F GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F +GLIBC_2.38 __isoc23_wscanf F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist index e51996e046..6cfb928bc8 100644 --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist @@ -2542,6 +2542,10 @@ GLIBC_2.36 pidfd_open F GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F +GLIBC_2.38 __isoc23_fscanf F +GLIBC_2.38 __isoc23_fwscanf F +GLIBC_2.38 __isoc23_scanf F +GLIBC_2.38 __isoc23_sscanf F GLIBC_2.38 __isoc23_strtoimax F GLIBC_2.38 __isoc23_strtol F GLIBC_2.38 __isoc23_strtol_l F @@ -2552,6 +2556,13 @@ GLIBC_2.38 __isoc23_strtoul_l F GLIBC_2.38 __isoc23_strtoull F GLIBC_2.38 __isoc23_strtoull_l F GLIBC_2.38 __isoc23_strtoumax F +GLIBC_2.38 __isoc23_swscanf F +GLIBC_2.38 __isoc23_vfscanf F +GLIBC_2.38 __isoc23_vfwscanf F +GLIBC_2.38 __isoc23_vscanf F +GLIBC_2.38 __isoc23_vsscanf F +GLIBC_2.38 __isoc23_vswscanf F +GLIBC_2.38 __isoc23_vwscanf F GLIBC_2.38 __isoc23_wcstoimax F GLIBC_2.38 __isoc23_wcstol F GLIBC_2.38 __isoc23_wcstol_l F @@ -2562,6 +2573,7 @@ GLIBC_2.38 __isoc23_wcstoul_l F GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F +GLIBC_2.38 __isoc23_wscanf F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist index 388536b3be..c735097172 100644 --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist @@ -2648,6 +2648,10 @@ GLIBC_2.36 pidfd_open F GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F +GLIBC_2.38 __isoc23_fscanf F +GLIBC_2.38 __isoc23_fwscanf F +GLIBC_2.38 __isoc23_scanf F +GLIBC_2.38 __isoc23_sscanf F GLIBC_2.38 __isoc23_strtoimax F GLIBC_2.38 __isoc23_strtol F GLIBC_2.38 __isoc23_strtol_l F @@ -2658,6 +2662,13 @@ GLIBC_2.38 __isoc23_strtoul_l F GLIBC_2.38 __isoc23_strtoull F GLIBC_2.38 __isoc23_strtoull_l F GLIBC_2.38 __isoc23_strtoumax F +GLIBC_2.38 __isoc23_swscanf F +GLIBC_2.38 __isoc23_vfscanf F +GLIBC_2.38 __isoc23_vfwscanf F +GLIBC_2.38 __isoc23_vscanf F +GLIBC_2.38 __isoc23_vsscanf F +GLIBC_2.38 __isoc23_vswscanf F +GLIBC_2.38 __isoc23_vwscanf F GLIBC_2.38 __isoc23_wcstoimax F GLIBC_2.38 __isoc23_wcstol F GLIBC_2.38 __isoc23_wcstol_l F @@ -2668,3 +2679,4 @@ GLIBC_2.38 __isoc23_wcstoul_l F GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F +GLIBC_2.38 __isoc23_wscanf F diff --git a/wcsmbs/Makefile b/wcsmbs/Makefile index 16ece4c110..b12a3b0750 100644 --- a/wcsmbs/Makefile +++ b/wcsmbs/Makefile @@ -43,6 +43,8 @@ routines := wcscat wcschr wcscmp wcscpy wcscspn wcsdup wcslen wcsncat \ wcsmbsload mbsrtowcs_l \ isoc99_wscanf isoc99_vwscanf isoc99_fwscanf isoc99_vfwscanf \ isoc99_swscanf isoc99_vswscanf \ + isoc23_wscanf isoc23_vwscanf isoc23_fwscanf isoc23_vfwscanf \ + isoc23_swscanf isoc23_vswscanf \ mbrtoc8 c8rtomb mbrtoc16 c16rtomb mbrtoc32 c32rtomb strop-tests := wcscmp wcsncmp wmemcmp wcslen wcschr wcsrchr wcscpy wcsnlen \ @@ -59,7 +61,11 @@ tests := tst-wcstof wcsmbs-tst1 tst-wcsnlen tst-btowc tst-mbrtowc \ tst-wcstol-binary-c11 \ tst-wcstol-binary-c2x \ tst-wcstol-binary-gnu11 \ - tst-wcstol-binary-gnu2x + tst-wcstol-binary-gnu2x \ + tst-wscanf-binary-c11 \ + tst-wscanf-binary-c2x \ + tst-wscanf-binary-gnu11 \ + tst-wscanf-binary-gnu89 include ../Rules @@ -118,6 +124,10 @@ CFLAGS-isoc99_wscanf.c += -fexceptions CFLAGS-isoc99_fwscanf.c += -fexceptions CFLAGS-isoc99_vwscanf.c += -fexceptions CFLAGS-isoc99_vfwscanf.c += -fexceptions +CFLAGS-isoc23_wscanf.c += -fexceptions +CFLAGS-isoc23_fwscanf.c += -fexceptions +CFLAGS-isoc23_vwscanf.c += -fexceptions +CFLAGS-isoc23_vfwscanf.c += -fexceptions CPPFLAGS += $(libio-mtsafe) @@ -134,3 +144,7 @@ CFLAGS-tst-wcstol-binary-c11.c += -std=c11 CFLAGS-tst-wcstol-binary-c2x.c += -std=c11 CFLAGS-tst-wcstol-binary-gnu11.c += -std=gnu11 CFLAGS-tst-wcstol-binary-gnu2x.c += -std=gnu11 +CFLAGS-tst-wscanf-binary-c11.c += -std=c11 -DOBJPFX=\"$(objpfx)\" +CFLAGS-tst-wscanf-binary-c2x.c += -std=c11 -DOBJPFX=\"$(objpfx)\" +CFLAGS-tst-wscanf-binary-gnu11.c += -std=gnu11 -DOBJPFX=\"$(objpfx)\" +CFLAGS-tst-wscanf-binary-gnu89.c += -std=gnu89 -DOBJPFX=\"$(objpfx)\" diff --git a/wcsmbs/Versions b/wcsmbs/Versions index 1866cd8d6e..2d9391348a 100644 --- a/wcsmbs/Versions +++ b/wcsmbs/Versions @@ -59,5 +59,11 @@ libc { __isoc23_wcstoull; __isoc23_wcstoimax; __isoc23_wcstoumax; + __isoc23_fwscanf; + __isoc23_swscanf; + __isoc23_vfwscanf; + __isoc23_vswscanf; + __isoc23_vwscanf; + __isoc23_wscanf; } } diff --git a/wcsmbs/bits/wchar-ldbl.h b/wcsmbs/bits/wchar-ldbl.h index 4c6f850a45..ee4a6391c8 100644 --- a/wcsmbs/bits/wchar-ldbl.h +++ b/wcsmbs/bits/wchar-ldbl.h @@ -29,13 +29,25 @@ __LDBL_REDIR_DECL (vwprintf); __LDBL_REDIR_DECL (vswprintf); # if !__GLIBC_USE (DEPRECATED_SCANF) # if defined __LDBL_COMPAT +# if __GLIBC_USE (C2X_STRTOL) +__LDBL_REDIR1_DECL (fwscanf, __nldbl___isoc23_fwscanf) +__LDBL_REDIR1_DECL (wscanf, __nldbl___isoc23_wscanf) +__LDBL_REDIR1_DECL (swscanf, __nldbl___isoc23_swscanf) +# else __LDBL_REDIR1_DECL (fwscanf, __nldbl___isoc99_fwscanf) __LDBL_REDIR1_DECL (wscanf, __nldbl___isoc99_wscanf) __LDBL_REDIR1_DECL (swscanf, __nldbl___isoc99_swscanf) +# endif # elif __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 +# if __GLIBC_USE (C2X_STRTOL) +__LDBL_REDIR1_DECL (fwscanf, __isoc23_fwscanfieee128) +__LDBL_REDIR1_DECL (wscanf, __isoc23_wscanfieee128) +__LDBL_REDIR1_DECL (swscanf, __isoc23_swscanfieee128) +# else __LDBL_REDIR1_DECL (fwscanf, __isoc99_fwscanfieee128) __LDBL_REDIR1_DECL (wscanf, __isoc99_wscanfieee128) __LDBL_REDIR1_DECL (swscanf, __isoc99_swscanfieee128) +# endif # else # error bits/stdlib-ldbl.h included when no ldbl redirections are required. # endif @@ -54,13 +66,25 @@ __LDBL_REDIR1_DECL (wcstold, __wcstoieee128) # endif # if !__GLIBC_USE (DEPRECATED_SCANF) # if defined __LDBL_COMPAT +# if __GLIBC_USE (C2X_STRTOL) +__LDBL_REDIR1_DECL (vfwscanf, __nldbl___isoc23_vfwscanf) +__LDBL_REDIR1_DECL (vwscanf, __nldbl___isoc23_vwscanf) +__LDBL_REDIR1_DECL (vswscanf, __nldbl___isoc23_vswscanf) +# else __LDBL_REDIR1_DECL (vfwscanf, __nldbl___isoc99_vfwscanf) __LDBL_REDIR1_DECL (vwscanf, __nldbl___isoc99_vwscanf) __LDBL_REDIR1_DECL (vswscanf, __nldbl___isoc99_vswscanf) +# endif # elif __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 +# if __GLIBC_USE (C2X_STRTOL) +__LDBL_REDIR1_DECL (vfwscanf, __isoc23_vfwscanfieee128) +__LDBL_REDIR1_DECL (vwscanf, __isoc23_vwscanfieee128) +__LDBL_REDIR1_DECL (vswscanf, __isoc23_vswscanfieee128) +# else __LDBL_REDIR1_DECL (vfwscanf, __isoc99_vfwscanfieee128) __LDBL_REDIR1_DECL (vwscanf, __isoc99_vwscanfieee128) __LDBL_REDIR1_DECL (vswscanf, __isoc99_vswscanfieee128) +# endif # else # error bits/stdlib-ldbl.h included when no ldbl redirections are required. # endif diff --git a/wcsmbs/isoc23_fwscanf.c b/wcsmbs/isoc23_fwscanf.c new file mode 100644 index 0000000000..90499bb098 --- /dev/null +++ b/wcsmbs/isoc23_fwscanf.c @@ -0,0 +1,36 @@ +/* Copyright (C) 1991-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <libioP.h> +#include <stdarg.h> +#include <stdio.h> +#include <wchar.h> + +/* Read formatted input from STREAM according to the format string FORMAT. */ +int +__isoc23_fwscanf (FILE *stream, const wchar_t *format, ...) +{ + va_list arg; + int done; + + va_start (arg, format); + done = __vfwscanf_internal (stream, format, arg, + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST); + va_end (arg); + + return done; +} diff --git a/wcsmbs/isoc23_swscanf.c b/wcsmbs/isoc23_swscanf.c new file mode 100644 index 0000000000..75021a0657 --- /dev/null +++ b/wcsmbs/isoc23_swscanf.c @@ -0,0 +1,38 @@ +/* Copyright (C) 1991-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdarg.h> +#include <libio/strfile.h> + +/* Read formatted input from S, according to the format string FORMAT. */ + +int +__isoc23_swscanf (const wchar_t *s, const wchar_t *format, ...) +{ + va_list arg; + int done; + _IO_strfile sf; + struct _IO_wide_data wd; + FILE *f = _IO_strfile_readw (&sf, &wd, s); + + va_start (arg, format); + done = __vfwscanf_internal (f, format, arg, + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST); + va_end (arg); + + return done; +} diff --git a/wcsmbs/isoc23_vfwscanf.c b/wcsmbs/isoc23_vfwscanf.c new file mode 100644 index 0000000000..6134a84b2e --- /dev/null +++ b/wcsmbs/isoc23_vfwscanf.c @@ -0,0 +1,29 @@ +/* Copyright (C) 1991-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <libioP.h> +#include <stdio.h> +#include <wchar.h> + +/* Read formatted input from STREAM according to the format string FORMAT. */ +int +__isoc23_vfwscanf (FILE *stream, const wchar_t *format, va_list args) +{ + return __vfwscanf_internal (stream, format, args, + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST); +} +libc_hidden_def (__isoc23_vfwscanf) diff --git a/wcsmbs/isoc23_vswscanf.c b/wcsmbs/isoc23_vswscanf.c new file mode 100644 index 0000000000..77c0e97986 --- /dev/null +++ b/wcsmbs/isoc23_vswscanf.c @@ -0,0 +1,30 @@ +/* Copyright (C) 1993-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <wchar.h> +#include <libio/strfile.h> + +int +__isoc23_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); + return __vfwscanf_internal (f, format, args, + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST); +} +libc_hidden_def (__isoc23_vswscanf) diff --git a/wcsmbs/isoc23_vwscanf.c b/wcsmbs/isoc23_vwscanf.c new file mode 100644 index 0000000000..95d929268c --- /dev/null +++ b/wcsmbs/isoc23_vwscanf.c @@ -0,0 +1,28 @@ +/* Copyright (C) 1991-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <libioP.h> +#include <stdio.h> +#include <wchar.h> + +/* Read formatted input from STDIN according to the format string FORMAT. */ +int +__isoc23_vwscanf (const wchar_t *format, va_list args) +{ + return __vfwscanf_internal (stdin, format, args, + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST); +} diff --git a/wcsmbs/isoc23_wscanf.c b/wcsmbs/isoc23_wscanf.c new file mode 100644 index 0000000000..4fb54438cc --- /dev/null +++ b/wcsmbs/isoc23_wscanf.c @@ -0,0 +1,37 @@ +/* Copyright (C) 1991-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdarg.h> +#include <stdio.h> +#include <libioP.h> +#include <wchar.h> + + +/* Read formatted input from stdin according to the format string FORMAT. */ +int +__isoc23_wscanf (const wchar_t *format, ...) +{ + va_list arg; + int done; + + va_start (arg, format); + done = __vfwscanf_internal (stdin, format, arg, + SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST); + va_end (arg); + + return done; +} diff --git a/wcsmbs/tst-wscanf-binary-c11.c b/wcsmbs/tst-wscanf-binary-c11.c new file mode 100644 index 0000000000..cd1127ef5e --- /dev/null +++ b/wcsmbs/tst-wscanf-binary-c11.c @@ -0,0 +1,28 @@ +/* Test wscanf functions with C2X binary integers (wide strings, + no extensions to C11). + Copyright (C) 2022-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#undef _GNU_SOURCE + +#define CHAR wchar_t +#define FNW w +#define L_(C) L ## C +#define TEST_C2X 0 +#define STD "c11" + +#include "../stdio-common/tst-scanf-binary-main.c" diff --git a/wcsmbs/tst-wscanf-binary-c2x.c b/wcsmbs/tst-wscanf-binary-c2x.c new file mode 100644 index 0000000000..05260b8cfd --- /dev/null +++ b/wcsmbs/tst-wscanf-binary-c2x.c @@ -0,0 +1,31 @@ +/* Test wscanf functions with C2X binary integers (wide strings, + no extensions). + Copyright (C) 2022-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +/* Some versions of GCC supported for building glibc do not support + -std=c2x. */ +#undef _GNU_SOURCE +#define _ISOC2X_SOURCE + +#define CHAR wchar_t +#define FNW w +#define L_(C) L ## C +#define TEST_C2X 1 +#define STD "c2x" + +#include "../stdio-common/tst-scanf-binary-main.c" diff --git a/wcsmbs/tst-wscanf-binary-gnu11.c b/wcsmbs/tst-wscanf-binary-gnu11.c new file mode 100644 index 0000000000..4af479e968 --- /dev/null +++ b/wcsmbs/tst-wscanf-binary-gnu11.c @@ -0,0 +1,26 @@ +/* Test wscanf functions with C2X binary integers (wide strings, + GNU extensions to C11). + Copyright (C) 2022-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#define CHAR wchar_t +#define FNW w +#define L_(C) L ## C +#define TEST_C2X 1 +#define STD "gnu11" + +#include "../stdio-common/tst-scanf-binary-main.c" diff --git a/wcsmbs/tst-wscanf-binary-gnu89.c b/wcsmbs/tst-wscanf-binary-gnu89.c new file mode 100644 index 0000000000..85226aeef9 --- /dev/null +++ b/wcsmbs/tst-wscanf-binary-gnu89.c @@ -0,0 +1,26 @@ +/* Test wscanf functions with C2X binary integers (wide strings, + GNU extensions to C89). + Copyright (C) 2022-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#define CHAR wchar_t +#define FNW w +#define L_(C) L ## C +#define TEST_C2X 0 +#define STD "gnu89" + +#include "../stdio-common/tst-scanf-binary-main.c" diff --git a/wcsmbs/wchar.h b/wcsmbs/wchar.h index cde0d32b0a..7ab99ba93b 100644 --- a/wcsmbs/wchar.h +++ b/wcsmbs/wchar.h @@ -762,9 +762,34 @@ extern int swscanf (const wchar_t *__restrict __s, functions are at alternative names. When __LDBL_COMPAT or __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI are in effect, this is handled in bits/wchar-ldbl.h. */ -#if !__GLIBC_USE (DEPRECATED_SCANF) && !defined __LDBL_COMPAT \ +# if !__GLIBC_USE (DEPRECATED_SCANF) && !defined __LDBL_COMPAT \ && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0 -# ifdef __REDIRECT +# if __GLIBC_USE (C2X_STRTOL) +# ifdef __REDIRECT +extern int __REDIRECT (fwscanf, (__FILE *__restrict __stream, + const wchar_t *__restrict __format, ...), + __isoc23_fwscanf) + /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */; +extern int __REDIRECT (wscanf, (const wchar_t *__restrict __format, ...), + __isoc23_wscanf) + /* __attribute__ ((__format__ (__wscanf__, 1, 2))) */; +extern int __REDIRECT_NTH (swscanf, (const wchar_t *__restrict __s, + const wchar_t *__restrict __format, + ...), __isoc23_swscanf) + /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */; +# else +extern int __isoc23_fwscanf (__FILE *__restrict __stream, + const wchar_t *__restrict __format, ...); +extern int __isoc23_wscanf (const wchar_t *__restrict __format, ...); +extern int __isoc23_swscanf (const wchar_t *__restrict __s, + const wchar_t *__restrict __format, ...) + __THROW; +# define fwscanf __isoc23_fwscanf +# define wscanf __isoc23_wscanf +# define swscanf __isoc23_swscanf +# endif +# else +# ifdef __REDIRECT extern int __REDIRECT (fwscanf, (__FILE *__restrict __stream, const wchar_t *__restrict __format, ...), __isoc99_fwscanf) @@ -776,16 +801,17 @@ extern int __REDIRECT_NTH (swscanf, (const wchar_t *__restrict __s, const wchar_t *__restrict __format, ...), __isoc99_swscanf) /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */; -# else +# else extern int __isoc99_fwscanf (__FILE *__restrict __stream, const wchar_t *__restrict __format, ...); extern int __isoc99_wscanf (const wchar_t *__restrict __format, ...); extern int __isoc99_swscanf (const wchar_t *__restrict __s, const wchar_t *__restrict __format, ...) __THROW; -# define fwscanf __isoc99_fwscanf -# define wscanf __isoc99_wscanf -# define swscanf __isoc99_swscanf +# define fwscanf __isoc99_fwscanf +# define wscanf __isoc99_wscanf +# define swscanf __isoc99_swscanf +# endif # endif # endif @@ -818,7 +844,34 @@ extern int vswscanf (const wchar_t *__restrict __s, && (!defined __LDBL_COMPAT || !defined __REDIRECT) \ && (defined __STRICT_ANSI__ || defined __USE_XOPEN2K) \ && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0 -# ifdef __REDIRECT +# if __GLIBC_USE (C2X_STRTOL) +# ifdef __REDIRECT +extern int __REDIRECT (vfwscanf, (__FILE *__restrict __s, + const wchar_t *__restrict __format, + __gnuc_va_list __arg), __isoc23_vfwscanf) + /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */; +extern int __REDIRECT (vwscanf, (const wchar_t *__restrict __format, + __gnuc_va_list __arg), __isoc23_vwscanf) + /* __attribute__ ((__format__ (__wscanf__, 1, 0))) */; +extern int __REDIRECT_NTH (vswscanf, (const wchar_t *__restrict __s, + const wchar_t *__restrict __format, + __gnuc_va_list __arg), __isoc23_vswscanf) + /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */; +# else +extern int __isoc23_vfwscanf (__FILE *__restrict __s, + const wchar_t *__restrict __format, + __gnuc_va_list __arg); +extern int __isoc23_vwscanf (const wchar_t *__restrict __format, + __gnuc_va_list __arg); +extern int __isoc23_vswscanf (const wchar_t *__restrict __s, + const wchar_t *__restrict __format, + __gnuc_va_list __arg) __THROW; +# define vfwscanf __isoc23_vfwscanf +# define vwscanf __isoc23_vwscanf +# define vswscanf __isoc23_vswscanf +# endif +# else +# ifdef __REDIRECT extern int __REDIRECT (vfwscanf, (__FILE *__restrict __s, const wchar_t *__restrict __format, __gnuc_va_list __arg), __isoc99_vfwscanf) @@ -830,7 +883,7 @@ extern int __REDIRECT_NTH (vswscanf, (const wchar_t *__restrict __s, const wchar_t *__restrict __format, __gnuc_va_list __arg), __isoc99_vswscanf) /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */; -# else +# else extern int __isoc99_vfwscanf (__FILE *__restrict __s, const wchar_t *__restrict __format, __gnuc_va_list __arg); @@ -839,9 +892,10 @@ extern int __isoc99_vwscanf (const wchar_t *__restrict __format, extern int __isoc99_vswscanf (const wchar_t *__restrict __s, const wchar_t *__restrict __format, __gnuc_va_list __arg) __THROW; -# define vfwscanf __isoc99_vfwscanf -# define vwscanf __isoc99_vwscanf -# define vswscanf __isoc99_vswscanf +# define vfwscanf __isoc99_vfwscanf +# define vwscanf __isoc99_vwscanf +# define vswscanf __isoc99_vswscanf +# endif # endif # endif