diff options
Diffstat (limited to 'wcsmbs')
-rw-r--r-- | wcsmbs/Makefile | 14 | ||||
-rw-r--r-- | wcsmbs/Versions | 8 | ||||
-rw-r--r-- | wcsmbs/tst-wcstol-binary-c11.c | 29 | ||||
-rw-r--r-- | wcsmbs/tst-wcstol-binary-c2x.c | 32 | ||||
-rw-r--r-- | wcsmbs/tst-wcstol-binary-gnu11.c | 34 | ||||
-rw-r--r-- | wcsmbs/tst-wcstol-binary-gnu2x.c | 27 | ||||
-rw-r--r-- | wcsmbs/wchar.h | 111 | ||||
-rw-r--r-- | wcsmbs/wcstol_l.c | 3 | ||||
-rw-r--r-- | wcsmbs/wcstoll.c | 1 | ||||
-rw-r--r-- | wcsmbs/wcstoll_l.c | 3 | ||||
-rw-r--r-- | wcsmbs/wcstoul_l.c | 3 | ||||
-rw-r--r-- | wcsmbs/wcstoull.c | 1 | ||||
-rw-r--r-- | wcsmbs/wcstoull_l.c | 3 |
13 files changed, 268 insertions, 1 deletions
diff --git a/wcsmbs/Makefile b/wcsmbs/Makefile index 740d87c994..16ece4c110 100644 --- a/wcsmbs/Makefile +++ b/wcsmbs/Makefile @@ -55,7 +55,11 @@ 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 +126,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-gnu11.c += -std=gnu11 +CFLAGS-tst-wcstol-binary-gnu2x.c += -std=gnu11 diff --git a/wcsmbs/Versions b/wcsmbs/Versions index ec28acfb73..1866cd8d6e 100644 --- a/wcsmbs/Versions +++ b/wcsmbs/Versions @@ -52,4 +52,12 @@ libc { GLIBC_2.36 { c8rtomb; mbrtoc8; } + GLIBC_2.38 { + __isoc23_wcstol; + __isoc23_wcstoll; + __isoc23_wcstoul; + __isoc23_wcstoull; + __isoc23_wcstoimax; + __isoc23_wcstoumax; + } } diff --git a/wcsmbs/tst-wcstol-binary-c11.c b/wcsmbs/tst-wcstol-binary-c11.c new file mode 100644 index 0000000000..bff1d879f0 --- /dev/null +++ b/wcsmbs/tst-wcstol-binary-c11.c @@ -0,0 +1,29 @@ +/* Test wcstol functions with C2X binary integers (wide strings, + no extensions to C11). + Copyright (C) 2022-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#undef _GNU_SOURCE + +#define CHAR wchar_t +#define 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" diff --git a/wcsmbs/tst-wcstol-binary-c2x.c b/wcsmbs/tst-wcstol-binary-c2x.c new file mode 100644 index 0000000000..0f8ef44854 --- /dev/null +++ b/wcsmbs/tst-wcstol-binary-c2x.c @@ -0,0 +1,32 @@ +/* Test wcstol functions with C2X binary integers (wide strings, + no extensions). + Copyright (C) 2022-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +/* Some versions of GCC supported for building glibc do not support + -std=c2x. */ +#undef _GNU_SOURCE +#define _ISOC2X_SOURCE + +#define CHAR wchar_t +#define 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" diff --git a/wcsmbs/tst-wcstol-binary-gnu11.c b/wcsmbs/tst-wcstol-binary-gnu11.c new file mode 100644 index 0000000000..189f217563 --- /dev/null +++ b/wcsmbs/tst-wcstol-binary-gnu11.c @@ -0,0 +1,34 @@ +/* Test wcstol functions with C2X binary integers (wide strings, GNU + extensions, C2X wcstol features disabled). + Copyright (C) 2022-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <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" diff --git a/wcsmbs/tst-wcstol-binary-gnu2x.c b/wcsmbs/tst-wcstol-binary-gnu2x.c new file mode 100644 index 0000000000..707d4076f1 --- /dev/null +++ b/wcsmbs/tst-wcstol-binary-gnu2x.c @@ -0,0 +1,27 @@ +/* Test wcstol functions with C2X binary integers (wide strings, GNU + extensions). + Copyright (C) 2022-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#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" diff --git a/wcsmbs/wchar.h b/wcsmbs/wchar.h index 69e920b8c2..cde0d32b0a 100644 --- a/wcsmbs/wchar.h +++ b/wcsmbs/wchar.h @@ -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; diff --git a/wcsmbs/wcstol_l.c b/wcsmbs/wcstol_l.c index a6cc73a549..c6403e6ee3 100644 --- a/wcsmbs/wcstol_l.c +++ b/wcsmbs/wcstol_l.c @@ -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> diff --git a/wcsmbs/wcstoll.c b/wcsmbs/wcstoll.c index 8f28b96663..c4a66bb92f 100644 --- a/wcsmbs/wcstoll.c +++ b/wcsmbs/wcstoll.c @@ -22,3 +22,4 @@ weak_alias (wcstoll, wcstoq) weak_alias (wcstoll, wcstoimax) +weak_alias (__isoc23_wcstoll, __isoc23_wcstoimax) diff --git a/wcsmbs/wcstoll_l.c b/wcsmbs/wcstoll_l.c index c6c57d8586..d445f7425e 100644 --- a/wcsmbs/wcstoll_l.c +++ b/wcsmbs/wcstoll_l.c @@ -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> diff --git a/wcsmbs/wcstoul_l.c b/wcsmbs/wcstoul_l.c index 98dc8204ec..2c61d41777 100644 --- a/wcsmbs/wcstoul_l.c +++ b/wcsmbs/wcstoul_l.c @@ -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> diff --git a/wcsmbs/wcstoull.c b/wcsmbs/wcstoull.c index 77d1e5d5d8..f37a42f2c8 100644 --- a/wcsmbs/wcstoull.c +++ b/wcsmbs/wcstoull.c @@ -22,3 +22,4 @@ weak_alias (wcstoull, wcstouq) weak_alias (wcstoull, wcstoumax) +weak_alias (__isoc23_wcstoull, __isoc23_wcstoumax) diff --git a/wcsmbs/wcstoull_l.c b/wcsmbs/wcstoull_l.c index 0ceb112a78..97923ce4ef 100644 --- a/wcsmbs/wcstoull_l.c +++ b/wcsmbs/wcstoull_l.c @@ -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> |