From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ot1-x32e.google.com (mail-ot1-x32e.google.com [IPv6:2607:f8b0:4864:20::32e]) by sourceware.org (Postfix) with ESMTPS id 2D6A6384DD3D for ; Mon, 20 Feb 2023 20:03:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 2D6A6384DD3D Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linaro.org Received: by mail-ot1-x32e.google.com with SMTP id r23-20020a05683001d700b00690eb18529fso570884ota.1 for ; Mon, 20 Feb 2023 12:03:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:in-reply-to:organization:from:references :to:content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=HJpio8YahHIAmnMIFPdAseudJOEPfdJx/uRadAUmCew=; b=xeJKkoihiOrvYY6U2AwX0EM9UiJq1WWurKYflw3Zk65+tO4zii6RfTF/NhygjkdiXE GWmj2oYW7bR40koVVVPTvrK9JtQD93gkYQuYaAwmuw7p5Q37clfg7AXiBULUTzDH171f ThaNwCPC+2OEv1wgotQmMtQdSl/mPZgfj7hmxMb0pDu8ViB57CLXewhjcRyAucTQKOy9 dWcEvkA6B1e4206+6/4vgTjz0WKOcUwNr7ySgdOJijBOQfibg/28dp7rCfWag4IPZoHi NTK4XxQExT+0jcemTzblL2p0Jtb9gzPfJ74T9qRyBTRBi4I4si3wCUnqNeCLgn2uQ9R4 CtNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:organization:from:references :to:content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=HJpio8YahHIAmnMIFPdAseudJOEPfdJx/uRadAUmCew=; b=MMa8YuFQNxGAKUMl8umDkAy76XN02w6hQk+Gtqh3k1mSRKQNsXm460vYhnXjzYmgNk +NrOTrmwjTgwnSZ8lZPGsWE5ntt+rVL7yUhfjLMsCqWvOmLTiE5TNdv8GBGfF4F4DVlj sJdZmg66DKLOpr1RAmFLzp9KWIATZdtFyjzpt7N92iFaDJvTo9zFQvC12hEbBB4HHAkp +IdAF+WPX1HDWr2a4ho+9ZlC9DFBgcZkP+ANdgT5XuVfFZpS9QRWK1wtbpXROhYgERpa R/EO89LDxoY9/qu4A2Fb0wfC3a7uY/h2M845zkPPJqJECSEFZA+af02X5zUzzsofz8/j 8hBg== X-Gm-Message-State: AO0yUKW8XdC0L+CH231x0r0J8Rn7ybT6+zyNhDjhqIBQU9bigblKx0v9 AJ854ObDIphq75eTVomCTaT6QpEjJWnqIaoN2hM= X-Google-Smtp-Source: AK7set+kpA8KA+Uf7Q1mMgDYQ0HdeOYgOKUB26ivmGHqUOtRN2/6YeHRwnfXJvtAZXpCOeJia5PI8A== X-Received: by 2002:a05:6830:3106:b0:690:c284:f16c with SMTP id b6-20020a056830310600b00690c284f16cmr1134193ots.11.1676923396813; Mon, 20 Feb 2023 12:03:16 -0800 (PST) Received: from ?IPV6:2804:1b3:a7c3:3a5:a0:9596:f951:7d30? ([2804:1b3:a7c3:3a5:a0:9596:f951:7d30]) by smtp.gmail.com with ESMTPSA id q21-20020a056830019500b0068d3f341dd9sm5261167ota.62.2023.02.20.12.03.14 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 20 Feb 2023 12:03:16 -0800 (PST) Message-ID: Date: Mon, 20 Feb 2023 17:03:13 -0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.7.2 Subject: Re: [v2] C2x scanf binary constant handling Content-Language: en-US To: Joseph Myers , libc-alpha@sourceware.org References: From: Adhemerval Zanella Netto Organization: Linaro In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-12.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: 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 > > 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 > #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 > + . */ > + > +#include > +#include > +#include > + > +/* 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 > + . */ > + > +#include > +#include > +#include > + > +/* 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 > + . */ > + > +#include > +#include > + > +/* 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 > + . */ > + > +#include > +#include > + > +/* 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 > + . */ > + > +#include > +#include > + > +/* 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 > + . */ > + > +#include > + > +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 > + . */ > + > +#undef _GNU_SOURCE > + > +#define CHAR char > +#define FNW > +#define L_(C) C > +#define TEST_C2X 0 > +#define STD "c11" > + > +#include 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 > + . */ > + > +/* 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 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 > + . */ > + > +#define CHAR char > +#define FNW > +#define L_(C) C > +#define TEST_C2X 1 > +#define STD "gnu11" > + > +#include 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 > + . */ > + > +#define CHAR char > +#define FNW > +#define L_(C) C > +#define TEST_C2X 0 > +#define STD "gnu89" > + > +#include 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 > + . */ > + > +#include > +#include > +#include > + > +#include > + > +#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 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 > + . */ > + > +#include > +#include > + > +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 > + . */ > + > +#include > +#include > + > +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 > + . */ > + > +#include > +#include > + > +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 > + . */ > + > +#include > +#include > +#include > + > +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 > + . */ > + > +#include > +#include > +#include > + > +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 > + . */ > + > +#include > +#include > + > +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 > + . */ > + > +#include > + > +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 > + . */ > + > +#include > + > +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 > + . */ > + > +#include > +#include > + > +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 > + . */ > + > +#include > +#include > +#include > + > +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 > + . */ > + > +#include > + > +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 > + . */ > + > +#include > +#include > + > +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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 > 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 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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 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 > + . */ > + > +#include > +#include > +#include > +#include > + > +/* 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 > + . */ > + > +#include > +#include > + > +/* 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 > + . */ > + > +#include > +#include > +#include > + > +/* 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 > + . */ > + > +#include > +#include > + > +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 > + . */ > + > +#include > +#include > +#include > + > +/* 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 > + . */ > + > +#include > +#include > +#include > +#include > + > + > +/* 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 > + . */ > + > +#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 > + . */ > + > +/* 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 > + . */ > + > +#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 > + . */ > + > +#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.