aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS7
-rw-r--r--include/features.h12
-rw-r--r--include/stdlib.h46
-rw-r--r--include/wchar.h50
-rw-r--r--inet/inet6_scopeid_pton.c2
-rw-r--r--locale/Versions10
-rw-r--r--manual/arith.texi9
-rw-r--r--resolv/Makefile1
-rw-r--r--resolv/inet_addr.c2
-rw-r--r--resolv/tst-inet_addr-binary.c30
-rw-r--r--stdlib/Makefile12
-rw-r--r--stdlib/Versions8
-rw-r--r--stdlib/inttypes.h40
-rw-r--r--stdlib/stdlib.h119
-rw-r--r--stdlib/strtod_nan_narrow.h2
-rw-r--r--stdlib/strtod_nan_wide.h2
-rw-r--r--stdlib/strtol.c26
-rw-r--r--stdlib/strtol_l.c30
-rw-r--r--stdlib/strtoll.c1
-rw-r--r--stdlib/strtoll_l.c6
-rw-r--r--stdlib/strtoul_l.c6
-rw-r--r--stdlib/strtoull.c1
-rw-r--r--stdlib/strtoull_l.c7
-rw-r--r--stdlib/tst-strtol-binary-c11.c29
-rw-r--r--stdlib/tst-strtol-binary-c2x.c32
-rw-r--r--stdlib/tst-strtol-binary-gnu11.c34
-rw-r--r--stdlib/tst-strtol-binary-gnu2x.c27
-rw-r--r--stdlib/tst-strtol-binary-main.c151
-rw-r--r--sysdeps/mach/hurd/i386/libc.abilist20
-rw-r--r--sysdeps/unix/sysv/linux/aarch64/libc.abilist20
-rw-r--r--sysdeps/unix/sysv/linux/alpha/libc.abilist20
-rw-r--r--sysdeps/unix/sysv/linux/arc/libc.abilist20
-rw-r--r--sysdeps/unix/sysv/linux/arm/be/libc.abilist20
-rw-r--r--sysdeps/unix/sysv/linux/arm/le/libc.abilist20
-rw-r--r--sysdeps/unix/sysv/linux/csky/libc.abilist20
-rw-r--r--sysdeps/unix/sysv/linux/hppa/libc.abilist20
-rw-r--r--sysdeps/unix/sysv/linux/i386/libc.abilist20
-rw-r--r--sysdeps/unix/sysv/linux/ia64/libc.abilist20
-rw-r--r--sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist20
-rw-r--r--sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist20
-rw-r--r--sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist20
-rw-r--r--sysdeps/unix/sysv/linux/microblaze/be/libc.abilist20
-rw-r--r--sysdeps/unix/sysv/linux/microblaze/le/libc.abilist20
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist20
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist20
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist20
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist20
-rw-r--r--sysdeps/unix/sysv/linux/nios2/libc.abilist20
-rw-r--r--sysdeps/unix/sysv/linux/or1k/libc.abilist20
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist20
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist20
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist20
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist20
-rw-r--r--sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist20
-rw-r--r--sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist20
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist20
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist20
-rw-r--r--sysdeps/unix/sysv/linux/sh/be/libc.abilist20
-rw-r--r--sysdeps/unix/sysv/linux/sh/le/libc.abilist20
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist20
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist20
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/64/libc.abilist20
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist20
-rw-r--r--sysdeps/wordsize-64/strtol.c5
-rw-r--r--sysdeps/wordsize-64/strtol_l.c4
-rw-r--r--sysdeps/wordsize-64/strtoul.c5
-rw-r--r--sysdeps/wordsize-64/strtoul_l.c4
-rw-r--r--sysdeps/wordsize-64/wcstol.c5
-rw-r--r--sysdeps/wordsize-64/wcstol_l.c4
-rw-r--r--sysdeps/wordsize-64/wcstoul.c5
-rw-r--r--sysdeps/wordsize-64/wcstoul_l.c4
-rw-r--r--wcsmbs/Makefile14
-rw-r--r--wcsmbs/Versions8
-rw-r--r--wcsmbs/tst-wcstol-binary-c11.c29
-rw-r--r--wcsmbs/tst-wcstol-binary-c2x.c32
-rw-r--r--wcsmbs/tst-wcstol-binary-gnu11.c34
-rw-r--r--wcsmbs/tst-wcstol-binary-gnu2x.c27
-rw-r--r--wcsmbs/wchar.h111
-rw-r--r--wcsmbs/wcstol_l.c3
-rw-r--r--wcsmbs/wcstoll.c1
-rw-r--r--wcsmbs/wcstoll_l.c3
-rw-r--r--wcsmbs/wcstoul_l.c3
-rw-r--r--wcsmbs/wcstoull.c1
-rw-r--r--wcsmbs/wcstoull_l.c3
84 files changed, 1683 insertions, 24 deletions
diff --git a/NEWS b/NEWS
index a7979a9cd3..080a2060d4 100644
--- a/NEWS
+++ b/NEWS
@@ -9,7 +9,12 @@ Version 2.38
Major new features:
- [Add new features here]
+* 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:
diff --git a/include/features.h b/include/features.h
index 26534f2b52..9eae86a2d8 100644
--- a/include/features.h
+++ b/include/features.h
@@ -151,6 +151,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. */
@@ -464,6 +465,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>
diff --git a/include/stdlib.h b/include/stdlib.h
index db51f4a4f6..7deb8193d7 100644
--- a/include/stdlib.h
+++ b/include/stdlib.h
@@ -1,6 +1,7 @@
#ifndef _STDLIB_H
#ifndef _ISOMAC
+# include <stdbool.h>
# include <stddef.h>
#endif
@@ -35,6 +36,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