@@ -14,6 +14,13 @@ Major new features:
configured on the current host i.e. as-if you had not passed
AI_ADDRCONFIG to getaddrinfo calls.
+* When C2X features are enabled and the base argument is 0 or 2, the
+ following functions support binary integers prefixed by 0b or 0B as
+ 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.
+
Deprecated and removed features, and other changes affecting compatibility:
* The dynamic linker no longer loads shared objects from the "tls"
@@ -150,6 +150,7 @@
#undef __GLIBC_USE_ISOC2X
#undef __GLIBC_USE_DEPRECATED_GETS
#undef __GLIBC_USE_DEPRECATED_SCANF
+#undef __GLIBC_USE_C2X_STRTOL
/* Suppress kernel-name space pollution unless user expressedly asks
for it. */
@@ -463,6 +464,17 @@
# define __GLIBC_USE_DEPRECATED_SCANF 0
#endif
+/* ISO C2X added support for a 0b or 0B prefix on binary constants as
+ inputs to strtol-family functions (base 0 or 2). This macro is
+ used to condition redirection in headers to allow that redirection
+ to be disabled when building those functions, despite _GNU_SOURCE
+ being defined. */
+#if __GLIBC_USE (ISOC2X)
+# define __GLIBC_USE_C2X_STRTOL 1
+#else
+# define __GLIBC_USE_C2X_STRTOL 0
+#endif
+
/* Get definitions of __STDC_* predefined macros, if the compiler has
not preincluded this header automatically. */
#include <stdc-predef.h>
@@ -35,6 +35,45 @@ libc_hidden_proto (__strtod_l)
libc_hidden_proto (__strtof_l)
libc_hidden_proto (__strtold_l)
+extern __typeof (strtol) __isoc23_strtol __attribute_copy__ (strtol);
+extern __typeof (strtoul) __isoc23_strtoul __attribute_copy__ (strtoul);
+extern __typeof (strtoll) __isoc23_strtoll __attribute_copy__ (strtoll);
+extern __typeof (strtoull) __isoc23_strtoull __attribute_copy__ (strtoull);
+extern __typeof (strtol_l) __isoc23_strtol_l __attribute_copy__ (strtol_l);
+extern __typeof (strtoul_l) __isoc23_strtoul_l __attribute_copy__ (strtoul_l);
+extern __typeof (strtoll_l) __isoc23_strtoll_l __attribute_copy__ (strtoll_l);
+extern __typeof (strtoull_l) __isoc23_strtoull_l __attribute_copy__ (strtoull_l);
+libc_hidden_proto (__isoc23_strtol)
+libc_hidden_proto (__isoc23_strtoul)
+libc_hidden_proto (__isoc23_strtoll)
+libc_hidden_proto (__isoc23_strtoull)
+libc_hidden_proto (__isoc23_strtol_l)
+libc_hidden_proto (__isoc23_strtoul_l)
+libc_hidden_proto (__isoc23_strtoll_l)
+libc_hidden_proto (__isoc23_strtoull_l)
+
+#if __GLIBC_USE (C2X_STRTOL)
+/* Redirect internal uses of these functions to the C2X versions; the
+ redirection in the installed header does not work with
+ libc_hidden_proto. */
+# undef strtol
+# define strtol __isoc23_strtol
+# undef strtoul
+# define strtoul __isoc23_strtoul
+# undef strtoll
+# define strtoll __isoc23_strtoll
+# undef strtoull
+# define strtoull __isoc23_strtoull
+# undef strtol_l
+# define strtol_l __isoc23_strtol_l
+# undef strtoul_l
+# define strtoul_l __isoc23_strtoul_l
+# undef strtoll_l
+# define strtoll_l __isoc23_strtoll_l
+# undef strtoull_l
+# define strtoull_l __isoc23_strtoull_l
+#endif
+
libc_hidden_proto (exit)
libc_hidden_proto (abort)
libc_hidden_proto (getenv)
@@ -202,23 +241,25 @@ extern long double ____strtold_l_internal (const char *__restrict __nptr,
extern long int ____strtol_l_internal (const char *__restrict __nptr,
char **__restrict __endptr,
int __base, int __group,
- locale_t __loc);
+ int __bin_cst, locale_t __loc);
extern unsigned long int ____strtoul_l_internal (const char *
__restrict __nptr,
char **__restrict __endptr,
int __base, int __group,
+ int __bin_cst,
locale_t __loc);
__extension__
extern long long int ____strtoll_l_internal (const char *__restrict __nptr,
char **__restrict __endptr,
int __base, int __group,
- locale_t __loc);
+ int __bin_cst, locale_t __loc);
__extension__
extern unsigned long long int ____strtoull_l_internal (const char *
__restrict __nptr,
char **
__restrict __endptr,
int __base, int __group,
+ int __bin_cst,
locale_t __loc);
libc_hidden_proto (____strtof_l_internal)
@@ -34,6 +34,45 @@ libc_hidden_proto (__wcstof_l)
libc_hidden_proto (__wcstold_l)
libc_hidden_proto (__wcsftime_l)
+extern __typeof (wcstol) __isoc23_wcstol __attribute_copy__ (wcstol);
+extern __typeof (wcstoul) __isoc23_wcstoul __attribute_copy__ (wcstoul);
+extern __typeof (wcstoll) __isoc23_wcstoll __attribute_copy__ (wcstoll);
+extern __typeof (wcstoull) __isoc23_wcstoull __attribute_copy__ (wcstoull);
+extern __typeof (wcstol_l) __isoc23_wcstol_l __attribute_copy__ (wcstol_l);
+extern __typeof (wcstoul_l) __isoc23_wcstoul_l __attribute_copy__ (wcstoul_l);
+extern __typeof (wcstoll_l) __isoc23_wcstoll_l __attribute_copy__ (wcstoll_l);
+extern __typeof (wcstoull_l) __isoc23_wcstoull_l __attribute_copy__ (wcstoull_l);
+libc_hidden_proto (__isoc23_wcstol)
+libc_hidden_proto (__isoc23_wcstoul)
+libc_hidden_proto (__isoc23_wcstoll)
+libc_hidden_proto (__isoc23_wcstoull)
+libc_hidden_proto (__isoc23_wcstol_l)
+libc_hidden_proto (__isoc23_wcstoul_l)
+libc_hidden_proto (__isoc23_wcstoll_l)
+libc_hidden_proto (__isoc23_wcstoull_l)
+
+#if __GLIBC_USE (C2X_STRTOL)
+/* Redirect internal uses of these functions to the C2X versions; the
+ redirection in the installed header does not work with
+ libc_hidden_proto. */
+# undef wcstol
+# define wcstol __isoc23_wcstol
+# undef wcstoul
+# define wcstoul __isoc23_wcstoul
+# undef wcstoll
+# define wcstoll __isoc23_wcstoll
+# undef wcstoull
+# define wcstoull __isoc23_wcstoull
+# undef wcstol_l
+# define wcstol_l __isoc23_wcstol_l
+# undef wcstoul_l
+# define wcstoul_l __isoc23_wcstoul_l
+# undef wcstoll_l
+# define wcstoll_l __isoc23_wcstoll_l
+# undef wcstoull_l
+# define wcstoull_l __isoc23_wcstoull_l
+#endif
+
extern double __wcstod_internal (const wchar_t *__restrict __nptr,
wchar_t **__restrict __endptr, int __group)
@@ -63,7 +102,7 @@ extern unsigned long long int __wcstoull_internal (const wchar_t *
int __group) __THROW;
extern unsigned long long int ____wcstoull_l_internal (const wchar_t *,
wchar_t **, int, int,
- locale_t);
+ int, locale_t);
libc_hidden_proto (__wcstof_internal)
libc_hidden_proto (__wcstod_internal)
libc_hidden_proto (__wcstold_internal)
@@ -86,17 +125,17 @@ extern double ____wcstod_l_internal (const wchar_t *, wchar_t **, int,
extern long double ____wcstold_l_internal (const wchar_t *, wchar_t **,
int, locale_t) attribute_hidden;
extern long int ____wcstol_l_internal (const wchar_t *, wchar_t **, int,
- int, locale_t) attribute_hidden;
+ int, int, locale_t) attribute_hidden;
extern unsigned long int ____wcstoul_l_internal (const wchar_t *,
wchar_t **,
- int, int, locale_t)
+ int, int, int, locale_t)
attribute_hidden;
extern long long int ____wcstoll_l_internal (const wchar_t *, wchar_t **,
- int, int, locale_t)
+ int, int, int, locale_t)
attribute_hidden;
extern unsigned long long int ____wcstoull_l_internal (const wchar_t *,
wchar_t **, int, int,
- locale_t)
+ int, locale_t)
attribute_hidden;
#if __HAVE_DISTINCT_FLOAT128
@@ -49,7 +49,7 @@ __inet6_scopeid_pton (const struct in6_addr *address, const char *scope,
char *end;
unsigned long long number
= ____strtoull_l_internal (scope, &end, /*base */ 10, /* group */ 0,
- _nl_C_locobj_ptr);
+ /* bin_cst */ 0, _nl_C_locobj_ptr);
if (*end == '\0' && number <= UINT32_MAX)
{
*result = number;
@@ -66,6 +66,12 @@ libc {
wcstoll_l; wcstoul_l; wcstoull_l; wcsxfrm_l; wctype_l;
wctrans_l; nl_langinfo_l;
}
+ GLIBC_2.37 {
+ __isoc23_strtol_l; __isoc23_strtoll_l;
+ __isoc23_strtoul_l; __isoc23_strtoull_l;
+ __isoc23_wcstol_l; __isoc23_wcstoll_l;
+ __isoc23_wcstoul_l; __isoc23_wcstoull_l;
+ }
GLIBC_PRIVATE {
# global variables
__collate_element_hash; __collate_element_strings;
@@ -2656,12 +2656,15 @@ A nonempty sequence of digits in the radix specified by @var{base}.
If @var{base} is zero, decimal radix is assumed unless the series of
digits begins with @samp{0} (specifying octal radix), or @samp{0x} or
-@samp{0X} (specifying hexadecimal radix); in other words, the same
-syntax used for integer constants in C.
+@samp{0X} (specifying hexadecimal radix), or @samp{0b} or @samp{0B}
+(specifying binary radix; only supported when C2X features are
+enabled); in other words, the same syntax used for integer constants in C.
Otherwise @var{base} must have a value between @code{2} and @code{36}.
If @var{base} is @code{16}, the digits may optionally be preceded by
-@samp{0x} or @samp{0X}. If base has no legal value the value returned
+@samp{0x} or @samp{0X}. If @var{base} is @code{2}, and C2X features
+are enabled, the digits may optionally be preceded by
+@samp{0b} or @samp{0B}. If base has no legal value the value returned
is @code{0l} and the global variable @code{errno} is set to @code{EINVAL}.
@item
@@ -105,6 +105,7 @@ tests += \
tst-resolv-res_init-multi \
tst-resolv-search \
tst-resolv-trailing \
+ tst-inet_addr-binary \
# This test calls __res_context_send directly, which is not exported
# from libresolv.
@@ -130,7 +130,7 @@ inet_aton_end (const char *cp, struct in_addr *addr, const char **endp)
goto ret_0;
{
char *endp;
- unsigned long ul = strtoul (cp, &endp, 0);
+ unsigned long ul = __strtoul_internal (cp, &endp, 0, 0);
if (ul == ULONG_MAX && errno == ERANGE)
goto ret_0;
if (ul > 0xfffffffful)
new file mode 100644
@@ -0,0 +1,30 @@
+/* Test inet_addr does not accept C2X binary constants.
+ Copyright (C) 2022 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#include <arpa/inet.h>
+
+#include <support/check.h>
+
+static int
+do_test (void)
+{
+ TEST_COMPARE (inet_addr ("0b101"), (in_addr_t) -1);
+ return 0;
+}
+
+#include <support/test-driver.c>
@@ -243,6 +243,10 @@ tests := \
tst-width \
tst-width-stdint \
tst-xpg-basename \
+ tst-strtol-binary-c11 \
+ tst-strtol-binary-c2x \
+ tst-strtol-binary-gnu11 \
+ tst-strtol-binary-gnu2x \
# tests
tests-internal := \
@@ -394,6 +398,14 @@ CFLAGS-tst-makecontext2.c += $(stack-align-test-flags)
CFLAGS-testmb.c += -D_FORTIFY_SOURCE=2 -Wall -Werror
+# Some versions of GCC supported for building glibc do not support -std=c2x
+# or -std=gnu2x, so the tests for those versions use -std=c11 and -std=gnu11
+# and then _ISOC2X_SOURCE is defined in the test as needed.
+CFLAGS-tst-strtol-binary-c11.c += -std=c11
+CFLAGS-tst-strtol-binary-c2x.c += -std=c11
+CFLAGS-tst-strtol-binary-c11.c += -std=gnu11
+CFLAGS-tst-strtol-binary-c2x.c += -std=gnu11
+
# Run a test on the header files we use.
tests-special += $(objpfx)isomac.out
@@ -142,6 +142,8 @@ libc {
arc4random_uniform;
}
GLIBC_2.37 {
+ __isoc23_strtol; __isoc23_strtoll; __isoc23_strtoul; __isoc23_strtoull;
+ __isoc23_strtoimax; __isoc23_strtoumax;
}
GLIBC_PRIVATE {
# functions which have an additional interface since they are
@@ -311,6 +311,46 @@ extern uintmax_t wcstoumax (const __gwchar_t *__restrict __nptr,
__gwchar_t ** __restrict __endptr, int __base)
__THROW;
+/* Versions of the above functions that handle '0b' and '0B' prefixes
+ in base 0 or 2. */
+#if __GLIBC_USE (C2X_STRTOL)
+# ifdef __REDIRECT
+extern intmax_t __REDIRECT_NTH (strtoimax, (const char *__restrict __nptr,
+ char **__restrict __endptr,
+ int __base), __isoc23_strtoimax);
+extern uintmax_t __REDIRECT_NTH (strtoumax, (const char *__restrict __nptr,
+ char **__restrict __endptr,
+ int __base), __isoc23_strtoumax);
+extern intmax_t __REDIRECT_NTH (wcstoimax,
+ (const __gwchar_t *__restrict __nptr,
+ __gwchar_t **__restrict __endptr, int __base),
+ __isoc23_wcstoimax);
+extern uintmax_t __REDIRECT_NTH (wcstoumax,
+ (const __gwchar_t *__restrict __nptr,
+ __gwchar_t **__restrict __endptr, int __base),
+ __isoc23_wcstoumax);
+# else
+extern intmax_t __isoc23_strtoimax (const char *__restrict __nptr,
+ char **__restrict __endptr, int __base)
+ __THROW;
+extern uintmax_t __isoc23_strtoumax (const char *__restrict __nptr,
+ char ** __restrict __endptr, int __base)
+ __THROW;
+extern intmax_t __isoc23_wcstoimax (const __gwchar_t *__restrict __nptr,
+ __gwchar_t **__restrict __endptr,
+ int __base)
+ __THROW;
+extern uintmax_t __isoc23_wcstoumax (const __gwchar_t *__restrict __nptr,
+ __gwchar_t ** __restrict __endptr,
+ int __base)
+ __THROW;
+# define strtoimax __isoc23_strtoimax
+# define strtoumax __isoc23_strtoumax
+# define wcstoimax __isoc23_wcstoimax
+# define wcstoumax __isoc23_wcstoumax
+# endif
+#endif
+
__END_DECLS
#endif /* inttypes.h */
@@ -208,6 +208,71 @@ extern unsigned long long int strtoull (const char *__restrict __nptr,
__THROW __nonnull ((1));
#endif /* ISO C99 or use MISC. */
+/* Versions of the above functions that handle '0b' and '0B' prefixes
+ in base 0 or 2. */
+#if __GLIBC_USE (C2X_STRTOL)
+# ifdef __REDIRECT
+extern long int __REDIRECT_NTH (strtol, (const char *__restrict __nptr,
+ char **__restrict __endptr,
+ int __base), __isoc23_strtol)
+ __nonnull ((1));
+extern unsigned long int __REDIRECT_NTH (strtoul,
+ (const char *__restrict __nptr,
+ char **__restrict __endptr,
+ int __base), __isoc23_strtoul)
+ __nonnull ((1));
+# ifdef __USE_MISC
+__extension__
+extern long long int __REDIRECT_NTH (strtoq, (const char *__restrict __nptr,
+ char **__restrict __endptr,
+ int __base), __isoc23_strtoll)
+ __nonnull ((1));
+__extension__
+extern unsigned long long int __REDIRECT_NTH (strtouq,
+ (const char *__restrict __nptr,
+ char **__restrict __endptr,
+ int __base), __isoc23_strtoull)
+ __nonnull ((1));
+# endif
+__extension__
+extern long long int __REDIRECT_NTH (strtoll, (const char *__restrict __nptr,
+ char **__restrict __endptr,
+ int __base), __isoc23_strtoll)
+ __nonnull ((1));
+__extension__
+extern unsigned long long int __REDIRECT_NTH (strtoull,
+ (const char *__restrict __nptr,
+ char **__restrict __endptr,
+ int __base), __isoc23_strtoull)
+ __nonnull ((1));
+# else
+extern long int __isoc23_strtol (const char *__restrict __nptr,
+ char **__restrict __endptr, int __base)
+ __THROW __nonnull ((1));
+extern unsigned long int __isoc23_strtoul (const char *__restrict __nptr,
+ char **__restrict __endptr,
+ int __base)
+ __THROW __nonnull ((1));
+__extension__
+extern long long int __isoc23_strtoll (const char *__restrict __nptr,
+ char **__restrict __endptr, int __base)
+ __THROW __nonnull ((1));
+__extension__
+extern unsigned long long int __isoc23_strtoull (const char *__restrict __nptr,
+ char **__restrict __endptr,
+ int __base)
+ __THROW __nonnull ((1));
+# define strtol __isoc23_strtol
+# define strtoul __isoc23_strtoul
+# ifdef __USE_MISC
+# define strtoq __isoc23_strtoll
+# define strtouq __isoc23_strtoull
+# endif
+# define strtoll __isoc23_strtoll
+# define strtoull __isoc23_strtoull
+# endif
+#endif
+
/* Convert a floating-point number to a string. */
#if __GLIBC_USE (IEC_60559_BFP_EXT_C2X)
extern int strfromd (char *__dest, size_t __size, const char *__format,
@@ -293,6 +358,60 @@ extern unsigned long long int strtoull_l (const char *__restrict __nptr,
int __base, locale_t __loc)
__THROW __nonnull ((1, 4));
+/* Versions of the above functions that handle '0b' and '0B' prefixes
+ in base 0 or 2. */
+# if __GLIBC_USE (C2X_STRTOL)
+# ifdef __REDIRECT
+extern long int __REDIRECT_NTH (strtol_l, (const char *__restrict __nptr,
+ char **__restrict __endptr,
+ int __base, locale_t __loc),
+ __isoc23_strtol_l)
+ __nonnull ((1, 4));
+extern unsigned long int __REDIRECT_NTH (strtoul_l,
+ (const char *__restrict __nptr,
+ char **__restrict __endptr,
+ int __base, locale_t __loc),
+ __isoc23_strtoul_l)
+ __nonnull ((1, 4));
+__extension__
+extern long long int __REDIRECT_NTH (strtoll_l, (const char *__restrict __nptr,
+ char **__restrict __endptr,
+ int __base,
+ locale_t __loc),
+ __isoc23_strtoll_l)
+ __nonnull ((1, 4));
+__extension__
+extern unsigned long long int __REDIRECT_NTH (strtoull_l,
+ (const char *__restrict __nptr,
+ char **__restrict __endptr,
+ int __base, locale_t __loc),
+ __isoc23_strtoull_l)
+ __nonnull ((1, 4));
+# else
+extern long int __isoc23_strtol_l (const char *__restrict __nptr,
+ char **__restrict __endptr, int __base,
+ locale_t __loc) __THROW __nonnull ((1, 4));
+extern unsigned long int __isoc23_strtoul_l (const char *__restrict __nptr,
+ char **__restrict __endptr,
+ int __base, locale_t __loc)
+ __THROW __nonnull ((1, 4));
+__extension__
+extern long long int __isoc23_strtoll_l (const char *__restrict __nptr,
+ char **__restrict __endptr,
+ int __base, locale_t __loc)
+ __THROW __nonnull ((1, 4));
+__extension__
+extern unsigned long long int __isoc23_strtoull_l (const char *__restrict __nptr,
+ char **__restrict __endptr,
+ int __base, locale_t __loc)
+ __THROW __nonnull ((1, 4));
+# define strtol_l __isoc23_strtol_l
+# define strtoul_l __isoc23_strtoul_l
+# define strtoll_l __isoc23_strtoll_l
+# define strtoull_l __isoc23_strtoull_l
+# endif
+# endif
+
extern double strtod_l (const char *__restrict __nptr,
char **__restrict __endptr, locale_t __loc)
__THROW __nonnull ((1, 3));
@@ -19,4 +19,4 @@
#define STRING_TYPE char
#define L_(Ch) Ch
#define STRTOULL(S, E, B) ____strtoull_l_internal ((S), (E), (B), 0, \
- _nl_C_locobj_ptr)
+ 0, _nl_C_locobj_ptr)
@@ -19,4 +19,4 @@
#define STRING_TYPE wchar_t
#define L_(Ch) L##Ch
#define STRTOULL(S, E, B) ____wcstoull_l_internal ((S), (E), (B), 0, \
- _nl_C_locobj_ptr)
+ 0, _nl_C_locobj_ptr)
@@ -16,6 +16,9 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
+#include <features.h>
+#undef __GLIBC_USE_C2X_STRTOL
+#define __GLIBC_USE_C2X_STRTOL 0
#include <stdlib.h>
#include <wchar.h>
#include <locale/localeinfo.h>
@@ -32,17 +35,21 @@
# ifdef QUAD
# define strtol wcstoull
# define __strtol_l __wcstoull_l
+# define __isoc23_strtol __isoc23_wcstoull
# else
# define strtol wcstoul
# define __strtol_l __wcstoul_l
+# define __isoc23_strtol __isoc23_wcstoul
# endif
# else
# ifdef QUAD
# define strtol strtoull
# define __strtol_l __strtoull_l
+# define __isoc23_strtol __isoc23_strtoull
# else
# define strtol strtoul
# define __strtol_l __strtoul_l
+# define __isoc23_strtol __isoc23_strtoul
# endif
# endif
#else
@@ -50,14 +57,17 @@
# ifdef QUAD
# define strtol wcstoll
# define __strtol_l __wcstoll_l
+# define __isoc23_strtol __isoc23_wcstoll
# else
# define strtol wcstol
# define __strtol_l __wcstol_l
+# define __isoc23_strtol __isoc23_wcstol
# endif
# else
# ifdef QUAD
# define strtol strtoll
# define __strtol_l __strtoll_l
+# define __isoc23_strtol __isoc23_strtoll
# endif
# endif
#endif
@@ -88,14 +98,15 @@
extern INT INTERNAL (__strtol_l) (const STRING_TYPE *, STRING_TYPE **, int,
- int, locale_t);
+ int, int, locale_t);
INT
INTERNAL (strtol) (const STRING_TYPE *nptr, STRING_TYPE **endptr,
int base, int group)
{
- return INTERNAL (__strtol_l) (nptr, endptr, base, group, _NL_CURRENT_LOCALE);
+ return INTERNAL (__strtol_l) (nptr, endptr, base, group, 0,
+ _NL_CURRENT_LOCALE);
}
libc_hidden_def (INTERNAL (strtol))
@@ -103,7 +114,14 @@ libc_hidden_def (INTERNAL (strtol))
INT
__strtol (const STRING_TYPE *nptr, STRING_TYPE **endptr, int base)
{
- return INTERNAL (__strtol_l) (nptr, endptr, base, 0, _NL_CURRENT_LOCALE);
+ return INTERNAL (__strtol_l) (nptr, endptr, base, 0, 0, _NL_CURRENT_LOCALE);
}
weak_alias (__strtol, strtol)
libc_hidden_weak (strtol)
+
+INT
+__isoc23_strtol (const STRING_TYPE *nptr, STRING_TYPE **endptr, int base)
+{
+ return INTERNAL (__strtol_l) (nptr, endptr, base, 0, 1, _NL_CURRENT_LOCALE);
+}
+libc_hidden_def (__isoc23_strtol)
@@ -16,6 +16,9 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
+#include <features.h>
+#undef __GLIBC_USE_C2X_STRTOL
+#define __GLIBC_USE_C2X_STRTOL 0
#if HAVE_CONFIG_H
# include <config.h>
@@ -61,28 +64,36 @@
# ifdef USE_WIDE_CHAR
# ifdef QUAD
# define strtol_l wcstoull_l
+# define __isoc23_strtol_l __isoc23_wcstoull_l
# else
# define strtol_l wcstoul_l
+# define __isoc23_strtol_l __isoc23_wcstoul_l
# endif
# else
# ifdef QUAD
# define strtol_l strtoull_l
+# define __isoc23_strtol_l __isoc23_strtoull_l
# else
# define strtol_l strtoul_l
+# define __isoc23_strtol_l __isoc23_strtoul_l
# endif
# endif
#else
# ifdef USE_WIDE_CHAR
# ifdef QUAD
# define strtol_l wcstoll_l
+# define __isoc23_strtol_l __isoc23_wcstoll_l
# else
# define strtol_l wcstol_l
+# define __isoc23_strtol_l __isoc23_wcstol_l
# endif
# else
# ifdef QUAD
# define strtol_l strtoll_l
+# define __isoc23_strtol_l __isoc23_strtoll_l
# else
# define strtol_l strtol_l
+# define __isoc23_strtol_l __isoc23_strtol_l
# endif
# endif
#endif
@@ -216,12 +227,14 @@ extern const unsigned char __strtol_ull_rem_tab[] attribute_hidden;
If BASE is 0 the base is determined by the presence of a leading
zero, indicating octal or a leading "0x" or "0X", indicating hexadecimal.
If BASE is < 2 or > 36, it is reset to 10.
+ If BIN_CST is nonzero, binary constants starting "0b" or "0B" are accepted
+ in base 0 and 2.
If ENDPTR is not NULL, a pointer to the character after the last
one converted is stored in *ENDPTR. */
INT
INTERNAL (__strtol_l) (const STRING_TYPE *nptr, STRING_TYPE **endptr,
- int base, int group, locale_t loc)
+ int base, int group, int bin_cst, locale_t loc)
{
int negative;
unsigned LONG int cutoff;
@@ -311,6 +324,11 @@ INTERNAL (__strtol_l) (const STRING_TYPE *nptr, STRING_TYPE **endptr,
s += 2;
base = 16;
}
+ else if (bin_cst && (base == 0 || base == 2) && TOUPPER (s[1]) == L_('B'))
+ {
+ s += 2;
+ base = 2;
+ }
else if (base == 0)
base = 8;
}
@@ -543,7 +561,15 @@ weak_function
__strtol_l (const STRING_TYPE *nptr, STRING_TYPE **endptr,
int base, locale_t loc)
{
- return INTERNAL (__strtol_l) (nptr, endptr, base, 0, loc);
+ return INTERNAL (__strtol_l) (nptr, endptr, base, 0, 0, loc);
}
libc_hidden_def (__strtol_l)
weak_alias (__strtol_l, strtol_l)
+
+INT
+__isoc23_strtol_l (const STRING_TYPE *nptr, STRING_TYPE **endptr,
+ int base, locale_t loc)
+{
+ return INTERNAL (__strtol_l) (nptr, endptr, base, 0, 1, loc);
+}
+libc_hidden_def (__isoc23_strtol_l)
@@ -31,4 +31,5 @@ compat_symbol (libc, __strtoll_internal, __strtoq_internal, GLIBC_2_0);
# endif
weak_alias (strtoll, strtoq)
weak_alias (strtoll, strtoimax)
+weak_alias (__isoc23_strtoll, __isoc23_strtoimax)
#endif
@@ -18,9 +18,12 @@
#define QUAD 1
+#include <features.h>
+#undef __GLIBC_USE_C2X_STRTOL
+#define __GLIBC_USE_C2X_STRTOL 0
#include <locale.h>
extern long long int ____strtoll_l_internal (const char *, char **, int, int,
- locale_t);
+ int, locale_t);
#include <strtol_l.c>
@@ -18,9 +18,12 @@
#define UNSIGNED 1
+#include <features.h>
+#undef __GLIBC_USE_C2X_STRTOL
+#define __GLIBC_USE_C2X_STRTOL 0
#include <locale.h>
extern unsigned long int ____strtoul_l_internal (const char *, char **, int,
- int, locale_t);
+ int, int, locale_t);
#include "strtol_l.c"
@@ -31,4 +31,5 @@ compat_symbol (libc, __strtoull_internal, __strtouq_internal, GLIBC_2_0);
# endif
weak_alias (strtoull, strtouq)
weak_alias (strtoull, strtoumax)
+weak_alias (__isoc23_strtoull, __isoc23_strtoumax)
#endif
@@ -19,9 +19,13 @@
#define QUAD 1
#define UNSIGNED 1
+#include <features.h>
+#undef __GLIBC_USE_C2X_STRTOL
+#define __GLIBC_USE_C2X_STRTOL 0
#include <locale.h>
extern unsigned long long int ____strtoull_l_internal (const char *, char **,
- int, int, locale_t);
+ int, int, int,
+ locale_t);
#include <strtol_l.c>
new file mode 100644
@@ -0,0 +1,29 @@
+/* Test strtol functions with C2X binary integers (narrow strings,
+ no extensions to C11).
+ Copyright (C) 2022 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#undef _GNU_SOURCE
+
+#define CHAR char
+#define FNPFX strto
+#define L_(C) C
+#define TEST_C2X 0
+#define TEST_Q 0
+#define TEST_LOCALE 0
+
+#include <tst-strtol-binary-main.c>
new file mode 100644
@@ -0,0 +1,32 @@
+/* Test strtol functions with C2X binary integers (narrow strings,
+ no extensions).
+ Copyright (C) 2022 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+/* Some versions of GCC supported for building glibc do not support
+ -std=c2x. */
+#undef _GNU_SOURCE
+#define _ISOC2X_SOURCE
+
+#define CHAR char
+#define FNPFX strto
+#define L_(C) C
+#define TEST_C2X 1
+#define TEST_Q 0
+#define TEST_LOCALE 0
+
+#include <tst-strtol-binary-main.c>
new file mode 100644
@@ -0,0 +1,34 @@
+/* Test strtol functions with C2X binary integers (narrow strings, GNU
+ extensions, C2X strtol features disabled).
+ Copyright (C) 2022 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#include <features.h>
+/* This file tests the old versions of GNU extension functions, which
+ are not normally available to new binaries because GNU extensions
+ normally imply C2X strtol features. */
+#undef __GLIBC_USE_C2X_STRTOL
+#define __GLIBC_USE_C2X_STRTOL 0
+
+#define CHAR char
+#define FNPFX strto
+#define L_(C) C
+#define TEST_C2X 0
+#define TEST_Q 1
+#define TEST_LOCALE 1
+
+#include <tst-strtol-binary-main.c>
new file mode 100644
@@ -0,0 +1,27 @@
+/* Test strtol functions with C2X binary integers (narrow strings, GNU
+ extensions).
+ Copyright (C) 2022 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#define CHAR char
+#define FNPFX strto
+#define L_(C) C
+#define TEST_C2X 1
+#define TEST_Q 1
+#define TEST_LOCALE 1
+
+#include <tst-strtol-binary-main.c>
new file mode 100644
@@ -0,0 +1,123 @@
+/* Test strtol functions with C2X binary integers.
+ Copyright (C) 2022 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#include <inttypes.h>
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <wchar.h>
+
+#include <support/check.h>
+
+#define CONCAT_(X, Y) X ## Y
+#define CONCAT(X, Y) CONCAT_ (X, Y)
+#define FNX(FN) CONCAT (FNPFX, FN)
+
+#define CHECK_RES(ARG, RES, EP, EXPECTED) \
+ do \
+ { \
+ if (TEST_C2X) \
+ { \
+ TEST_COMPARE ((RES), EXPECTED); \
+ TEST_COMPARE (*(EP), 0); \
+ } \
+ else \
+ { \
+ TEST_COMPARE ((RES), 0); \
+ TEST_VERIFY ((EP) == ((ARG)[0] == L_('-') \
+ ? (ARG) + 2 \
+ : (ARG) + 1)); \
+ } \
+ } \
+ while (0)
+
+static void
+one_check (const CHAR *s, int expected)
+{
+ CHAR *ep;
+ long int ret_l;
+ unsigned long int ret_ul;
+ long long int ret_ll;
+ unsigned long long int ret_ull;
+ ret_l = FNX (l) (s, &ep, 0);
+ CHECK_RES (s, ret_l, ep, (long int) expected);
+ ret_l = FNX (l) (s, &ep, 2);
+ CHECK_RES (s, ret_l, ep, (long int) expected);
+ ret_ul = FNX (ul) (s, &ep, 0);
+ CHECK_RES (s, ret_ul, ep, (unsigned long int) expected);
+ ret_ul = FNX (ul) (s, &ep, 2);
+ CHECK_RES (s, ret_ul, ep, (unsigned long int) expected);
+ ret_ll = FNX (ll) (s, &ep, 0);
+ CHECK_RES (s, ret_ll, ep, (long long int) expected);
+ ret_ll = FNX (ll) (s, &ep, 2);
+ CHECK_RES (s, ret_ll, ep, (long long int) expected);
+ ret_ull = FNX (ull) (s, &ep, 0);
+ CHECK_RES (s, ret_ull, ep, (unsigned long long int) expected);
+ ret_ull = FNX (ull) (s, &ep, 2);
+ CHECK_RES (s, ret_ull, ep, (unsigned long long int) expected);
+ ret_ll = FNX (imax) (s, &ep, 0);
+ CHECK_RES (s, ret_ll, ep, (long long int) expected);
+ ret_ll = FNX (imax) (s, &ep, 2);
+ CHECK_RES (s, ret_ll, ep, (long long int) expected);
+ ret_ull = FNX (umax) (s, &ep, 0);
+ CHECK_RES (s, ret_ull, ep, (unsigned long long int) expected);
+ ret_ull = FNX (umax) (s, &ep, 2);
+ CHECK_RES (s, ret_ull, ep, (unsigned long long int) expected);
+#if TEST_Q
+ ret_ll = FNX (q) (s, &ep, 0);
+ CHECK_RES (s, ret_ll, ep, (long long int) expected);
+ ret_ll = FNX (q) (s, &ep, 2);
+ CHECK_RES (s, ret_ll, ep, (long long int) expected);
+ ret_ull = FNX (uq) (s, &ep, 0);
+ CHECK_RES (s, ret_ull, ep, (unsigned long long int) expected);
+ ret_ull = FNX (uq) (s, &ep, 2);
+ CHECK_RES (s, ret_ull, ep, (unsigned long long int) expected);
+#endif
+#if TEST_LOCALE
+ locale_t loc = newlocale (LC_NUMERIC_MASK, "C", (locale_t) 0);
+ TEST_VERIFY_EXIT (loc != (locale_t) 0);
+ ret_l = FNX (l_l) (s, &ep, 0, loc);
+ CHECK_RES (s, ret_l, ep, (long int) expected);
+ ret_l = FNX (l_l) (s, &ep, 2, loc);
+ CHECK_RES (s, ret_l, ep, (long int) expected);
+ ret_ul = FNX (ul_l) (s, &ep, 0, loc);
+ CHECK_RES (s, ret_ul, ep, (unsigned long int) expected);
+ ret_ul = FNX (ul_l) (s, &ep, 2, loc);
+ CHECK_RES (s, ret_ul, ep, (unsigned long int) expected);
+ ret_ll = FNX (ll_l) (s, &ep, 0, loc);
+ CHECK_RES (s, ret_ll, ep, (long long int) expected);
+ ret_ll = FNX (ll_l) (s, &ep, 2, loc);
+ CHECK_RES (s, ret_ll, ep, (long long int) expected);
+ ret_ull = FNX (ull_l) (s, &ep, 0, loc);
+ CHECK_RES (s, ret_ull, ep, (unsigned long long int) expected);
+ ret_ull = FNX (ull_l) (s, &ep, 2, loc);
+ CHECK_RES (s, ret_ull, ep, (unsigned long long int) expected);
+#endif
+}
+
+static int
+do_test (void)
+{
+ one_check (L_("0b101"), 5);
+ one_check (L_("0B101"), 5);
+ one_check (L_("-0b11111"), -31);
+ one_check (L_("-0B11111"), -31);
+ return 0;
+}
+
+#include <support/test-driver.c>
@@ -2294,6 +2294,26 @@ GLIBC_2.36 arc4random_buf F
GLIBC_2.36 arc4random_uniform F
GLIBC_2.36 c8rtomb F
GLIBC_2.36 mbrtoc8 F
+GLIBC_2.37 __isoc23_strtoimax F
+GLIBC_2.37 __isoc23_strtol F
+GLIBC_2.37 __isoc23_strtol_l F
+GLIBC_2.37 __isoc23_strtoll F
+GLIBC_2.37 __isoc23_strtoll_l F
+GLIBC_2.37 __isoc23_strtoul F
+GLIBC_2.37 __isoc23_strtoul_l F
+GLIBC_2.37 __isoc23_strtoull F
+GLIBC_2.37 __isoc23_strtoull_l F
+GLIBC_2.37 __isoc23_strtoumax F
+GLIBC_2.37 __isoc23_wcstoimax F
+GLIBC_2.37 __isoc23_wcstol F
+GLIBC_2.37 __isoc23_wcstol_l F
+GLIBC_2.37 __isoc23_wcstoll F
+GLIBC_2.37 __isoc23_wcstoll_l F
+GLIBC_2.37 __isoc23_wcstoul F
+GLIBC_2.37 __isoc23_wcstoul_l F
+GLIBC_2.37 __isoc23_wcstoull F
+GLIBC_2.37 __isoc23_wcstoull_l F
+GLIBC_2.37 __isoc23_wcstoumax F
GLIBC_2.4 __confstr_chk F
GLIBC_2.4 __fgets_chk F
GLIBC_2.4 __fgets_unlocked_chk F
@@ -2633,3 +2633,23 @@ 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.37 __isoc23_strtoimax F
+GLIBC_2.37 __isoc23_strtol F
+GLIBC_2.37 __isoc23_strtol_l F
+GLIBC_2.37 __isoc23_strtoll F
+GLIBC_2.37 __isoc23_strtoll_l F
+GLIBC_2.37 __isoc23_strtoul F
+GLIBC_2.37 __isoc23_strtoul_l F
+GLIBC_2.37 __isoc23_strtoull F
+GLIBC_2.37 __isoc23_strtoull_l F
+GLIBC_2.37 __isoc23_strtoumax F
+GLIBC_2.37 __isoc23_wcstoimax F
+GLIBC_2.37 __isoc23_wcstol F
+GLIBC_2.37 __isoc23_wcstol_l F
+GLIBC_2.37 __isoc23_wcstoll F
+GLIBC_2.37 __isoc23_wcstoll_l F
+GLIBC_2.37 __isoc23_wcstoul F
+GLIBC_2.37 __isoc23_wcstoul_l F
+GLIBC_2.37 __isoc23_wcstoull F
+GLIBC_2.37 __isoc23_wcstoull_l F
+GLIBC_2.37 __isoc23_wcstoumax F
@@ -2730,6 +2730,26 @@ 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.37 __isoc23_strtoimax F
+GLIBC_2.37 __isoc23_strtol F
+GLIBC_2.37 __isoc23_strtol_l F
+GLIBC_2.37 __isoc23_strtoll F
+GLIBC_2.37 __isoc23_strtoll_l F
+GLIBC_2.37 __isoc23_strtoul F
+GLIBC_2.37 __isoc23_strtoul_l F
+GLIBC_2.37 __isoc23_strtoull F
+GLIBC_2.37 __isoc23_strtoull_l F
+GLIBC_2.37 __isoc23_strtoumax F
+GLIBC_2.37 __isoc23_wcstoimax F
+GLIBC_2.37 __isoc23_wcstol F
+GLIBC_2.37 __isoc23_wcstol_l F
+GLIBC_2.37 __isoc23_wcstoll F
+GLIBC_2.37 __isoc23_wcstoll_l F
+GLIBC_2.37 __isoc23_wcstoul F
+GLIBC_2.37 __isoc23_wcstoul_l F
+GLIBC_2.37 __isoc23_wcstoull F
+GLIBC_2.37 __isoc23_wcstoull_l F
+GLIBC_2.37 __isoc23_wcstoumax F
GLIBC_2.4 _IO_fprintf F
GLIBC_2.4 _IO_printf F
GLIBC_2.4 _IO_sprintf F
@@ -2394,3 +2394,23 @@ 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.37 __isoc23_strtoimax F
+GLIBC_2.37 __isoc23_strtol F
+GLIBC_2.37 __isoc23_strtol_l F
+GLIBC_2.37 __isoc23_strtoll F
+GLIBC_2.37 __isoc23_strtoll_l F
+GLIBC_2.37 __isoc23_strtoul F
+GLIBC_2.37 __isoc23_strtoul_l F
+GLIBC_2.37 __isoc23_strtoull F
+GLIBC_2.37 __isoc23_strtoull_l F
+GLIBC_2.37 __isoc23_strtoumax F
+GLIBC_2.37 __isoc23_wcstoimax F
+GLIBC_2.37 __isoc23_wcstol F
+GLIBC_2.37 __isoc23_wcstol_l F
+GLIBC_2.37 __isoc23_wcstoll F
+GLIBC_2.37 __isoc23_wcstoll_l F
+GLIBC_2.37 __isoc23_wcstoul F
+GLIBC_2.37 __isoc23_wcstoul_l F
+GLIBC_2.37 __isoc23_wcstoull F
+GLIBC_2.37 __isoc23_wcstoull_l F
+GLIBC_2.37 __isoc23_wcstoumax F
@@ -513,6 +513,26 @@ 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.37 __isoc23_strtoimax F
+GLIBC_2.37 __isoc23_strtol F
+GLIBC_2.37 __isoc23_strtol_l F
+GLIBC_2.37 __isoc23_strtoll F
+GLIBC_2.37 __isoc23_strtoll_l F
+GLIBC_2.37 __isoc23_strtoul F
+GLIBC_2.37 __isoc23_strtoul_l F
+GLIBC_2.37 __isoc23_strtoull F
+GLIBC_2.37 __isoc23_strtoull_l F
+GLIBC_2.37 __isoc23_strtoumax F
+GLIBC_2.37 __isoc23_wcstoimax F
+GLIBC_2.37 __isoc23_wcstol F
+GLIBC_2.37 __isoc23_wcstol_l F
+GLIBC_2.37 __isoc23_wcstoll F
+GLIBC_2.37 __isoc23_wcstoll_l F
+GLIBC_2.37 __isoc23_wcstoul F
+GLIBC_2.37 __isoc23_wcstoul_l F
+GLIBC_2.37 __isoc23_wcstoull F
+GLIBC_2.37 __isoc23_wcstoull_l F
+GLIBC_2.37 __isoc23_wcstoumax F
GLIBC_2.37 __ppoll64_chk F
GLIBC_2.4 _Exit F
GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
@@ -510,6 +510,26 @@ 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.37 __isoc23_strtoimax F
+GLIBC_2.37 __isoc23_strtol F
+GLIBC_2.37 __isoc23_strtol_l F
+GLIBC_2.37 __isoc23_strtoll F
+GLIBC_2.37 __isoc23_strtoll_l F
+GLIBC_2.37 __isoc23_strtoul F
+GLIBC_2.37 __isoc23_strtoul_l F
+GLIBC_2.37 __isoc23_strtoull F
+GLIBC_2.37 __isoc23_strtoull_l F
+GLIBC_2.37 __isoc23_strtoumax F
+GLIBC_2.37 __isoc23_wcstoimax F
+GLIBC_2.37 __isoc23_wcstol F
+GLIBC_2.37 __isoc23_wcstol_l F
+GLIBC_2.37 __isoc23_wcstoll F
+GLIBC_2.37 __isoc23_wcstoll_l F
+GLIBC_2.37 __isoc23_wcstoul F
+GLIBC_2.37 __isoc23_wcstoul_l F
+GLIBC_2.37 __isoc23_wcstoull F
+GLIBC_2.37 __isoc23_wcstoull_l F
+GLIBC_2.37 __isoc23_wcstoumax F
GLIBC_2.37 __ppoll64_chk F
GLIBC_2.4 _Exit F
GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
@@ -2669,4 +2669,24 @@ 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.37 __isoc23_strtoimax F
+GLIBC_2.37 __isoc23_strtol F
+GLIBC_2.37 __isoc23_strtol_l F
+GLIBC_2.37 __isoc23_strtoll F
+GLIBC_2.37 __isoc23_strtoll_l F
+GLIBC_2.37 __isoc23_strtoul F
+GLIBC_2.37 __isoc23_strtoul_l F
+GLIBC_2.37 __isoc23_strtoull F
+GLIBC_2.37 __isoc23_strtoull_l F
+GLIBC_2.37 __isoc23_strtoumax F
+GLIBC_2.37 __isoc23_wcstoimax F
+GLIBC_2.37 __isoc23_wcstol F
+GLIBC_2.37 __isoc23_wcstol_l F
+GLIBC_2.37 __isoc23_wcstoll F
+GLIBC_2.37 __isoc23_wcstoll_l F
+GLIBC_2.37 __isoc23_wcstoul F
+GLIBC_2.37 __isoc23_wcstoul_l F
+GLIBC_2.37 __isoc23_wcstoull F
+GLIBC_2.37 __isoc23_wcstoull_l F
+GLIBC_2.37 __isoc23_wcstoumax F
GLIBC_2.37 __ppoll64_chk F
@@ -2618,6 +2618,26 @@ 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.37 __isoc23_strtoimax F
+GLIBC_2.37 __isoc23_strtol F
+GLIBC_2.37 __isoc23_strtol_l F
+GLIBC_2.37 __isoc23_strtoll F
+GLIBC_2.37 __isoc23_strtoll_l F
+GLIBC_2.37 __isoc23_strtoul F
+GLIBC_2.37 __isoc23_strtoul_l F
+GLIBC_2.37 __isoc23_strtoull F
+GLIBC_2.37 __isoc23_strtoull_l F
+GLIBC_2.37 __isoc23_strtoumax F
+GLIBC_2.37 __isoc23_wcstoimax F
+GLIBC_2.37 __isoc23_wcstol F
+GLIBC_2.37 __isoc23_wcstol_l F
+GLIBC_2.37 __isoc23_wcstoll F
+GLIBC_2.37 __isoc23_wcstoll_l F
+GLIBC_2.37 __isoc23_wcstoul F
+GLIBC_2.37 __isoc23_wcstoul_l F
+GLIBC_2.37 __isoc23_wcstoull F
+GLIBC_2.37 __isoc23_wcstoull_l F
+GLIBC_2.37 __isoc23_wcstoumax F
GLIBC_2.37 __ppoll64_chk F
GLIBC_2.4 __confstr_chk F
GLIBC_2.4 __fgets_chk F
@@ -2802,6 +2802,26 @@ 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.37 __isoc23_strtoimax F
+GLIBC_2.37 __isoc23_strtol F
+GLIBC_2.37 __isoc23_strtol_l F
+GLIBC_2.37 __isoc23_strtoll F
+GLIBC_2.37 __isoc23_strtoll_l F
+GLIBC_2.37 __isoc23_strtoul F
+GLIBC_2.37 __isoc23_strtoul_l F
+GLIBC_2.37 __isoc23_strtoull F
+GLIBC_2.37 __isoc23_strtoull_l F
+GLIBC_2.37 __isoc23_strtoumax F
+GLIBC_2.37 __isoc23_wcstoimax F
+GLIBC_2.37 __isoc23_wcstol F
+GLIBC_2.37 __isoc23_wcstol_l F
+GLIBC_2.37 __isoc23_wcstoll F
+GLIBC_2.37 __isoc23_wcstoll_l F
+GLIBC_2.37 __isoc23_wcstoul F
+GLIBC_2.37 __isoc23_wcstoul_l F
+GLIBC_2.37 __isoc23_wcstoull F
+GLIBC_2.37 __isoc23_wcstoull_l F
+GLIBC_2.37 __isoc23_wcstoumax F
GLIBC_2.37 __ppoll64_chk F
GLIBC_2.4 __confstr_chk F
GLIBC_2.4 __fgets_chk F
@@ -2568,6 +2568,26 @@ 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.37 __isoc23_strtoimax F
+GLIBC_2.37 __isoc23_strtol F
+GLIBC_2.37 __isoc23_strtol_l F
+GLIBC_2.37 __isoc23_strtoll F
+GLIBC_2.37 __isoc23_strtoll_l F
+GLIBC_2.37 __isoc23_strtoul F
+GLIBC_2.37 __isoc23_strtoul_l F
+GLIBC_2.37 __isoc23_strtoull F
+GLIBC_2.37 __isoc23_strtoull_l F
+GLIBC_2.37 __isoc23_strtoumax F
+GLIBC_2.37 __isoc23_wcstoimax F
+GLIBC_2.37 __isoc23_wcstol F
+GLIBC_2.37 __isoc23_wcstol_l F
+GLIBC_2.37 __isoc23_wcstoll F
+GLIBC_2.37 __isoc23_wcstoll_l F
+GLIBC_2.37 __isoc23_wcstoul F
+GLIBC_2.37 __isoc23_wcstoul_l F
+GLIBC_2.37 __isoc23_wcstoull F
+GLIBC_2.37 __isoc23_wcstoull_l F
+GLIBC_2.37 __isoc23_wcstoumax F
GLIBC_2.4 __confstr_chk F
GLIBC_2.4 __fgets_chk F
GLIBC_2.4 __fgets_unlocked_chk F
@@ -2154,3 +2154,23 @@ GLIBC_2.36 wprintf F
GLIBC_2.36 write F
GLIBC_2.36 writev F
GLIBC_2.36 wscanf F
+GLIBC_2.37 __isoc23_strtoimax F
+GLIBC_2.37 __isoc23_strtol F
+GLIBC_2.37 __isoc23_strtol_l F
+GLIBC_2.37 __isoc23_strtoll F
+GLIBC_2.37 __isoc23_strtoll_l F
+GLIBC_2.37 __isoc23_strtoul F
+GLIBC_2.37 __isoc23_strtoul_l F
+GLIBC_2.37 __isoc23_strtoull F
+GLIBC_2.37 __isoc23_strtoull_l F
+GLIBC_2.37 __isoc23_strtoumax F
+GLIBC_2.37 __isoc23_wcstoimax F
+GLIBC_2.37 __isoc23_wcstol F
+GLIBC_2.37 __isoc23_wcstol_l F
+GLIBC_2.37 __isoc23_wcstoll F
+GLIBC_2.37 __isoc23_wcstoll_l F
+GLIBC_2.37 __isoc23_wcstoul F
+GLIBC_2.37 __isoc23_wcstoul_l F
+GLIBC_2.37 __isoc23_wcstoull F
+GLIBC_2.37 __isoc23_wcstoull_l F
+GLIBC_2.37 __isoc23_wcstoumax F
@@ -514,6 +514,26 @@ 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.37 __isoc23_strtoimax F
+GLIBC_2.37 __isoc23_strtol F
+GLIBC_2.37 __isoc23_strtol_l F
+GLIBC_2.37 __isoc23_strtoll F
+GLIBC_2.37 __isoc23_strtoll_l F
+GLIBC_2.37 __isoc23_strtoul F
+GLIBC_2.37 __isoc23_strtoul_l F
+GLIBC_2.37 __isoc23_strtoull F
+GLIBC_2.37 __isoc23_strtoull_l F
+GLIBC_2.37 __isoc23_strtoumax F
+GLIBC_2.37 __isoc23_wcstoimax F
+GLIBC_2.37 __isoc23_wcstol F
+GLIBC_2.37 __isoc23_wcstol_l F
+GLIBC_2.37 __isoc23_wcstoll F
+GLIBC_2.37 __isoc23_wcstoll_l F
+GLIBC_2.37 __isoc23_wcstoul F
+GLIBC_2.37 __isoc23_wcstoul_l F
+GLIBC_2.37 __isoc23_wcstoull F
+GLIBC_2.37 __isoc23_wcstoull_l F
+GLIBC_2.37 __isoc23_wcstoumax F
GLIBC_2.37 __ppoll64_chk F
GLIBC_2.4 _Exit F
GLIBC_2.4 _IO_2_1_stderr_ D 0x98
@@ -2745,6 +2745,26 @@ 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.37 __isoc23_strtoimax F
+GLIBC_2.37 __isoc23_strtol F
+GLIBC_2.37 __isoc23_strtol_l F
+GLIBC_2.37 __isoc23_strtoll F
+GLIBC_2.37 __isoc23_strtoll_l F
+GLIBC_2.37 __isoc23_strtoul F
+GLIBC_2.37 __isoc23_strtoul_l F
+GLIBC_2.37 __isoc23_strtoull F
+GLIBC_2.37 __isoc23_strtoull_l F
+GLIBC_2.37 __isoc23_strtoumax F
+GLIBC_2.37 __isoc23_wcstoimax F
+GLIBC_2.37 __isoc23_wcstol F
+GLIBC_2.37 __isoc23_wcstol_l F
+GLIBC_2.37 __isoc23_wcstoll F
+GLIBC_2.37 __isoc23_wcstoll_l F
+GLIBC_2.37 __isoc23_wcstoul F
+GLIBC_2.37 __isoc23_wcstoul_l F
+GLIBC_2.37 __isoc23_wcstoull F
+GLIBC_2.37 __isoc23_wcstoull_l F
+GLIBC_2.37 __isoc23_wcstoumax F
GLIBC_2.37 __ppoll64_chk F
GLIBC_2.4 __confstr_chk F
GLIBC_2.4 __fgets_chk F
@@ -2718,4 +2718,24 @@ 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.37 __isoc23_strtoimax F
+GLIBC_2.37 __isoc23_strtol F
+GLIBC_2.37 __isoc23_strtol_l F
+GLIBC_2.37 __isoc23_strtoll F
+GLIBC_2.37 __isoc23_strtoll_l F
+GLIBC_2.37 __isoc23_strtoul F
+GLIBC_2.37 __isoc23_strtoul_l F
+GLIBC_2.37 __isoc23_strtoull F
+GLIBC_2.37 __isoc23_strtoull_l F
+GLIBC_2.37 __isoc23_strtoumax F
+GLIBC_2.37 __isoc23_wcstoimax F
+GLIBC_2.37 __isoc23_wcstol F
+GLIBC_2.37 __isoc23_wcstol_l F
+GLIBC_2.37 __isoc23_wcstoll F
+GLIBC_2.37 __isoc23_wcstoll_l F
+GLIBC_2.37 __isoc23_wcstoul F
+GLIBC_2.37 __isoc23_wcstoul_l F
+GLIBC_2.37 __isoc23_wcstoull F
+GLIBC_2.37 __isoc23_wcstoull_l F
+GLIBC_2.37 __isoc23_wcstoumax F
GLIBC_2.37 __ppoll64_chk F
@@ -2715,4 +2715,24 @@ 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.37 __isoc23_strtoimax F
+GLIBC_2.37 __isoc23_strtol F
+GLIBC_2.37 __isoc23_strtol_l F
+GLIBC_2.37 __isoc23_strtoll F
+GLIBC_2.37 __isoc23_strtoll_l F
+GLIBC_2.37 __isoc23_strtoul F
+GLIBC_2.37 __isoc23_strtoul_l F
+GLIBC_2.37 __isoc23_strtoull F
+GLIBC_2.37 __isoc23_strtoull_l F
+GLIBC_2.37 __isoc23_strtoumax F
+GLIBC_2.37 __isoc23_wcstoimax F
+GLIBC_2.37 __isoc23_wcstol F
+GLIBC_2.37 __isoc23_wcstol_l F
+GLIBC_2.37 __isoc23_wcstoll F
+GLIBC_2.37 __isoc23_wcstoll_l F
+GLIBC_2.37 __isoc23_wcstoul F
+GLIBC_2.37 __isoc23_wcstoul_l F
+GLIBC_2.37 __isoc23_wcstoull F
+GLIBC_2.37 __isoc23_wcstoull_l F
+GLIBC_2.37 __isoc23_wcstoumax F
GLIBC_2.37 __ppoll64_chk F
@@ -2710,6 +2710,26 @@ 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.37 __isoc23_strtoimax F
+GLIBC_2.37 __isoc23_strtol F
+GLIBC_2.37 __isoc23_strtol_l F
+GLIBC_2.37 __isoc23_strtoll F
+GLIBC_2.37 __isoc23_strtoll_l F
+GLIBC_2.37 __isoc23_strtoul F
+GLIBC_2.37 __isoc23_strtoul_l F
+GLIBC_2.37 __isoc23_strtoull F
+GLIBC_2.37 __isoc23_strtoull_l F
+GLIBC_2.37 __isoc23_strtoumax F
+GLIBC_2.37 __isoc23_wcstoimax F
+GLIBC_2.37 __isoc23_wcstol F
+GLIBC_2.37 __isoc23_wcstol_l F
+GLIBC_2.37 __isoc23_wcstoll F
+GLIBC_2.37 __isoc23_wcstoll_l F
+GLIBC_2.37 __isoc23_wcstoul F
+GLIBC_2.37 __isoc23_wcstoul_l F
+GLIBC_2.37 __isoc23_wcstoull F
+GLIBC_2.37 __isoc23_wcstoull_l F
+GLIBC_2.37 __isoc23_wcstoumax F
GLIBC_2.37 __ppoll64_chk F
GLIBC_2.4 __confstr_chk F
GLIBC_2.4 __fgets_chk F
@@ -2708,6 +2708,26 @@ 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.37 __isoc23_strtoimax F
+GLIBC_2.37 __isoc23_strtol F
+GLIBC_2.37 __isoc23_strtol_l F
+GLIBC_2.37 __isoc23_strtoll F
+GLIBC_2.37 __isoc23_strtoll_l F
+GLIBC_2.37 __isoc23_strtoul F
+GLIBC_2.37 __isoc23_strtoul_l F
+GLIBC_2.37 __isoc23_strtoull F
+GLIBC_2.37 __isoc23_strtoull_l F
+GLIBC_2.37 __isoc23_strtoumax F
+GLIBC_2.37 __isoc23_wcstoimax F
+GLIBC_2.37 __isoc23_wcstol F
+GLIBC_2.37 __isoc23_wcstol_l F
+GLIBC_2.37 __isoc23_wcstoll F
+GLIBC_2.37 __isoc23_wcstoll_l F
+GLIBC_2.37 __isoc23_wcstoul F
+GLIBC_2.37 __isoc23_wcstoul_l F
+GLIBC_2.37 __isoc23_wcstoull F
+GLIBC_2.37 __isoc23_wcstoull_l F
+GLIBC_2.37 __isoc23_wcstoumax F
GLIBC_2.37 __ppoll64_chk F
GLIBC_2.4 __confstr_chk F
GLIBC_2.4 __fgets_chk F
@@ -2716,6 +2716,26 @@ 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.37 __isoc23_strtoimax F
+GLIBC_2.37 __isoc23_strtol F
+GLIBC_2.37 __isoc23_strtol_l F
+GLIBC_2.37 __isoc23_strtoll F
+GLIBC_2.37 __isoc23_strtoll_l F
+GLIBC_2.37 __isoc23_strtoul F
+GLIBC_2.37 __isoc23_strtoul_l F
+GLIBC_2.37 __isoc23_strtoull F
+GLIBC_2.37 __isoc23_strtoull_l F
+GLIBC_2.37 __isoc23_strtoumax F
+GLIBC_2.37 __isoc23_wcstoimax F
+GLIBC_2.37 __isoc23_wcstol F
+GLIBC_2.37 __isoc23_wcstol_l F
+GLIBC_2.37 __isoc23_wcstoll F
+GLIBC_2.37 __isoc23_wcstoll_l F
+GLIBC_2.37 __isoc23_wcstoul F
+GLIBC_2.37 __isoc23_wcstoul_l F
+GLIBC_2.37 __isoc23_wcstoull F
+GLIBC_2.37 __isoc23_wcstoull_l F
+GLIBC_2.37 __isoc23_wcstoumax F
GLIBC_2.37 __ppoll64_chk F
GLIBC_2.4 __confstr_chk F
GLIBC_2.4 __fgets_chk F
@@ -2619,6 +2619,26 @@ 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.37 __isoc23_strtoimax F
+GLIBC_2.37 __isoc23_strtol F
+GLIBC_2.37 __isoc23_strtol_l F
+GLIBC_2.37 __isoc23_strtoll F
+GLIBC_2.37 __isoc23_strtoll_l F
+GLIBC_2.37 __isoc23_strtoul F
+GLIBC_2.37 __isoc23_strtoul_l F
+GLIBC_2.37 __isoc23_strtoull F
+GLIBC_2.37 __isoc23_strtoull_l F
+GLIBC_2.37 __isoc23_strtoumax F
+GLIBC_2.37 __isoc23_wcstoimax F
+GLIBC_2.37 __isoc23_wcstol F
+GLIBC_2.37 __isoc23_wcstol_l F
+GLIBC_2.37 __isoc23_wcstoll F
+GLIBC_2.37 __isoc23_wcstoll_l F
+GLIBC_2.37 __isoc23_wcstoul F
+GLIBC_2.37 __isoc23_wcstoul_l F
+GLIBC_2.37 __isoc23_wcstoull F
+GLIBC_2.37 __isoc23_wcstoull_l F
+GLIBC_2.37 __isoc23_wcstoumax F
GLIBC_2.4 __confstr_chk F
GLIBC_2.4 __fgets_chk F
GLIBC_2.4 __fgets_unlocked_chk F
@@ -2757,4 +2757,24 @@ 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.37 __isoc23_strtoimax F
+GLIBC_2.37 __isoc23_strtol F
+GLIBC_2.37 __isoc23_strtol_l F
+GLIBC_2.37 __isoc23_strtoll F
+GLIBC_2.37 __isoc23_strtoll_l F
+GLIBC_2.37 __isoc23_strtoul F
+GLIBC_2.37 __isoc23_strtoul_l F
+GLIBC_2.37 __isoc23_strtoull F
+GLIBC_2.37 __isoc23_strtoull_l F
+GLIBC_2.37 __isoc23_strtoumax F
+GLIBC_2.37 __isoc23_wcstoimax F
+GLIBC_2.37 __isoc23_wcstol F
+GLIBC_2.37 __isoc23_wcstol_l F
+GLIBC_2.37 __isoc23_wcstoll F
+GLIBC_2.37 __isoc23_wcstoll_l F
+GLIBC_2.37 __isoc23_wcstoul F
+GLIBC_2.37 __isoc23_wcstoul_l F
+GLIBC_2.37 __isoc23_wcstoull F
+GLIBC_2.37 __isoc23_wcstoull_l F
+GLIBC_2.37 __isoc23_wcstoumax F
GLIBC_2.37 __ppoll64_chk F
@@ -2140,3 +2140,23 @@ 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.37 __isoc23_strtoimax F
+GLIBC_2.37 __isoc23_strtol F
+GLIBC_2.37 __isoc23_strtol_l F
+GLIBC_2.37 __isoc23_strtoll F
+GLIBC_2.37 __isoc23_strtoll_l F
+GLIBC_2.37 __isoc23_strtoul F
+GLIBC_2.37 __isoc23_strtoul_l F
+GLIBC_2.37 __isoc23_strtoull F
+GLIBC_2.37 __isoc23_strtoull_l F
+GLIBC_2.37 __isoc23_strtoumax F
+GLIBC_2.37 __isoc23_wcstoimax F
+GLIBC_2.37 __isoc23_wcstol F
+GLIBC_2.37 __isoc23_wcstol_l F
+GLIBC_2.37 __isoc23_wcstoll F
+GLIBC_2.37 __isoc23_wcstoll_l F
+GLIBC_2.37 __isoc23_wcstoul F
+GLIBC_2.37 __isoc23_wcstoul_l F
+GLIBC_2.37 __isoc23_wcstoull F
+GLIBC_2.37 __isoc23_wcstoull_l F
+GLIBC_2.37 __isoc23_wcstoumax F
@@ -2772,6 +2772,26 @@ 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.37 __isoc23_strtoimax F
+GLIBC_2.37 __isoc23_strtol F
+GLIBC_2.37 __isoc23_strtol_l F
+GLIBC_2.37 __isoc23_strtoll F
+GLIBC_2.37 __isoc23_strtoll_l F
+GLIBC_2.37 __isoc23_strtoul F
+GLIBC_2.37 __isoc23_strtoul_l F
+GLIBC_2.37 __isoc23_strtoull F
+GLIBC_2.37 __isoc23_strtoull_l F
+GLIBC_2.37 __isoc23_strtoumax F
+GLIBC_2.37 __isoc23_wcstoimax F
+GLIBC_2.37 __isoc23_wcstol F
+GLIBC_2.37 __isoc23_wcstol_l F
+GLIBC_2.37 __isoc23_wcstoll F
+GLIBC_2.37 __isoc23_wcstoll_l F
+GLIBC_2.37 __isoc23_wcstoul F
+GLIBC_2.37 __isoc23_wcstoul_l F
+GLIBC_2.37 __isoc23_wcstoull F
+GLIBC_2.37 __isoc23_wcstoull_l F
+GLIBC_2.37 __isoc23_wcstoumax F
GLIBC_2.37 __ppoll64_chk F
GLIBC_2.4 _IO_fprintf F
GLIBC_2.4 _IO_printf F
@@ -2805,6 +2805,26 @@ 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.37 __isoc23_strtoimax F
+GLIBC_2.37 __isoc23_strtol F
+GLIBC_2.37 __isoc23_strtol_l F
+GLIBC_2.37 __isoc23_strtoll F
+GLIBC_2.37 __isoc23_strtoll_l F
+GLIBC_2.37 __isoc23_strtoul F
+GLIBC_2.37 __isoc23_strtoul_l F
+GLIBC_2.37 __isoc23_strtoull F
+GLIBC_2.37 __isoc23_strtoull_l F
+GLIBC_2.37 __isoc23_strtoumax F
+GLIBC_2.37 __isoc23_wcstoimax F
+GLIBC_2.37 __isoc23_wcstol F
+GLIBC_2.37 __isoc23_wcstol_l F
+GLIBC_2.37 __isoc23_wcstoll F
+GLIBC_2.37 __isoc23_wcstoll_l F
+GLIBC_2.37 __isoc23_wcstoul F
+GLIBC_2.37 __isoc23_wcstoul_l F
+GLIBC_2.37 __isoc23_wcstoull F
+GLIBC_2.37 __isoc23_wcstoull_l F
+GLIBC_2.37 __isoc23_wcstoumax F
GLIBC_2.37 __ppoll64_chk F
GLIBC_2.4 _IO_fprintf F
GLIBC_2.4 _IO_printf F
@@ -2527,6 +2527,26 @@ 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.37 __isoc23_strtoimax F
+GLIBC_2.37 __isoc23_strtol F
+GLIBC_2.37 __isoc23_strtol_l F
+GLIBC_2.37 __isoc23_strtoll F
+GLIBC_2.37 __isoc23_strtoll_l F
+GLIBC_2.37 __isoc23_strtoul F
+GLIBC_2.37 __isoc23_strtoul_l F
+GLIBC_2.37 __isoc23_strtoull F
+GLIBC_2.37 __isoc23_strtoull_l F
+GLIBC_2.37 __isoc23_strtoumax F
+GLIBC_2.37 __isoc23_wcstoimax F
+GLIBC_2.37 __isoc23_wcstol F
+GLIBC_2.37 __isoc23_wcstol_l F
+GLIBC_2.37 __isoc23_wcstoll F
+GLIBC_2.37 __isoc23_wcstoll_l F
+GLIBC_2.37 __isoc23_wcstoul F
+GLIBC_2.37 __isoc23_wcstoul_l F
+GLIBC_2.37 __isoc23_wcstoull F
+GLIBC_2.37 __isoc23_wcstoull_l F
+GLIBC_2.37 __isoc23_wcstoumax F
GLIBC_2.4 _IO_fprintf F
GLIBC_2.4 _IO_printf F
GLIBC_2.4 _IO_sprintf F
@@ -2829,3 +2829,23 @@ 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.37 __isoc23_strtoimax F
+GLIBC_2.37 __isoc23_strtol F
+GLIBC_2.37 __isoc23_strtol_l F
+GLIBC_2.37 __isoc23_strtoll F
+GLIBC_2.37 __isoc23_strtoll_l F
+GLIBC_2.37 __isoc23_strtoul F
+GLIBC_2.37 __isoc23_strtoul_l F
+GLIBC_2.37 __isoc23_strtoull F
+GLIBC_2.37 __isoc23_strtoull_l F
+GLIBC_2.37 __isoc23_strtoumax F
+GLIBC_2.37 __isoc23_wcstoimax F
+GLIBC_2.37 __isoc23_wcstol F
+GLIBC_2.37 __isoc23_wcstol_l F
+GLIBC_2.37 __isoc23_wcstoll F
+GLIBC_2.37 __isoc23_wcstoll_l F
+GLIBC_2.37 __isoc23_wcstoul F
+GLIBC_2.37 __isoc23_wcstoul_l F
+GLIBC_2.37 __isoc23_wcstoull F
+GLIBC_2.37 __isoc23_wcstoull_l F
+GLIBC_2.37 __isoc23_wcstoumax F
@@ -2396,3 +2396,23 @@ 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.37 __isoc23_strtoimax F
+GLIBC_2.37 __isoc23_strtol F
+GLIBC_2.37 __isoc23_strtol_l F
+GLIBC_2.37 __isoc23_strtoll F
+GLIBC_2.37 __isoc23_strtoll_l F
+GLIBC_2.37 __isoc23_strtoul F
+GLIBC_2.37 __isoc23_strtoul_l F
+GLIBC_2.37 __isoc23_strtoull F
+GLIBC_2.37 __isoc23_strtoull_l F
+GLIBC_2.37 __isoc23_strtoumax F
+GLIBC_2.37 __isoc23_wcstoimax F
+GLIBC_2.37 __isoc23_wcstol F
+GLIBC_2.37 __isoc23_wcstol_l F
+GLIBC_2.37 __isoc23_wcstoll F
+GLIBC_2.37 __isoc23_wcstoll_l F
+GLIBC_2.37 __isoc23_wcstoul F
+GLIBC_2.37 __isoc23_wcstoul_l F
+GLIBC_2.37 __isoc23_wcstoull F
+GLIBC_2.37 __isoc23_wcstoull_l F
+GLIBC_2.37 __isoc23_wcstoumax F
@@ -2596,3 +2596,23 @@ 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.37 __isoc23_strtoimax F
+GLIBC_2.37 __isoc23_strtol F
+GLIBC_2.37 __isoc23_strtol_l F
+GLIBC_2.37 __isoc23_strtoll F
+GLIBC_2.37 __isoc23_strtoll_l F
+GLIBC_2.37 __isoc23_strtoul F
+GLIBC_2.37 __isoc23_strtoul_l F
+GLIBC_2.37 __isoc23_strtoull F
+GLIBC_2.37 __isoc23_strtoull_l F
+GLIBC_2.37 __isoc23_strtoumax F
+GLIBC_2.37 __isoc23_wcstoimax F
+GLIBC_2.37 __isoc23_wcstol F
+GLIBC_2.37 __isoc23_wcstol_l F
+GLIBC_2.37 __isoc23_wcstoll F
+GLIBC_2.37 __isoc23_wcstoll_l F
+GLIBC_2.37 __isoc23_wcstoul F
+GLIBC_2.37 __isoc23_wcstoul_l F
+GLIBC_2.37 __isoc23_wcstoull F
+GLIBC_2.37 __isoc23_wcstoull_l F
+GLIBC_2.37 __isoc23_wcstoumax F
@@ -2770,6 +2770,26 @@ 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.37 __isoc23_strtoimax F
+GLIBC_2.37 __isoc23_strtol F
+GLIBC_2.37 __isoc23_strtol_l F
+GLIBC_2.37 __isoc23_strtoll F
+GLIBC_2.37 __isoc23_strtoll_l F
+GLIBC_2.37 __isoc23_strtoul F
+GLIBC_2.37 __isoc23_strtoul_l F
+GLIBC_2.37 __isoc23_strtoull F
+GLIBC_2.37 __isoc23_strtoull_l F
+GLIBC_2.37 __isoc23_strtoumax F
+GLIBC_2.37 __isoc23_wcstoimax F
+GLIBC_2.37 __isoc23_wcstol F
+GLIBC_2.37 __isoc23_wcstol_l F
+GLIBC_2.37 __isoc23_wcstoll F
+GLIBC_2.37 __isoc23_wcstoll_l F
+GLIBC_2.37 __isoc23_wcstoul F
+GLIBC_2.37 __isoc23_wcstoul_l F
+GLIBC_2.37 __isoc23_wcstoull F
+GLIBC_2.37 __isoc23_wcstoull_l F
+GLIBC_2.37 __isoc23_wcstoumax F
GLIBC_2.37 __ppoll64_chk F
GLIBC_2.4 _IO_fprintf F
GLIBC_2.4 _IO_printf F
@@ -2564,6 +2564,26 @@ 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.37 __isoc23_strtoimax F
+GLIBC_2.37 __isoc23_strtol F
+GLIBC_2.37 __isoc23_strtol_l F
+GLIBC_2.37 __isoc23_strtoll F
+GLIBC_2.37 __isoc23_strtoll_l F
+GLIBC_2.37 __isoc23_strtoul F
+GLIBC_2.37 __isoc23_strtoul_l F
+GLIBC_2.37 __isoc23_strtoull F
+GLIBC_2.37 __isoc23_strtoull_l F
+GLIBC_2.37 __isoc23_strtoumax F
+GLIBC_2.37 __isoc23_wcstoimax F
+GLIBC_2.37 __isoc23_wcstol F
+GLIBC_2.37 __isoc23_wcstol_l F
+GLIBC_2.37 __isoc23_wcstoll F
+GLIBC_2.37 __isoc23_wcstoll_l F
+GLIBC_2.37 __isoc23_wcstoul F
+GLIBC_2.37 __isoc23_wcstoul_l F
+GLIBC_2.37 __isoc23_wcstoull F
+GLIBC_2.37 __isoc23_wcstoull_l F
+GLIBC_2.37 __isoc23_wcstoumax F
GLIBC_2.4 _IO_fprintf F
GLIBC_2.4 _IO_printf F
GLIBC_2.4 _IO_sprintf F
@@ -2625,6 +2625,26 @@ 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.37 __isoc23_strtoimax F
+GLIBC_2.37 __isoc23_strtol F
+GLIBC_2.37 __isoc23_strtol_l F
+GLIBC_2.37 __isoc23_strtoll F
+GLIBC_2.37 __isoc23_strtoll_l F
+GLIBC_2.37 __isoc23_strtoul F
+GLIBC_2.37 __isoc23_strtoul_l F
+GLIBC_2.37 __isoc23_strtoull F
+GLIBC_2.37 __isoc23_strtoull_l F
+GLIBC_2.37 __isoc23_strtoumax F
+GLIBC_2.37 __isoc23_wcstoimax F
+GLIBC_2.37 __isoc23_wcstol F
+GLIBC_2.37 __isoc23_wcstol_l F
+GLIBC_2.37 __isoc23_wcstoll F
+GLIBC_2.37 __isoc23_wcstoll_l F
+GLIBC_2.37 __isoc23_wcstoul F
+GLIBC_2.37 __isoc23_wcstoul_l F
+GLIBC_2.37 __isoc23_wcstoull F
+GLIBC_2.37 __isoc23_wcstoull_l F
+GLIBC_2.37 __isoc23_wcstoumax F
GLIBC_2.37 __ppoll64_chk F
GLIBC_2.4 __confstr_chk F
GLIBC_2.4 __fgets_chk F
@@ -2622,6 +2622,26 @@ 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.37 __isoc23_strtoimax F
+GLIBC_2.37 __isoc23_strtol F
+GLIBC_2.37 __isoc23_strtol_l F
+GLIBC_2.37 __isoc23_strtoll F
+GLIBC_2.37 __isoc23_strtoll_l F
+GLIBC_2.37 __isoc23_strtoul F
+GLIBC_2.37 __isoc23_strtoul_l F
+GLIBC_2.37 __isoc23_strtoull F
+GLIBC_2.37 __isoc23_strtoull_l F
+GLIBC_2.37 __isoc23_strtoumax F
+GLIBC_2.37 __isoc23_wcstoimax F
+GLIBC_2.37 __isoc23_wcstol F
+GLIBC_2.37 __isoc23_wcstol_l F
+GLIBC_2.37 __isoc23_wcstoll F
+GLIBC_2.37 __isoc23_wcstoll_l F
+GLIBC_2.37 __isoc23_wcstoul F
+GLIBC_2.37 __isoc23_wcstoul_l F
+GLIBC_2.37 __isoc23_wcstoull F
+GLIBC_2.37 __isoc23_wcstoull_l F
+GLIBC_2.37 __isoc23_wcstoumax F
GLIBC_2.37 __ppoll64_chk F
GLIBC_2.4 __confstr_chk F
GLIBC_2.4 __fgets_chk F
@@ -2765,6 +2765,26 @@ 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.37 __isoc23_strtoimax F
+GLIBC_2.37 __isoc23_strtol F
+GLIBC_2.37 __isoc23_strtol_l F
+GLIBC_2.37 __isoc23_strtoll F
+GLIBC_2.37 __isoc23_strtoll_l F
+GLIBC_2.37 __isoc23_strtoul F
+GLIBC_2.37 __isoc23_strtoul_l F
+GLIBC_2.37 __isoc23_strtoull F
+GLIBC_2.37 __isoc23_strtoull_l F
+GLIBC_2.37 __isoc23_strtoumax F
+GLIBC_2.37 __isoc23_wcstoimax F
+GLIBC_2.37 __isoc23_wcstol F
+GLIBC_2.37 __isoc23_wcstol_l F
+GLIBC_2.37 __isoc23_wcstoll F
+GLIBC_2.37 __isoc23_wcstoll_l F
+GLIBC_2.37 __isoc23_wcstoul F
+GLIBC_2.37 __isoc23_wcstoul_l F
+GLIBC_2.37 __isoc23_wcstoull F
+GLIBC_2.37 __isoc23_wcstoull_l F
+GLIBC_2.37 __isoc23_wcstoumax F
GLIBC_2.37 __ppoll64_chk F
GLIBC_2.4 _IO_fprintf F
GLIBC_2.4 _IO_printf F
@@ -2591,6 +2591,26 @@ 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.37 __isoc23_strtoimax F
+GLIBC_2.37 __isoc23_strtol F
+GLIBC_2.37 __isoc23_strtol_l F
+GLIBC_2.37 __isoc23_strtoll F
+GLIBC_2.37 __isoc23_strtoll_l F
+GLIBC_2.37 __isoc23_strtoul F
+GLIBC_2.37 __isoc23_strtoul_l F
+GLIBC_2.37 __isoc23_strtoull F
+GLIBC_2.37 __isoc23_strtoull_l F
+GLIBC_2.37 __isoc23_strtoumax F
+GLIBC_2.37 __isoc23_wcstoimax F
+GLIBC_2.37 __isoc23_wcstol F
+GLIBC_2.37 __isoc23_wcstol_l F
+GLIBC_2.37 __isoc23_wcstoll F
+GLIBC_2.37 __isoc23_wcstoll_l F
+GLIBC_2.37 __isoc23_wcstoul F
+GLIBC_2.37 __isoc23_wcstoul_l F
+GLIBC_2.37 __isoc23_wcstoull F
+GLIBC_2.37 __isoc23_wcstoull_l F
+GLIBC_2.37 __isoc23_wcstoumax F
GLIBC_2.4 __confstr_chk F
GLIBC_2.4 __fgets_chk F
GLIBC_2.4 __fgets_unlocked_chk F
@@ -2542,6 +2542,26 @@ 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.37 __isoc23_strtoimax F
+GLIBC_2.37 __isoc23_strtol F
+GLIBC_2.37 __isoc23_strtol_l F
+GLIBC_2.37 __isoc23_strtoll F
+GLIBC_2.37 __isoc23_strtoll_l F
+GLIBC_2.37 __isoc23_strtoul F
+GLIBC_2.37 __isoc23_strtoul_l F
+GLIBC_2.37 __isoc23_strtoull F
+GLIBC_2.37 __isoc23_strtoull_l F
+GLIBC_2.37 __isoc23_strtoumax F
+GLIBC_2.37 __isoc23_wcstoimax F
+GLIBC_2.37 __isoc23_wcstol F
+GLIBC_2.37 __isoc23_wcstol_l F
+GLIBC_2.37 __isoc23_wcstoll F
+GLIBC_2.37 __isoc23_wcstoll_l F
+GLIBC_2.37 __isoc23_wcstoul F
+GLIBC_2.37 __isoc23_wcstoul_l F
+GLIBC_2.37 __isoc23_wcstoull F
+GLIBC_2.37 __isoc23_wcstoull_l F
+GLIBC_2.37 __isoc23_wcstoumax F
GLIBC_2.4 __confstr_chk F
GLIBC_2.4 __fgets_chk F
GLIBC_2.4 __fgets_unlocked_chk F
@@ -2648,3 +2648,23 @@ 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.37 __isoc23_strtoimax F
+GLIBC_2.37 __isoc23_strtol F
+GLIBC_2.37 __isoc23_strtol_l F
+GLIBC_2.37 __isoc23_strtoll F
+GLIBC_2.37 __isoc23_strtoll_l F
+GLIBC_2.37 __isoc23_strtoul F
+GLIBC_2.37 __isoc23_strtoul_l F
+GLIBC_2.37 __isoc23_strtoull F
+GLIBC_2.37 __isoc23_strtoull_l F
+GLIBC_2.37 __isoc23_strtoumax F
+GLIBC_2.37 __isoc23_wcstoimax F
+GLIBC_2.37 __isoc23_wcstol F
+GLIBC_2.37 __isoc23_wcstol_l F
+GLIBC_2.37 __isoc23_wcstoll F
+GLIBC_2.37 __isoc23_wcstoll_l F
+GLIBC_2.37 __isoc23_wcstoul F
+GLIBC_2.37 __isoc23_wcstoul_l F
+GLIBC_2.37 __isoc23_wcstoull F
+GLIBC_2.37 __isoc23_wcstoull_l F
+GLIBC_2.37 __isoc23_wcstoumax F
@@ -2,12 +2,14 @@
#define __strtoll_internal __strtoll_internal_XXX
#define strtoll strtoll_XXX
#define strtoq strtoq_XXX
+#define __isoc23_strtoll __isoc23_strtoll_XXX
#include <stdlib/strtol.c>
#undef __strtoll_internal
#undef strtoll
#undef strtoq
+#undef __isoc23_strtoll
strong_alias (__strtol_internal, __strtoll_internal)
libc_hidden_ver (__strtol_internal, __strtoll_internal)
weak_alias (strtol, strtoll)
@@ -15,3 +17,6 @@ libc_hidden_ver (strtol, strtoll)
weak_alias (strtol, strtoq)
libc_hidden_ver (strtol, strtoq)
weak_alias (strtol, strtoimax)
+weak_alias (__isoc23_strtol, __isoc23_strtoll)
+libc_hidden_ver (__isoc23_strtol, __isoc23_strtoll)
+weak_alias (__isoc23_strtol, __isoc23_strtoimax)
@@ -2,13 +2,17 @@
#define ____strtoll_l_internal ____strtoll_l_internal_XXX
#define __strtoll_l __strtoll_l_XXX
#define strtoll_l strtoll_l_XXX
+#define __isoc23_strtoll_l __isoc23_strtoll_l_XXX
#include <stdlib/strtol_l.c>
#undef ____strtoll_l_internal
#undef __strtoll_l
#undef strtoll_l
+#undef __isoc23_strtoll_l
strong_alias (____strtol_l_internal, ____strtoll_l_internal)
libc_hidden_ver (____strtol_l_internal, ____strtoll_l_internal)
weak_alias (__strtol_l, __strtoll_l)
weak_alias (__strtol_l, strtoll_l)
+weak_alias (__isoc23_strtol_l, __isoc23_strtoll_l)
+libc_hidden_ver (__isoc23_strtol_l, __isoc23_strtoll_l)
@@ -2,14 +2,19 @@
#define __strtoull_internal __strtoull_internal_XXX
#define strtoull strtoull_XXX
#define strtouq strtouq_XXX
+#define __isoc23_strtoull __isoc23_strtoull_XXX
#include <stdlib/strtoul.c>
#undef __strtoull_internal
#undef strtoull
#undef strtouq
+#undef __isoc23_strtoull
strong_alias (__strtoul_internal, __strtoull_internal)
libc_hidden_ver (__strtoul_internal, __strtoull_internal)
weak_alias (strtoul, strtoull)
weak_alias (strtoul, strtouq)
weak_alias (strtoul, strtoumax)
+weak_alias (__isoc23_strtoul, __isoc23_strtoull)
+libc_hidden_ver (__isoc23_strtoul, __isoc23_strtoull)
+weak_alias (__isoc23_strtoul, __isoc23_strtoumax)
@@ -2,13 +2,17 @@
#define ____strtoull_l_internal ____strtoull_l_internal_XXX
#define __strtoull_l __strtoull_l_XXX
#define strtoull_l strtoull_l_XXX
+#define __isoc23_strtoull_l __isoc23_strtoull_l_XXX
#include <stdlib/strtoul_l.c>
#undef ____strtoull_l_internal
#undef __strtoull_l
#undef strtoull_l
+#undef __isoc23_strtoull_l
strong_alias (____strtoul_l_internal, ____strtoull_l_internal)
libc_hidden_ver (____strtoul_l_internal, ____strtoull_l_internal)
weak_alias (__strtoul_l, __strtoull_l)
weak_alias (__strtoul_l, strtoull_l)
+weak_alias (__isoc23_strtoul_l, __isoc23_strtoull_l)
+libc_hidden_ver (__isoc23_strtoul_l, __isoc23_strtoull_l)
@@ -2,14 +2,19 @@
#define __wcstoll_internal __wcstoll_internal_XXX
#define wcstoll wcstoll_XXX
#define wcstoq wcstoq_XXX
+#define __isoc23_wcstoll __isoc23_wcstoll_XXX
#include <wcsmbs/wcstol.c>
#undef __wcstoll_internal
#undef wcstoll
#undef wcstoq
+#undef __isoc23_wcstoll
strong_alias (__wcstol_internal, __wcstoll_internal)
libc_hidden_ver (__wcstol_internal, __wcstoll_internal)
weak_alias (wcstol, wcstoll)
weak_alias (wcstol, wcstoq)
weak_alias (wcstol, wcstoimax)
+weak_alias (__isoc23_wcstol, __isoc23_wcstoll)
+libc_hidden_ver (__isoc23_wcstol, __isoc23_wcstoll)
+weak_alias (__isoc23_wcstol, __isoc23_wcstoimax)
@@ -2,12 +2,16 @@
#define ____wcstoll_l_internal ____wcstoll_l_internal_XXX
#define __wcstoll_l ___wcstoll_l_XXX
#define wcstoll_l __wcstoll_l_XX
+#define __isoc23_wcstoll_l __isoc23_wcstoll_l_XXX
#include <wcsmbs/wcstol_l.c>
#undef ____wcstoll_l_internal
#undef __wcstoll_l
#undef wcstoll_l
+#undef __isoc23_wcstoll_l
strong_alias (____wcstol_l_internal, ____wcstoll_l_internal)
weak_alias (__wcstol_l, __wcstoll_l)
weak_alias (__wcstol_l, wcstoll_l)
+weak_alias (__isoc23_wcstol_l, __isoc23_wcstoll_l)
+libc_hidden_ver (__isoc23_wcstol_l, __isoc23_wcstoll_l)
@@ -2,14 +2,19 @@
#define __wcstoull_internal __wcstoull_internal_XXX
#define wcstoull wcstoull_XXX
#define wcstouq wcstouq_XXX
+#define __isoc23_wcstoull __isoc23_wcstoull_XXX
#include <wcsmbs/wcstoul.c>
#undef __wcstoull_internal
#undef wcstoull
#undef wcstouq
+#undef __isoc23_wcstoull
strong_alias (__wcstoul_internal, __wcstoull_internal)
libc_hidden_ver (__wcstoul_internal, __wcstoull_internal)
weak_alias (wcstoul, wcstoull)
weak_alias (wcstoul, wcstouq)
weak_alias (wcstoul, wcstoumax)
+weak_alias (__isoc23_wcstoul, __isoc23_wcstoull)
+libc_hidden_ver (__isoc23_wcstoul, __isoc23_wcstoull)
+weak_alias (__isoc23_wcstoul, __isoc23_wcstoumax)
@@ -2,12 +2,16 @@
#define ____wcstoull_l_internal ____wcstoull_l_internal_XXX
#define __wcstoull_l ___wcstoull_l_XXX
#define wcstoull_l __wcstoull_l_XXX
+#define __isoc23_wcstoull_l __isoc23_wcstoull_l_XXX
#include <wcsmbs/wcstoul_l.c>
#undef ____wcstoull_l_internal
#undef __wcstoull_l
#undef wcstoull_l
+#undef __isoc23_wcstoull_l
strong_alias (____wcstoul_l_internal, ____wcstoull_l_internal)
weak_alias (__wcstoul_l, __wcstoull_l)
weak_alias (__wcstoul_l, wcstoull_l)
+weak_alias (__isoc23_wcstoul_l, __isoc23_wcstoull_l)
+libc_hidden_ver (__isoc23_wcstoul_l, __isoc23_wcstoull_l)
@@ -55,7 +55,8 @@ tests := tst-wcstof wcsmbs-tst1 tst-wcsnlen tst-btowc tst-mbrtowc \
tst-wcstod-nan-sign tst-c16-surrogate tst-c32-state \
test-mbrtoc8 test-c8rtomb \
$(addprefix test-,$(strop-tests)) tst-mbstowcs \
- tst-wprintf-binary
+ tst-wprintf-binary tst-wcstol-binary-c11 tst-wcstol-binary-c2x \
+ tst-wcstol-binary-gnu11 tst-wcstol-binary-gnu2x
include ../Rules
@@ -122,3 +123,11 @@ CPPFLAGS-wcstold_l.c += -I../stdlib
$(objpfx)tst-wcstod-nan-locale: $(libm)
$(objpfx)tst-wcstod-nan-sign: $(libm)
+
+# Some versions of GCC supported for building glibc do not support -std=c2x
+# or -std=gnu2x, so the tests for those versions use -std=c11 and -std=gnu11
+# and then _ISOC2X_SOURCE is defined in the test as needed.
+CFLAGS-tst-wcstol-binary-c11.c += -std=c11
+CFLAGS-tst-wcstol-binary-c2x.c += -std=c11
+CFLAGS-tst-wcstol-binary-c11.c += -std=gnu11
+CFLAGS-tst-wcstol-binary-c2x.c += -std=gnu11
@@ -52,4 +52,8 @@ libc {
GLIBC_2.36 {
c8rtomb; mbrtoc8;
}
+ GLIBC_2.37 {
+ __isoc23_wcstol; __isoc23_wcstoll; __isoc23_wcstoul; __isoc23_wcstoull;
+ __isoc23_wcstoimax; __isoc23_wcstoumax;
+ }
}
new file mode 100644
@@ -0,0 +1,29 @@
+/* Test wcstol functions with C2X binary integers (wide strings,
+ no extensions to C11).
+ Copyright (C) 2022 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#undef _GNU_SOURCE
+
+#define CHAR wchar_t
+#define FNPFX wcsto
+#define L_(C) L ## C
+#define TEST_C2X 0
+#define TEST_Q 0
+#define TEST_LOCALE 0
+
+#include "../stdlib/tst-strtol-binary-main.c"
new file mode 100644
@@ -0,0 +1,32 @@
+/* Test wcstol functions with C2X binary integers (wide strings,
+ no extensions).
+ Copyright (C) 2022 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+/* Some versions of GCC supported for building glibc do not support
+ -std=c2x. */
+#undef _GNU_SOURCE
+#define _ISOC2X_SOURCE
+
+#define CHAR wchar_t
+#define FNPFX wcsto
+#define L_(C) L ## C
+#define TEST_C2X 1
+#define TEST_Q 0
+#define TEST_LOCALE 0
+
+#include "../stdlib/tst-strtol-binary-main.c"
new file mode 100644
@@ -0,0 +1,34 @@
+/* Test wcstol functions with C2X binary integers (wide strings, GNU
+ extensions, C2X wcstol features disabled).
+ Copyright (C) 2022 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#include <features.h>
+/* This file tests the old versions of GNU extension functions, which
+ are not normally available to new binaries because GNU extensions
+ normally imply C2X wcstol features. */
+#undef __GLIBC_USE_C2X_STRTOL
+#define __GLIBC_USE_C2X_STRTOL 0
+
+#define CHAR wchar_t
+#define FNPFX wcsto
+#define L_(C) L ## C
+#define TEST_C2X 0
+#define TEST_Q 1
+#define TEST_LOCALE 1
+
+#include "../stdlib/tst-strtol-binary-main.c"
new file mode 100644
@@ -0,0 +1,27 @@
+/* Test wcstol functions with C2X binary integers (wide strings, GNU
+ extensions).
+ Copyright (C) 2022 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#define CHAR wchar_t
+#define FNPFX wcsto
+#define L_(C) L ## C
+#define TEST_C2X 1
+#define TEST_Q 1
+#define TEST_LOCALE 1
+
+#include "../stdlib/tst-strtol-binary-main.c"
@@ -467,6 +467,67 @@ extern unsigned long long int wcstouq (const wchar_t *__restrict __nptr,
int __base) __THROW;
#endif /* Use GNU. */
+/* Versions of the above functions that handle '0b' and '0B' prefixes
+ in base 0 or 2. */
+#if __GLIBC_USE (C2X_STRTOL)
+# ifdef __REDIRECT
+extern long int __REDIRECT_NTH (wcstol, (const wchar_t *__restrict __nptr,
+ wchar_t **__restrict __endptr,
+ int __base), __isoc23_wcstol);
+extern unsigned long int __REDIRECT_NTH (wcstoul,
+ (const wchar_t *__restrict __nptr,
+ wchar_t **__restrict __endptr,
+ int __base), __isoc23_wcstoul);
+__extension__
+extern long long int __REDIRECT_NTH (wcstoll,
+ (const wchar_t *__restrict __nptr,
+ wchar_t **__restrict __endptr,
+ int __base), __isoc23_wcstoll);
+__extension__
+extern unsigned long long int __REDIRECT_NTH (wcstoull,
+ (const wchar_t *__restrict __nptr,
+ wchar_t **__restrict __endptr,
+ int __base), __isoc23_wcstoull);
+# ifdef __USE_GNU
+__extension__
+extern long long int __REDIRECT_NTH (wcstoq, (const wchar_t *__restrict __nptr,
+ wchar_t **__restrict __endptr,
+ int __base), __isoc23_wcstoll);
+__extension__
+extern unsigned long long int __REDIRECT_NTH (wcstouq,
+ (const wchar_t *__restrict __nptr,
+ wchar_t **__restrict __endptr,
+ int __base), __isoc23_wcstoull);
+# endif
+# else
+extern long int __isoc23_wcstol (const wchar_t *__restrict __nptr,
+ wchar_t **__restrict __endptr, int __base)
+ __THROW;
+extern unsigned long int __isoc23_wcstoul (const wchar_t *__restrict __nptr,
+ wchar_t **__restrict __endptr,
+ int __base)
+ __THROW;
+__extension__
+extern long long int __isoc23_wcstoll (const wchar_t *__restrict __nptr,
+ wchar_t **__restrict __endptr,
+ int __base)
+ __THROW;
+__extension__
+extern unsigned long long int __isoc23_wcstoull (const wchar_t *__restrict __nptr,
+ wchar_t **__restrict __endptr,
+ int __base)
+ __THROW;
+# define wcstol __isoc23_wcstol
+# define wcstoul __isoc23_wcstoul
+# define wcstoll __isoc23_wcstoll
+# define wcstoull __isoc23_wcstoull
+# ifdef __USE_GNU
+# define wcstoq __isoc23_wcstoll
+# define wcstouq __isoc23_wcstoull
+# endif
+# endif
+#endif
+
#ifdef __USE_GNU
/* Parallel versions of the functions above which take the locale to
use as an additional parameter. These are GNU extensions inspired
@@ -490,6 +551,56 @@ extern unsigned long long int wcstoull_l (const wchar_t *__restrict __nptr,
int __base, locale_t __loc)
__THROW;
+/* Versions of the above functions that handle '0b' and '0B' prefixes
+ in base 0 or 2. */
+# if __GLIBC_USE (C2X_STRTOL)
+# ifdef __REDIRECT
+extern long int __REDIRECT_NTH (wcstol_l, (const wchar_t *__restrict __nptr,
+ wchar_t **__restrict __endptr,
+ int __base, locale_t __loc),
+ __isoc23_wcstol_l);
+extern unsigned long int __REDIRECT_NTH (wcstoul_l,
+ (const wchar_t *__restrict __nptr,
+ wchar_t **__restrict __endptr,
+ int __base, locale_t __loc),
+ __isoc23_wcstoul_l);
+__extension__
+extern long long int __REDIRECT_NTH (wcstoll_l,
+ (const wchar_t *__restrict __nptr,
+ wchar_t **__restrict __endptr,
+ int __base, locale_t __loc),
+ __isoc23_wcstoll_l);
+__extension__
+extern unsigned long long int __REDIRECT_NTH (wcstoull_l,
+ (const wchar_t *__restrict __nptr,
+ wchar_t **__restrict __endptr,
+ int __base, locale_t __loc),
+ __isoc23_wcstoull_l);
+# else
+extern long int __isoc23_wcstol_l (const wchar_t *__restrict __nptr,
+ wchar_t **__restrict __endptr, int __base,
+ locale_t __loc) __THROW;
+extern unsigned long int __isoc23_wcstoul_l (const wchar_t *__restrict __nptr,
+ wchar_t **__restrict __endptr,
+ int __base, locale_t __loc)
+ __THROW;
+__extension__
+extern long long int __isoc23_wcstoll_l (const wchar_t *__restrict __nptr,
+ wchar_t **__restrict __endptr,
+ int __base, locale_t __loc)
+ __THROW;
+__extension__
+extern unsigned long long int __isoc23_wcstoull_l (const wchar_t *__restrict __nptr,
+ wchar_t **__restrict __endptr,
+ int __base, locale_t __loc)
+ __THROW;
+# define wcstol_l __isoc23_wcstol_l
+# define wcstoul_l __isoc23_wcstoul_l
+# define wcstoll_l __isoc23_wcstoll_l
+# define wcstoull_l __isoc23_wcstoull_l
+# endif
+# endif
+
extern double wcstod_l (const wchar_t *__restrict __nptr,
wchar_t **__restrict __endptr, locale_t __loc)
__THROW;
@@ -16,6 +16,9 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
+#include <features.h>
+#undef __GLIBC_USE_C2X_STRTOL
+#define __GLIBC_USE_C2X_STRTOL 0
#define __need_wchar_t
#include <stddef.h>
#include <locale.h>
@@ -22,3 +22,4 @@
weak_alias (wcstoll, wcstoq)
weak_alias (wcstoll, wcstoimax)
+weak_alias (__isoc23_wcstoll, __isoc23_wcstoimax)
@@ -16,6 +16,9 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
+#include <features.h>
+#undef __GLIBC_USE_C2X_STRTOL
+#define __GLIBC_USE_C2X_STRTOL 0
#define __need_wchar_t
#include <stddef.h>
#include <locale.h>
@@ -16,6 +16,9 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
+#include <features.h>
+#undef __GLIBC_USE_C2X_STRTOL
+#define __GLIBC_USE_C2X_STRTOL 0
#define __need_wchar_t
#include <stddef.h>
#include <locale.h>
@@ -22,3 +22,4 @@
weak_alias (wcstoull, wcstouq)
weak_alias (wcstoull, wcstoumax)
+weak_alias (__isoc23_wcstoull, __isoc23_wcstoumax)
@@ -16,6 +16,9 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
+#include <features.h>
+#undef __GLIBC_USE_C2X_STRTOL
+#define __GLIBC_USE_C2X_STRTOL 0
#define __need_wchar_t
#include <stddef.h>
#include <locale.h>