bug#80353: tests/misc/read-errors.sh FAILs with dash as /bin/sh
Pádraig Brady <[email protected]> Mon, 9 Feb 2026 15:07:38 +0000
| Newsgroups | gmane.comp.gnu.core-utils.bugs |
|---|---|
| Message-ID | <[email protected]> |
On 08/02/2026 22:52, Collin Funk wrote:
> In general this looks like a great change. It will save us a lot of time
> remember which error strings are different on each platform.
>
> Just one comment after reviewing the patch.
>
>> + /* Errnos */
>> + for (int e = 1; e < 256; e++)
>> + {
>> + char const *err_name = strerrorname_np (e);
>> + if (err_name)
>> + printf ("%s=%s\n", err_name,
>> + quotearg_style (shell_escape_quoting_style, strerror (e)));
>> + }
>
> I think strerror is okay here, since we set LC_ALL=C in
> tests/lang-default which is sourced in TESTS_ENVIRONMENT? We don't want
> translated strings of course since they may not exist or change between
> platforms (even if they have the same string in English).
It's probably best to leave as the translated string for flexibility.
BTW I verified the shell parsing works fine for the single quotes
within fr_FR translated messages.
> Second, you might want to use the 'errno-iter' module from Gnulib. It
> looks a bit safer to me than using a loop over integers 1 - 255.
Oh good call.
Also we should output common errno aliases.
I'll apply the attached later.
cheers,
Padraig
getlimits-errno.patch
(text/x-patch, 3 KB)
From afd2e534f3ec8c498bdc787bc4f390fe723cb870 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A1draig=20Brady?= <[email protected]> Date: Sun, 8 Feb 2026 19:34:13 +0000 Subject: [PATCH] tests: getlimits: output error strings * src/getlimits.c (main): Iterate over defined errnos, and output shell compatible error strings. * tests/Coreutils.pm: Adjust so shell quotes are stripped. --- bootstrap.conf | 2 ++ src/getlimits.c | 27 +++++++++++++++++++++++++++ tests/Coreutils.pm | 8 +++++++- 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/bootstrap.conf b/bootstrap.conf index 07ab7e7e6..1cab8a804 100644 --- a/bootstrap.conf +++ b/bootstrap.conf @@ -85,6 +85,7 @@ gnulib_modules=" dup2 endian environ + errno-iter error euidaccess exclude @@ -274,6 +275,7 @@ gnulib_modules=" stpcpy str_endswith strdup-posix + strerrorname_np stringeq strnlen strnumcmp diff --git a/src/getlimits.c b/src/getlimits.c index 6113988a2..86224a3d0 100644 --- a/src/getlimits.c +++ b/src/getlimits.c @@ -22,6 +22,7 @@ #include <sys/types.h> #include <float.h> +#include "errno-iter.h" #include "ftoastr.h" #include "system.h" #include "ioblksize.h" @@ -129,6 +130,16 @@ PRINT_FLOATTYPE (print_FLT, float, ftoastr, FLT_BUFSIZE_BOUND) PRINT_FLOATTYPE (print_DBL, double, dtoastr, DBL_BUFSIZE_BOUND) PRINT_FLOATTYPE (print_LDBL, long double, ldtoastr, LDBL_BUFSIZE_BOUND) +static int +print_errno (void *name, int e) +{ + char const *err_name = name ? name : strerrorname_np (e); + if (err_name) + printf ("%s=%s\n", err_name, + quotearg_style (shell_escape_quoting_style, strerror (e))); + return 0; +} + int main (int argc, char **argv) { @@ -192,5 +203,21 @@ main (int argc, char **argv) printf ("SIGRTMAX=%jd\n", (intmax_t) SIGRTMAX); printf ("IO_BUFSIZE=%ju\n", (uintmax_t) IO_BUFSIZE); + /* Errnos */ + errno_iterate (print_errno, NULL); + /* Common errno aliases */ +#if defined ENOTEMPTY && ENOTEMPTY == EEXIST + print_errno ((char*)"ENOTEMPTY", EEXIST); +#endif +#if defined ENOTSUP && ENOTSUP == EOPNOTSUPP + print_errno ((char*)"ENOTSUP", EOPNOTSUPP); +#endif +#if defined EWOULDBLOCK && EWOULDBLOCK == EAGAIN + print_errno ((char*)"EWOULDBLOCK", EAGAIN); +#endif +#if defined EDEADLOCK && EDEADLOCK == EDEADLK + print_errno ((char*)"EDEADLOCK", EDEADLK); +#endif + return EXIT_SUCCESS; } diff --git a/tests/Coreutils.pm b/tests/Coreutils.pm index 393a8c8df..376609d73 100644 --- a/tests/Coreutils.pm +++ b/tests/Coreutils.pm @@ -21,6 +21,7 @@ use vars qw($VERSION @ISA @EXPORT); use FileHandle; use File::Compare qw(compare); +use Text::ParseWords qw(shellwords); @ISA = qw(Exporter); ($VERSION = '$Revision: 1.5 $ ') =~ tr/[0-9].//cd; @@ -213,7 +214,12 @@ sub getlimits() { my $NV; open $NV, "getlimits |" or die "Error running getlimits\n"; - my %limits = map {split /=|\n/} <$NV>; + my %limits = map { + chomp; + my ($k, $v) = split /=/, $_, 2; + $v = (shellwords($v))[0] if defined $v; + ($k, $v) + } <$NV>; return \%limits; } -- 2.52.0