From eca8f2dd212de534778c874a52ca079659e30140 Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Tue, 18 Apr 2023 17:57:42 +0200 Subject: [PATCH] Revert "strtol, strtoll, strtoul, strtoull: Make ISO C 23 compliant." This reverts commit 4e38f4a0c65d4d19883b404a84169088b84b60d2. --- gnulib-tests/test-strtoll.c | 62 ------------------------------------ gnulib-tests/test-strtoull.c | 62 ------------------------------------ lib/strtol.c | 14 ++------ m4/strtoll.m4 | 19 +++-------- m4/strtoull.m4 | 19 +++-------- 5 files changed, 11 insertions(+), 165 deletions(-) diff --git a/gnulib-tests/test-strtoll.c b/gnulib-tests/test-strtoll.c index 24cb4eb..ecedbe6 100644 --- a/gnulib-tests/test-strtoll.c +++ b/gnulib-tests/test-strtoll.c @@ -239,67 +239,5 @@ main (void) ASSERT (errno == 0); } - /* Binary integer syntax. */ - { - const char input[] = "0b111010"; - char *ptr; - long long result; - errno = 0; - result = strtoll (input, &ptr, 10); - ASSERT (result == 0LL); - ASSERT (ptr == input + 1); - ASSERT (errno == 0); - } - { - const char input[] = "0b111010"; - char *ptr; - long long result; - errno = 0; - result = strtoll (input, &ptr, 2); - ASSERT (result == 58LL); - ASSERT (ptr == input + 8); - ASSERT (errno == 0); - } - { - const char input[] = "0b111010"; - char *ptr; - long long result; - errno = 0; - result = strtoll (input, &ptr, 0); - ASSERT (result == 58LL); - ASSERT (ptr == input + 8); - ASSERT (errno == 0); - } - { - const char input[] = "0b"; - char *ptr; - long long result; - errno = 0; - result = strtoll (input, &ptr, 10); - ASSERT (result == 0LL); - ASSERT (ptr == input + 1); - ASSERT (errno == 0); - } - { - const char input[] = "0b"; - char *ptr; - long long result; - errno = 0; - result = strtoll (input, &ptr, 2); - ASSERT (result == 0LL); - ASSERT (ptr == input + 1); - ASSERT (errno == 0); - } - { - const char input[] = "0b"; - char *ptr; - long long result; - errno = 0; - result = strtoll (input, &ptr, 0); - ASSERT (result == 0LL); - ASSERT (ptr == input + 1); - ASSERT (errno == 0); - } - return 0; } diff --git a/gnulib-tests/test-strtoull.c b/gnulib-tests/test-strtoull.c index 7b0027f..dd6ec2a 100644 --- a/gnulib-tests/test-strtoull.c +++ b/gnulib-tests/test-strtoull.c @@ -238,67 +238,5 @@ main (void) ASSERT (errno == 0); } - /* Binary integer syntax. */ - { - const char input[] = "0b111010"; - char *ptr; - unsigned long long result; - errno = 0; - result = strtoull (input, &ptr, 10); - ASSERT (result == 0ULL); - ASSERT (ptr == input + 1); - ASSERT (errno == 0); - } - { - const char input[] = "0b111010"; - char *ptr; - unsigned long long result; - errno = 0; - result = strtoull (input, &ptr, 2); - ASSERT (result == 58ULL); - ASSERT (ptr == input + 8); - ASSERT (errno == 0); - } - { - const char input[] = "0b111010"; - char *ptr; - unsigned long long result; - errno = 0; - result = strtoull (input, &ptr, 0); - ASSERT (result == 58ULL); - ASSERT (ptr == input + 8); - ASSERT (errno == 0); - } - { - const char input[] = "0b"; - char *ptr; - unsigned long long result; - errno = 0; - result = strtoull (input, &ptr, 10); - ASSERT (result == 0ULL); - ASSERT (ptr == input + 1); - ASSERT (errno == 0); - } - { - const char input[] = "0b"; - char *ptr; - unsigned long long result; - errno = 0; - result = strtoull (input, &ptr, 2); - ASSERT (result == 0ULL); - ASSERT (ptr == input + 1); - ASSERT (errno == 0); - } - { - const char input[] = "0b"; - char *ptr; - unsigned long long result; - errno = 0; - result = strtoull (input, &ptr, 0); - ASSERT (result == 0ULL); - ASSERT (ptr == input + 1); - ASSERT (errno == 0); - } - return 0; } diff --git a/lib/strtol.c b/lib/strtol.c index b93483d..d11269b 100644 --- a/lib/strtol.c +++ b/lib/strtol.c @@ -288,11 +288,6 @@ INTERNAL (strtol) (const STRING_TYPE *nptr, STRING_TYPE **endptr, s += 2; base = 16; } - else if ((base == 0 || base == 2) && TOUPPER (s[1]) == L_('B')) - { - s += 2; - base = 2; - } else if (base == 0) base = 8; } @@ -383,14 +378,11 @@ INTERNAL (strtol) (const STRING_TYPE *nptr, STRING_TYPE **endptr, noconv: /* We must handle a special case here: the base is 0 or 16 and the first two characters are '0' and 'x', but the rest are no - hexadecimal digits. Likewise when the base is 0 or 2 and the - first two characters are '0' and 'b', but the rest are no binary - digits. This is no error case. We return 0 and ENDPTR points to - the 'x' or 'b'. */ + hexadecimal digits. This is no error case. We return 0 and + ENDPTR points to the 'x'. */ if (endptr != NULL) { - if (save - nptr >= 2 - && (TOUPPER (save[-1]) == L_('X') || TOUPPER (save[-1]) == L_('B')) + if (save - nptr >= 2 && TOUPPER (save[-1]) == L_('X') && save[-2] == L_('0')) *endptr = (STRING_TYPE *) &save[-1]; else diff --git a/m4/strtoll.m4 b/m4/strtoll.m4 index ec09609..ede630c 100644 --- a/m4/strtoll.m4 +++ b/m4/strtoll.m4 @@ -1,4 +1,4 @@ -# strtoll.m4 serial 10 +# strtoll.m4 serial 9 dnl Copyright (C) 2002, 2004, 2006, 2008-2023 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -24,26 +24,15 @@ AC_DEFUN([gl_FUNC_STRTOLL], if (term != input + 1) result |= 1; } - /* This test fails on pre-C23 platforms. */ - { - const char input[] = "0b1"; - (void) strtoll (input, &term, 2); - if (term != input + 3) - result |= 2; - } return result; ]]) ], [gl_cv_func_strtoll_works=yes], [gl_cv_func_strtoll_works=no], [case "$host_os" in - # Guess no on native Windows. - mingw*) gl_cv_func_strtoll_works="guessing no" ;; - # Guess no on glibc systems. - *-gnu* | gnu*) gl_cv_func_strtoll_works="guessing no" ;; - # Guess no on musl systems. - *-musl* | midipix*) gl_cv_func_strtoll_works="guessing no" ;; - *) gl_cv_func_strtoll_works="$gl_cross_guess_normal" ;; + # Guess no on native Windows. + mingw*) gl_cv_func_strtoll_works="guessing no" ;; + *) gl_cv_func_strtoll_works="$gl_cross_guess_normal" ;; esac ]) ]) diff --git a/m4/strtoull.m4 b/m4/strtoull.m4 index 4f895c7..a9b0ddf 100644 --- a/m4/strtoull.m4 +++ b/m4/strtoull.m4 @@ -1,4 +1,4 @@ -# strtoull.m4 serial 10 +# strtoull.m4 serial 9 dnl Copyright (C) 2002, 2004, 2006, 2008-2023 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -24,26 +24,15 @@ AC_DEFUN([gl_FUNC_STRTOULL], if (term != input + 1) result |= 1; } - /* This test fails on pre-C23 platforms. */ - { - const char input[] = "0b1"; - (void) strtoull (input, &term, 2); - if (term != input + 3) - result |= 2; - } return result; ]]) ], [gl_cv_func_strtoull_works=yes], [gl_cv_func_strtoull_works=no], [case "$host_os" in - # Guess no on native Windows. - mingw*) gl_cv_func_strtoull_works="guessing no" ;; - # Guess no on glibc systems. - *-gnu* | gnu*) gl_cv_func_strtoull_works="guessing no" ;; - # Guess no on musl systems. - *-musl* | midipix*) gl_cv_func_strtoull_works="guessing no" ;; - *) gl_cv_func_strtoull_works="$gl_cross_guess_normal" ;; + # Guess no on native Windows. + mingw*) gl_cv_func_strtoull_works="guessing no" ;; + *) gl_cv_func_strtoull_works="$gl_cross_guess_normal" ;; esac ]) ]) -- 2.39.2