diff --git a/coreutils-9.3-gnulib-strtol.patch b/coreutils-9.3-gnulib-strtol.patch new file mode 100644 index 0000000..1aac281 --- /dev/null +++ b/coreutils-9.3-gnulib-strtol.patch @@ -0,0 +1,276 @@ +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 + diff --git a/coreutils.spec b/coreutils.spec index 9900b6a..41fd4d1 100644 --- a/coreutils.spec +++ b/coreutils.spec @@ -14,6 +14,9 @@ Source51: coreutils-provides.inc Source105: coreutils-colorls.sh Source106: coreutils-colorls.csh +# revert a gnulib patch that broke the build +Patch1: coreutils-9.3-gnulib-strtol.patch + # do not make coreutils-single depend on /usr/bin/coreutils %global __requires_exclude ^%{_bindir}/coreutils$