Message ID | 20200619134352.297146-13-adhemerval.zanella@linaro.org |
---|---|
State | New |
Headers | show |
Series | [v5,01/13] signal: Add signum-{generic,arch}.h | expand |
On 6/19/20 9:43 AM, Adhemerval Zanella wrote: > The strerrorname returns error number name (i.g. "EINVAL" for EINVAL) > while strerrordesc returns string describing error number (i.g > "Invalid argument" for EINVAL). Different than strerror, strerrordesc > does not attempt to translate the return description and both functions > return NULL for an invalid error number. > > They should be used instead of sys_errlist and sys_nerr and both are s/and both/, both/g > thread and async-signal safe. These functions are GNU extensions. > > Checked on x86-64-linux-gnu, i686-linux-gnu, powerpc64le-linux-gnu, > and s390x-linux-gnu. Why not strerrorname_np or strerrordesc_np? We don't have to use *_np, but these functions are fiarly close in name to 'strerror' and so it might be beneficial to use _np at the end, like you did for sigabbrev_np and sigdescr_np. Thoughts? No regression on x86_64 and i686. Tested-by: Carlos O'Donell <carlos@redhat.com> > --- > NEWS | 10 +++ > include/stdio.h | 1 + > manual/errno.texi | 23 +++++++ > stdio-common/errlist.c | 33 ++++++++++ > stdio-common/test-strerr.c | 65 +++++++++++++++++++ > string/Makefile | 2 +- > string/Versions | 1 + > string/strerrordesc.c | 26 ++++++++ > string/strerrorname.c | 25 +++++++ > string/string.h | 7 ++ > sysdeps/mach/hurd/i386/libc.abilist | 2 + > sysdeps/mach/hurd/test-err_np.c | 4 ++ > sysdeps/unix/sysv/linux/aarch64/libc.abilist | 2 + > sysdeps/unix/sysv/linux/alpha/libc.abilist | 2 + > sysdeps/unix/sysv/linux/arm/be/libc.abilist | 2 + > sysdeps/unix/sysv/linux/arm/le/libc.abilist | 2 + > sysdeps/unix/sysv/linux/csky/libc.abilist | 2 + > sysdeps/unix/sysv/linux/hppa/libc.abilist | 2 + > sysdeps/unix/sysv/linux/i386/libc.abilist | 2 + > sysdeps/unix/sysv/linux/ia64/libc.abilist | 2 + > .../sysv/linux/m68k/coldfire/libc.abilist | 2 + > .../unix/sysv/linux/m68k/m680x0/libc.abilist | 2 + > .../sysv/linux/microblaze/be/libc.abilist | 2 + > .../sysv/linux/microblaze/le/libc.abilist | 2 + > .../sysv/linux/mips/mips32/fpu/libc.abilist | 2 + > .../sysv/linux/mips/mips32/nofpu/libc.abilist | 2 + > .../sysv/linux/mips/mips64/n32/libc.abilist | 2 + > .../sysv/linux/mips/mips64/n64/libc.abilist | 2 + > sysdeps/unix/sysv/linux/nios2/libc.abilist | 2 + > .../linux/powerpc/powerpc32/fpu/libc.abilist | 2 + > .../powerpc/powerpc32/nofpu/libc.abilist | 2 + > .../linux/powerpc/powerpc64/be/libc.abilist | 2 + > .../linux/powerpc/powerpc64/le/libc.abilist | 2 + > .../unix/sysv/linux/riscv/rv64/libc.abilist | 2 + > .../unix/sysv/linux/s390/s390-32/libc.abilist | 2 + > .../unix/sysv/linux/s390/s390-64/libc.abilist | 2 + > sysdeps/unix/sysv/linux/sh/be/libc.abilist | 2 + > sysdeps/unix/sysv/linux/sh/le/libc.abilist | 2 + > .../sysv/linux/sparc/sparc32/libc.abilist | 2 + > .../sysv/linux/sparc/sparc64/libc.abilist | 2 + > .../unix/sysv/linux/x86_64/64/libc.abilist | 2 + > .../unix/sysv/linux/x86_64/x32/libc.abilist | 2 + > 42 files changed, 258 insertions(+), 1 deletion(-) > create mode 100644 stdio-common/test-strerr.c > create mode 100644 string/strerrordesc.c > create mode 100644 string/strerrorname.c > create mode 100644 sysdeps/mach/hurd/test-err_np.c > > diff --git a/NEWS b/NEWS > index f504772eb6..888727581b 100644 > --- a/NEWS > +++ b/NEWS > @@ -41,6 +41,16 @@ Major new features: > They should be used instead of sys_siglist or sys_sigabbrev and they > are both thread and async-signal safe. These functions are GNU extensions. > > +* The functions strerrorname and strerrordesc have been added. The > + strerroname returns error number name (i.g. "EINVAL" for EINVAL) while s/i.g./e.g./g > + strerrordesc returns string describing error number (i.g "Invalid argument" > + for EINVAL). Different than strerror, strerrordesc does not attempt to > + translate the return description and both functions return NULL for an > + invalid error number. > + > + They should be used instead of sys_errlist and sys_nerr and both are s/and both/, both/g > + thread and async-signal safe. These functions are GNU extensions. > + > Deprecated and removed features, and other changes affecting compatibility: > > * The deprecated <sys/sysctl.h> header and the sysctl function have been > diff --git a/include/stdio.h b/include/stdio.h > index 9e3bf6fe42..bc67d020d4 100644 > --- a/include/stdio.h > +++ b/include/stdio.h > @@ -187,6 +187,7 @@ libc_hidden_proto (__libc_readline_unlocked); > > extern const char *const _sys_errlist_internal[] attribute_hidden; > extern const char *__get_errlist (int) attribute_hidden; > +extern const char *__get_errname (int) attribute_hidden; OK. > > libc_hidden_ldbl_proto (__asprintf) > > diff --git a/manual/errno.texi b/manual/errno.texi > index 8cb4ce8b48..dfc4001af0 100644 > --- a/manual/errno.texi > +++ b/manual/errno.texi > @@ -1207,6 +1207,29 @@ to @code{errno}. > The function @code{perror} is declared in @file{stdio.h}. > @end deftypefun > > +@deftypefun void strerrorname (int @var{errnum}) > +@standards{GNU, string.h} > +@safety{@prelim{}@mtsafe{@mtssigintr{}}@assafe{}@acsafe{}} Use @mtsafe{} since it doesn't touch _sigintr. > +This function returns the name describing the error @var{errnum} or > +@code{NULL} if there is no known E* constant with this value (i.g "EINVAL"> +for @code{EINVAL}). s/E*//g > + > +@pindex string.h > +This function is a GNU extension, declared in the header file @file{string.h}. > +@end deftypefun > + > +@deftypefun void errdesc_np (int @var{errnum}) > +@standards{GNU, string.h} > +@safety{@prelim{}@mtsafe{@mtssigintr{}}@assafe{}@acsafe{}} Use @mtsafe{} since it doesn't touch _sigintr. > +This function returns the message describing the error @var{errnum} or > +@code{NULL} if there is no known E* constant with this value (i.g "Invalid s/E*//g > +argument" for @code{EINVAL}). Different than @code{strerror} the returned > +description is not translated. > + > +@pindex string.h > +This function is a GNU extension, declared in the header file @file{string.h}. > +@end deftypefun > + > @code{strerror} and @code{perror} produce the exact same message for any > given error code; the precise text varies from system to system. With > @theglibc{}, the messages are fairly short; there are no multi-line > diff --git a/stdio-common/errlist.c b/stdio-common/errlist.c > index df52356066..d15f13a22a 100644 > --- a/stdio-common/errlist.c > +++ b/stdio-common/errlist.c > @@ -35,4 +35,37 @@ __get_errlist (int errnum) > return NULL; > } > > +static const union sys_errname_t > +{ > + struct > + { > +#define MSGSTRFIELD1(line) str##line > +#define MSGSTRFIELD(line) MSGSTRFIELD1(line) > +#define _S(n, str) char MSGSTRFIELD(__LINE__)[sizeof(str)]; > +#include <errlist.h> > +#undef _S > + }; > + char str[0]; > +} _sys_errname = { { > +#define _S(n, s) s, > +#include <errlist.h> > +#undef _S > +} }; > + > +static const unsigned short _sys_errnameidx[] = > +{ > +#define _S(n, s) [n] = offsetof(union sys_errname_t, MSGSTRFIELD(__LINE__)), > +#include <errlist.h> > +#undef _S > +}; > + > +const char * > +__get_errname (int errnum) > +{ > + if (errnum < 0 || errnum >= array_length (_sys_errnameidx) > + || (errnum > 0 && _sys_errnameidx[errnum] == 0)) > + return NULL; > + return _sys_errname.str + _sys_errnameidx[errnum]; > +} OK. > + > #include <errlist-compat.c> > diff --git a/stdio-common/test-strerr.c b/stdio-common/test-strerr.c > new file mode 100644 > index 0000000000..baa8d8e6d4 > --- /dev/null > +++ b/stdio-common/test-strerr.c > @@ -0,0 +1,65 @@ > +/* Test strerrorname and strerrordesc. > + Copyright (C) 2020 Free Software Foundation, Inc. > + This file is part of the GNU C Library. OK. > + > + 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 <string.h> > +#include <errno.h> > +#include <array_length.h> > + > +#include <support/support.h> > +#include <support/check.h> > + > +#define N_(name) name > + > +static const char *const errlist[] = > + { > +/* This file is auto-generated from errlist.def. */ > +#include <errlist.h> OK. We cross reference the entire errlist. > + }; > + > +#define MSGSTR_T errname_t > +#define MSGSTR errname > +#define MSGIDX errnameidx > +#include <errlist-name.h> > +#undef MSGSTR > +#undef MSGIDX > + > +static int > +do_test (void) > +{ > + TEST_VERIFY (strerrordesc (-1) == NULL); > + TEST_VERIFY (strerrordesc (array_length (errlist)) == NULL); OK. > + for (size_t i = 0; i < array_length (errlist); i++) > + { > + if (errlist[i] == NULL) > + continue; > + TEST_COMPARE_STRING (strerrordesc (i), errlist[i]); > + } > + > + TEST_VERIFY (strerrorname (-1) == NULL); > + TEST_VERIFY (strerrorname (array_length (errlist)) == NULL); > + for (size_t i = 0; i < array_length (errlist); i++) > + { > + if (errlist[i] == NULL) > + continue; > + TEST_COMPARE_STRING (strerrorname (i), errname.str + errnameidx[i]); > + } > + > + return 0; > +} OK. > + > +#include <support/test-driver.c> > diff --git a/string/Makefile b/string/Makefile > index e5075521b7..fd06409197 100644 > --- a/string/Makefile > +++ b/string/Makefile > @@ -45,7 +45,7 @@ routines := strcat strchr strcmp strcoll strcpy strcspn \ > envz basename \ > strcoll_l strxfrm_l string-inlines memrchr \ > xpg-strerror strerror_l explicit_bzero \ > - sigdescr_np sigabbrev_np > + sigdescr_np sigabbrev_np strerrorname strerrordesc Why not _np also? > > strop-tests := memchr memcmp memcpy memmove mempcpy memset memccpy \ > stpcpy stpncpy strcat strchr strcmp strcpy strcspn \ > diff --git a/string/Versions b/string/Versions > index 6f8dd2d372..7727fca001 100644 > --- a/string/Versions > +++ b/string/Versions > @@ -87,5 +87,6 @@ libc { > } > GLIBC_2.32 { > sigdescr_np; sigabbrev_np; > + strerrordesc; strerrorname; Likewise. > } > } > diff --git a/string/strerrordesc.c b/string/strerrordesc.c > new file mode 100644 > index 0000000000..f59448f2d1 > --- /dev/null > +++ b/string/strerrordesc.c > @@ -0,0 +1,26 @@ > +/* Return string describing error number. > + Copyright (C) 2020 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 <stdio.h> > + > +const char * > +__strerrordesc (int errnum) > +{ > + return __get_errlist (errnum); > +} OK. > +weak_alias (__strerrordesc, strerrordesc) > diff --git a/string/strerrorname.c b/string/strerrorname.c > new file mode 100644 > index 0000000000..889ea0d245 > --- /dev/null > +++ b/string/strerrorname.c > @@ -0,0 +1,25 @@ > +/* Return string describing errno name. > + Copyright (C) 2020 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 <stdio.h> > + > +const char * > +strerrorname (int errnum) > +{ > + return __get_errname (errnum); > +} OK. > diff --git a/string/string.h b/string/string.h > index 0119d7f45d..bb90219ada 100644 > --- a/string/string.h > +++ b/string/string.h > @@ -428,6 +428,13 @@ extern int __xpg_strerror_r (int __errnum, char *__buf, size_t __buflen) > extern char *strerror_r (int __errnum, char *__buf, size_t __buflen) > __THROW __nonnull ((2)) __wur __attr_access ((__write_only__, 2, 3)); > # endif > + > +# ifdef __USE_GNU OK. GNU extension. > +/* Return a string describing the meaning of tthe error in ERR. */ > +extern const char *strerrordesc (int __err) __THROW; > +/* Return a string with the error name in ERR. */ > +extern const char *strerrorname (int __err) __THROW; > +# endif > #endif > > #ifdef __USE_XOPEN2K8 > diff --git a/sysdeps/mach/hurd/i386/libc.abilist b/sysdeps/mach/hurd/i386/libc.abilist > index ff8ad98d03..193ceba987 100644 > --- a/sysdeps/mach/hurd/i386/libc.abilist > +++ b/sysdeps/mach/hurd/i386/libc.abilist > @@ -2181,6 +2181,8 @@ GLIBC_2.3.4 setsourcefilter F > GLIBC_2.3.4 xdr_quad_t F > GLIBC_2.3.4 xdr_u_quad_t F > GLIBC_2.30 twalk_r F > +GLIBC_2.32 errdescr_np F > +GLIBC_2.32 errname_np F > GLIBC_2.32 mach_print F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > diff --git a/sysdeps/mach/hurd/test-err_np.c b/sysdeps/mach/hurd/test-err_np.c > new file mode 100644 > index 0000000000..3127141128 > --- /dev/null > +++ b/sysdeps/mach/hurd/test-err_np.c > @@ -0,0 +1,4 @@ > +#include <mach/error.h> > + > +#define ERR_MAP(value) err_get_code (value) > +#include <stdio-common/test-err_np.c> > diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist > index bb6045d8a6..f0529706ee 100644 > --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist > +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist > @@ -2157,3 +2157,5 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist > index 8e15a58eaf..ac892eceda 100644 > --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist > +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist > @@ -2239,6 +2239,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 _IO_fprintf F > GLIBC_2.4 _IO_printf F > GLIBC_2.4 _IO_sprintf F > diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist > index ce82b840e8..af574dfb9d 100644 > --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist > +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist > @@ -141,6 +141,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 _Exit F > GLIBC_2.4 _IO_2_1_stderr_ D 0xa0 > GLIBC_2.4 _IO_2_1_stdin_ D 0xa0 > diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist > index c7a436cd42..bb0e8bf312 100644 > --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist > +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist > @@ -138,6 +138,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 _Exit F > GLIBC_2.4 _IO_2_1_stderr_ D 0xa0 > GLIBC_2.4 _IO_2_1_stdin_ D 0xa0 > diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist > index 7f51d47b2f..8a612ece3e 100644 > --- a/sysdeps/unix/sysv/linux/csky/libc.abilist > +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist > @@ -2101,3 +2101,5 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist > index 053cda00a4..ccb61a322a 100644 > --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist > +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist > @@ -2060,6 +2060,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist > index f18de50f9e..bc5329d7b9 100644 > --- a/sysdeps/unix/sysv/linux/i386/libc.abilist > +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist > @@ -2226,6 +2226,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist > index a1966cac5a..8f8cbfa80b 100644 > --- a/sysdeps/unix/sysv/linux/ia64/libc.abilist > +++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist > @@ -2092,6 +2092,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist > index 8f44bc9231..802e16ac7d 100644 > --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist > +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist > @@ -142,6 +142,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 _Exit F > GLIBC_2.4 _IO_2_1_stderr_ D 0x98 > GLIBC_2.4 _IO_2_1_stdin_ D 0x98 > diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist > index 088f2fa0f2..62bfa336b8 100644 > --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist > +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist > @@ -2172,6 +2172,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist > index 34c1c4fdca..680c7b0c77 100644 > --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist > +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist > @@ -2152,3 +2152,5 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist > index 099d51e893..e102493f6c 100644 > --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist > +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist > @@ -2149,3 +2149,5 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist > index ea86646c3b..28588017fa 100644 > --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist > +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist > @@ -2143,6 +2143,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist > index 9adac43e36..64c99116c0 100644 > --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist > +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist > @@ -2141,6 +2141,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist > index c42c093cfb..7e197736d8 100644 > --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist > +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist > @@ -2149,6 +2149,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist > index 605e60a35e..e1964effc6 100644 > --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist > +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist > @@ -2143,6 +2143,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist > index 7a57babca5..f647f86c09 100644 > --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist > +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist > @@ -2190,3 +2190,5 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist > index c3745c3733..8998f3e0ab 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist > +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist > @@ -2199,6 +2199,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 _IO_fprintf F > GLIBC_2.4 _IO_printf F > GLIBC_2.4 _IO_sprintf F > diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist > index 719512e999..a96c6d1ce2 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist > +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist > @@ -2232,6 +2232,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 _IO_fprintf F > GLIBC_2.4 _IO_printf F > GLIBC_2.4 _IO_sprintf F > diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist > index 3f79daa39c..f9f0a9dd93 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist > +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist > @@ -2062,6 +2062,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 _IO_fprintf F > GLIBC_2.4 _IO_printf F > GLIBC_2.4 _IO_sprintf F > diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist > index af1a2ae8a6..921098b1f3 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist > +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist > @@ -2352,3 +2352,5 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist > index ff5b64c1dd..1e65005b9f 100644 > --- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist > +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist > @@ -2119,3 +2119,5 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist > index 576caca63c..b31811135b 100644 > --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist > +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist > @@ -2197,6 +2197,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 _IO_fprintf F > GLIBC_2.4 _IO_printf F > GLIBC_2.4 _IO_sprintf F > diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist > index 7201b10288..c30fc0ef71 100644 > --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist > +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist > @@ -2098,6 +2098,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 _IO_fprintf F > GLIBC_2.4 _IO_printf F > GLIBC_2.4 _IO_sprintf F > diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist > index 4f954ac7ee..9cbe4a650a 100644 > --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist > +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist > @@ -2067,6 +2067,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist > index 9db9ba5cc0..c00327a607 100644 > --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist > +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist > @@ -2064,6 +2064,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist > index ecb54db317..a990eee8f8 100644 > --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist > +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist > @@ -2188,6 +2188,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 _IO_fprintf F > GLIBC_2.4 _IO_printf F > GLIBC_2.4 _IO_sprintf F > diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist > index 74bd6efed8..e988546b20 100644 > --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist > +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist > @@ -2115,6 +2115,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist > index 50e45a43e8..fa10e68d3a 100644 > --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist > +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist > @@ -2073,6 +2073,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist > index 59b26b097d..29119996ae 100644 > --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist > +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist > @@ -2170,3 +2170,5 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > OK.
On 02/07/2020 18:43, Carlos O'Donell wrote: > On 6/19/20 9:43 AM, Adhemerval Zanella wrote: >> The strerrorname returns error number name (i.g. "EINVAL" for EINVAL) >> while strerrordesc returns string describing error number (i.g >> "Invalid argument" for EINVAL). Different than strerror, strerrordesc >> does not attempt to translate the return description and both functions >> return NULL for an invalid error number. >> >> They should be used instead of sys_errlist and sys_nerr and both are > > s/and both/, both/g Ack. > >> thread and async-signal safe. These functions are GNU extensions. >> >> Checked on x86-64-linux-gnu, i686-linux-gnu, powerpc64le-linux-gnu, >> and s390x-linux-gnu. > > Why not strerrorname_np or strerrordesc_np? We don't have to use *_np, > but these functions are fiarly close in name to 'strerror' and so it > might be beneficial to use _np at the end, like you did for sigabbrev_np > and sigdescr_np. Thoughts? I don't have a strong preference here, on a patch iteration I used the the _np suffix and Florian has pointed out the str* namespace is reserved for libc implementations. But I think the _np is slight better to indicate it is an extension. If it is eventually adopted by other system without the _np suffix we can easily create an alias. So I have added the _np suffix. > > No regression on x86_64 and i686. > > Tested-by: Carlos O'Donell <carlos@redhat.com> Should I add the Reviewed-by as well? > >> --- >> NEWS | 10 +++ >> include/stdio.h | 1 + >> manual/errno.texi | 23 +++++++ >> stdio-common/errlist.c | 33 ++++++++++ >> stdio-common/test-strerr.c | 65 +++++++++++++++++++ >> string/Makefile | 2 +- >> string/Versions | 1 + >> string/strerrordesc.c | 26 ++++++++ >> string/strerrorname.c | 25 +++++++ >> string/string.h | 7 ++ >> sysdeps/mach/hurd/i386/libc.abilist | 2 + >> sysdeps/mach/hurd/test-err_np.c | 4 ++ >> sysdeps/unix/sysv/linux/aarch64/libc.abilist | 2 + >> sysdeps/unix/sysv/linux/alpha/libc.abilist | 2 + >> sysdeps/unix/sysv/linux/arm/be/libc.abilist | 2 + >> sysdeps/unix/sysv/linux/arm/le/libc.abilist | 2 + >> sysdeps/unix/sysv/linux/csky/libc.abilist | 2 + >> sysdeps/unix/sysv/linux/hppa/libc.abilist | 2 + >> sysdeps/unix/sysv/linux/i386/libc.abilist | 2 + >> sysdeps/unix/sysv/linux/ia64/libc.abilist | 2 + >> .../sysv/linux/m68k/coldfire/libc.abilist | 2 + >> .../unix/sysv/linux/m68k/m680x0/libc.abilist | 2 + >> .../sysv/linux/microblaze/be/libc.abilist | 2 + >> .../sysv/linux/microblaze/le/libc.abilist | 2 + >> .../sysv/linux/mips/mips32/fpu/libc.abilist | 2 + >> .../sysv/linux/mips/mips32/nofpu/libc.abilist | 2 + >> .../sysv/linux/mips/mips64/n32/libc.abilist | 2 + >> .../sysv/linux/mips/mips64/n64/libc.abilist | 2 + >> sysdeps/unix/sysv/linux/nios2/libc.abilist | 2 + >> .../linux/powerpc/powerpc32/fpu/libc.abilist | 2 + >> .../powerpc/powerpc32/nofpu/libc.abilist | 2 + >> .../linux/powerpc/powerpc64/be/libc.abilist | 2 + >> .../linux/powerpc/powerpc64/le/libc.abilist | 2 + >> .../unix/sysv/linux/riscv/rv64/libc.abilist | 2 + >> .../unix/sysv/linux/s390/s390-32/libc.abilist | 2 + >> .../unix/sysv/linux/s390/s390-64/libc.abilist | 2 + >> sysdeps/unix/sysv/linux/sh/be/libc.abilist | 2 + >> sysdeps/unix/sysv/linux/sh/le/libc.abilist | 2 + >> .../sysv/linux/sparc/sparc32/libc.abilist | 2 + >> .../sysv/linux/sparc/sparc64/libc.abilist | 2 + >> .../unix/sysv/linux/x86_64/64/libc.abilist | 2 + >> .../unix/sysv/linux/x86_64/x32/libc.abilist | 2 + >> 42 files changed, 258 insertions(+), 1 deletion(-) >> create mode 100644 stdio-common/test-strerr.c >> create mode 100644 string/strerrordesc.c >> create mode 100644 string/strerrorname.c >> create mode 100644 sysdeps/mach/hurd/test-err_np.c >> >> diff --git a/NEWS b/NEWS >> index f504772eb6..888727581b 100644 >> --- a/NEWS >> +++ b/NEWS >> @@ -41,6 +41,16 @@ Major new features: >> They should be used instead of sys_siglist or sys_sigabbrev and they >> are both thread and async-signal safe. These functions are GNU extensions. >> >> +* The functions strerrorname and strerrordesc have been added. The >> + strerroname returns error number name (i.g. "EINVAL" for EINVAL) while > > s/i.g./e.g./g Ack. > >> + strerrordesc returns string describing error number (i.g "Invalid argument" >> + for EINVAL). Different than strerror, strerrordesc does not attempt to >> + translate the return description and both functions return NULL for an >> + invalid error number. >> + >> + They should be used instead of sys_errlist and sys_nerr and both are > > s/and both/, both/g Ack. > >> + thread and async-signal safe. These functions are GNU extensions. >> + >> Deprecated and removed features, and other changes affecting compatibility: >> >> * The deprecated <sys/sysctl.h> header and the sysctl function have been >> diff --git a/include/stdio.h b/include/stdio.h >> index 9e3bf6fe42..bc67d020d4 100644 >> --- a/include/stdio.h >> +++ b/include/stdio.h >> @@ -187,6 +187,7 @@ libc_hidden_proto (__libc_readline_unlocked); >> >> extern const char *const _sys_errlist_internal[] attribute_hidden; >> extern const char *__get_errlist (int) attribute_hidden; >> +extern const char *__get_errname (int) attribute_hidden; > > OK. > >> >> libc_hidden_ldbl_proto (__asprintf) >> >> diff --git a/manual/errno.texi b/manual/errno.texi >> index 8cb4ce8b48..dfc4001af0 100644 >> --- a/manual/errno.texi >> +++ b/manual/errno.texi >> @@ -1207,6 +1207,29 @@ to @code{errno}. >> The function @code{perror} is declared in @file{stdio.h}. >> @end deftypefun >> >> +@deftypefun void strerrorname (int @var{errnum}) >> +@standards{GNU, string.h} >> +@safety{@prelim{}@mtsafe{@mtssigintr{}}@assafe{}@acsafe{}} > > Use @mtsafe{} since it doesn't touch _sigintr. > >> +This function returns the name describing the error @var{errnum} or >> +@code{NULL} if there is no known E* constant with this value (i.g "EINVAL"> +for @code{EINVAL}). > > s/E*//g Ack. > >> + >> +@pindex string.h >> +This function is a GNU extension, declared in the header file @file{string.h}. >> +@end deftypefun >> + >> +@deftypefun void errdesc_np (int @var{errnum}) >> +@standards{GNU, string.h} >> +@safety{@prelim{}@mtsafe{@mtssigintr{}}@assafe{}@acsafe{}} > > Use @mtsafe{} since it doesn't touch _sigintr. Ack. > >> +This function returns the message describing the error @var{errnum} or >> +@code{NULL} if there is no known E* constant with this value (i.g "Invalid > > s/E*//g > >> +argument" for @code{EINVAL}). Different than @code{strerror} the returned >> +description is not translated. >> + >> +@pindex string.h >> +This function is a GNU extension, declared in the header file @file{string.h}. >> +@end deftypefun >> + >> @code{strerror} and @code{perror} produce the exact same message for any >> given error code; the precise text varies from system to system. With >> @theglibc{}, the messages are fairly short; there are no multi-line >> diff --git a/stdio-common/errlist.c b/stdio-common/errlist.c >> index df52356066..d15f13a22a 100644 >> --- a/stdio-common/errlist.c >> +++ b/stdio-common/errlist.c >> @@ -35,4 +35,37 @@ __get_errlist (int errnum) >> return NULL; >> } >> >> +static const union sys_errname_t >> +{ >> + struct >> + { >> +#define MSGSTRFIELD1(line) str##line >> +#define MSGSTRFIELD(line) MSGSTRFIELD1(line) >> +#define _S(n, str) char MSGSTRFIELD(__LINE__)[sizeof(str)]; >> +#include <errlist.h> >> +#undef _S >> + }; >> + char str[0]; >> +} _sys_errname = { { >> +#define _S(n, s) s, >> +#include <errlist.h> >> +#undef _S >> +} }; >> + >> +static const unsigned short _sys_errnameidx[] = >> +{ >> +#define _S(n, s) [n] = offsetof(union sys_errname_t, MSGSTRFIELD(__LINE__)), >> +#include <errlist.h> >> +#undef _S >> +}; >> + >> +const char * >> +__get_errname (int errnum) >> +{ >> + if (errnum < 0 || errnum >= array_length (_sys_errnameidx) >> + || (errnum > 0 && _sys_errnameidx[errnum] == 0)) >> + return NULL; >> + return _sys_errname.str + _sys_errnameidx[errnum]; >> +} > > OK. > >> + >> #include <errlist-compat.c> >> diff --git a/stdio-common/test-strerr.c b/stdio-common/test-strerr.c >> new file mode 100644 >> index 0000000000..baa8d8e6d4 >> --- /dev/null >> +++ b/stdio-common/test-strerr.c >> @@ -0,0 +1,65 @@ >> +/* Test strerrorname and strerrordesc. >> + Copyright (C) 2020 Free Software Foundation, Inc. >> + This file is part of the GNU C Library. > > OK. > >> + >> + 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 <string.h> >> +#include <errno.h> >> +#include <array_length.h> >> + >> +#include <support/support.h> >> +#include <support/check.h> >> + >> +#define N_(name) name >> + >> +static const char *const errlist[] = >> + { >> +/* This file is auto-generated from errlist.def. */ >> +#include <errlist.h> > > OK. We cross reference the entire errlist. > >> + }; >> + >> +#define MSGSTR_T errname_t >> +#define MSGSTR errname >> +#define MSGIDX errnameidx >> +#include <errlist-name.h> >> +#undef MSGSTR >> +#undef MSGIDX >> + >> +static int >> +do_test (void) >> +{ >> + TEST_VERIFY (strerrordesc (-1) == NULL); >> + TEST_VERIFY (strerrordesc (array_length (errlist)) == NULL); > > OK. > >> + for (size_t i = 0; i < array_length (errlist); i++) >> + { >> + if (errlist[i] == NULL) >> + continue; >> + TEST_COMPARE_STRING (strerrordesc (i), errlist[i]); >> + } >> + >> + TEST_VERIFY (strerrorname (-1) == NULL); >> + TEST_VERIFY (strerrorname (array_length (errlist)) == NULL); >> + for (size_t i = 0; i < array_length (errlist); i++) >> + { >> + if (errlist[i] == NULL) >> + continue; >> + TEST_COMPARE_STRING (strerrorname (i), errname.str + errnameidx[i]); >> + } >> + >> + return 0; >> +} > > OK. > >> + >> +#include <support/test-driver.c> >> diff --git a/string/Makefile b/string/Makefile >> index e5075521b7..fd06409197 100644 >> --- a/string/Makefile >> +++ b/string/Makefile >> @@ -45,7 +45,7 @@ routines := strcat strchr strcmp strcoll strcpy strcspn \ >> envz basename \ >> strcoll_l strxfrm_l string-inlines memrchr \ >> xpg-strerror strerror_l explicit_bzero \ >> - sigdescr_np sigabbrev_np >> + sigdescr_np sigabbrev_np strerrorname strerrordesc > > Why not _np also? > >> >> strop-tests := memchr memcmp memcpy memmove mempcpy memset memccpy \ >> stpcpy stpncpy strcat strchr strcmp strcpy strcspn \ >> diff --git a/string/Versions b/string/Versions >> index 6f8dd2d372..7727fca001 100644 >> --- a/string/Versions >> +++ b/string/Versions >> @@ -87,5 +87,6 @@ libc { >> } >> GLIBC_2.32 { >> sigdescr_np; sigabbrev_np; >> + strerrordesc; strerrorname; > > Likewise. > >> } >> } >> diff --git a/string/strerrordesc.c b/string/strerrordesc.c >> new file mode 100644 >> index 0000000000..f59448f2d1 >> --- /dev/null >> +++ b/string/strerrordesc.c >> @@ -0,0 +1,26 @@ >> +/* Return string describing error number. >> + Copyright (C) 2020 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 <stdio.h> >> + >> +const char * >> +__strerrordesc (int errnum) >> +{ >> + return __get_errlist (errnum); >> +} > > OK. > >> +weak_alias (__strerrordesc, strerrordesc) >> diff --git a/string/strerrorname.c b/string/strerrorname.c >> new file mode 100644 >> index 0000000000..889ea0d245 >> --- /dev/null >> +++ b/string/strerrorname.c >> @@ -0,0 +1,25 @@ >> +/* Return string describing errno name. >> + Copyright (C) 2020 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 <stdio.h> >> + >> +const char * >> +strerrorname (int errnum) >> +{ >> + return __get_errname (errnum); >> +} > > OK. > >> diff --git a/string/string.h b/string/string.h >> index 0119d7f45d..bb90219ada 100644 >> --- a/string/string.h >> +++ b/string/string.h >> @@ -428,6 +428,13 @@ extern int __xpg_strerror_r (int __errnum, char *__buf, size_t __buflen) >> extern char *strerror_r (int __errnum, char *__buf, size_t __buflen) >> __THROW __nonnull ((2)) __wur __attr_access ((__write_only__, 2, 3)); >> # endif >> + >> +# ifdef __USE_GNU > > OK. GNU extension. > >> +/* Return a string describing the meaning of tthe error in ERR. */ >> +extern const char *strerrordesc (int __err) __THROW; >> +/* Return a string with the error name in ERR. */ >> +extern const char *strerrorname (int __err) __THROW; >> +# endif >> #endif >> >> #ifdef __USE_XOPEN2K8 >> diff --git a/sysdeps/mach/hurd/i386/libc.abilist b/sysdeps/mach/hurd/i386/libc.abilist >> index ff8ad98d03..193ceba987 100644 >> --- a/sysdeps/mach/hurd/i386/libc.abilist >> +++ b/sysdeps/mach/hurd/i386/libc.abilist >> @@ -2181,6 +2181,8 @@ GLIBC_2.3.4 setsourcefilter F >> GLIBC_2.3.4 xdr_quad_t F >> GLIBC_2.3.4 xdr_u_quad_t F >> GLIBC_2.30 twalk_r F >> +GLIBC_2.32 errdescr_np F >> +GLIBC_2.32 errname_np F >> GLIBC_2.32 mach_print F >> GLIBC_2.32 sigabbrev_np F >> GLIBC_2.32 sigdescr_np F >> diff --git a/sysdeps/mach/hurd/test-err_np.c b/sysdeps/mach/hurd/test-err_np.c >> new file mode 100644 >> index 0000000000..3127141128 >> --- /dev/null >> +++ b/sysdeps/mach/hurd/test-err_np.c >> @@ -0,0 +1,4 @@ >> +#include <mach/error.h> >> + >> +#define ERR_MAP(value) err_get_code (value) >> +#include <stdio-common/test-err_np.c> >> diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist >> index bb6045d8a6..f0529706ee 100644 >> --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist >> @@ -2157,3 +2157,5 @@ GLIBC_2.32 pthread_getattr_np F >> GLIBC_2.32 pthread_sigmask F >> GLIBC_2.32 sigabbrev_np F >> GLIBC_2.32 sigdescr_np F >> +GLIBC_2.32 strerrordesc F >> +GLIBC_2.32 strerrorname F >> diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist >> index 8e15a58eaf..ac892eceda 100644 >> --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist >> @@ -2239,6 +2239,8 @@ GLIBC_2.32 pthread_getattr_np F >> GLIBC_2.32 pthread_sigmask F >> GLIBC_2.32 sigabbrev_np F >> GLIBC_2.32 sigdescr_np F >> +GLIBC_2.32 strerrordesc F >> +GLIBC_2.32 strerrorname F >> GLIBC_2.4 _IO_fprintf F >> GLIBC_2.4 _IO_printf F >> GLIBC_2.4 _IO_sprintf F >> diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist >> index ce82b840e8..af574dfb9d 100644 >> --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist >> @@ -141,6 +141,8 @@ GLIBC_2.32 pthread_getattr_np F >> GLIBC_2.32 pthread_sigmask F >> GLIBC_2.32 sigabbrev_np F >> GLIBC_2.32 sigdescr_np F >> +GLIBC_2.32 strerrordesc F >> +GLIBC_2.32 strerrorname F >> GLIBC_2.4 _Exit F >> GLIBC_2.4 _IO_2_1_stderr_ D 0xa0 >> GLIBC_2.4 _IO_2_1_stdin_ D 0xa0 >> diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist >> index c7a436cd42..bb0e8bf312 100644 >> --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist >> @@ -138,6 +138,8 @@ GLIBC_2.32 pthread_getattr_np F >> GLIBC_2.32 pthread_sigmask F >> GLIBC_2.32 sigabbrev_np F >> GLIBC_2.32 sigdescr_np F >> +GLIBC_2.32 strerrordesc F >> +GLIBC_2.32 strerrorname F >> GLIBC_2.4 _Exit F >> GLIBC_2.4 _IO_2_1_stderr_ D 0xa0 >> GLIBC_2.4 _IO_2_1_stdin_ D 0xa0 >> diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist >> index 7f51d47b2f..8a612ece3e 100644 >> --- a/sysdeps/unix/sysv/linux/csky/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist >> @@ -2101,3 +2101,5 @@ GLIBC_2.32 pthread_getattr_np F >> GLIBC_2.32 pthread_sigmask F >> GLIBC_2.32 sigabbrev_np F >> GLIBC_2.32 sigdescr_np F >> +GLIBC_2.32 strerrordesc F >> +GLIBC_2.32 strerrorname F >> diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist >> index 053cda00a4..ccb61a322a 100644 >> --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist >> @@ -2060,6 +2060,8 @@ GLIBC_2.32 pthread_getattr_np F >> GLIBC_2.32 pthread_sigmask F >> GLIBC_2.32 sigabbrev_np F >> GLIBC_2.32 sigdescr_np F >> +GLIBC_2.32 strerrordesc F >> +GLIBC_2.32 strerrorname F >> GLIBC_2.4 __confstr_chk F >> GLIBC_2.4 __fgets_chk F >> GLIBC_2.4 __fgets_unlocked_chk F >> diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist >> index f18de50f9e..bc5329d7b9 100644 >> --- a/sysdeps/unix/sysv/linux/i386/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist >> @@ -2226,6 +2226,8 @@ GLIBC_2.32 pthread_getattr_np F >> GLIBC_2.32 pthread_sigmask F >> GLIBC_2.32 sigabbrev_np F >> GLIBC_2.32 sigdescr_np F >> +GLIBC_2.32 strerrordesc F >> +GLIBC_2.32 strerrorname F >> GLIBC_2.4 __confstr_chk F >> GLIBC_2.4 __fgets_chk F >> GLIBC_2.4 __fgets_unlocked_chk F >> diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist >> index a1966cac5a..8f8cbfa80b 100644 >> --- a/sysdeps/unix/sysv/linux/ia64/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist >> @@ -2092,6 +2092,8 @@ GLIBC_2.32 pthread_getattr_np F >> GLIBC_2.32 pthread_sigmask F >> GLIBC_2.32 sigabbrev_np F >> GLIBC_2.32 sigdescr_np F >> +GLIBC_2.32 strerrordesc F >> +GLIBC_2.32 strerrorname F >> GLIBC_2.4 __confstr_chk F >> GLIBC_2.4 __fgets_chk F >> GLIBC_2.4 __fgets_unlocked_chk F >> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist >> index 8f44bc9231..802e16ac7d 100644 >> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist >> @@ -142,6 +142,8 @@ GLIBC_2.32 pthread_getattr_np F >> GLIBC_2.32 pthread_sigmask F >> GLIBC_2.32 sigabbrev_np F >> GLIBC_2.32 sigdescr_np F >> +GLIBC_2.32 strerrordesc F >> +GLIBC_2.32 strerrorname F >> GLIBC_2.4 _Exit F >> GLIBC_2.4 _IO_2_1_stderr_ D 0x98 >> GLIBC_2.4 _IO_2_1_stdin_ D 0x98 >> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist >> index 088f2fa0f2..62bfa336b8 100644 >> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist >> @@ -2172,6 +2172,8 @@ GLIBC_2.32 pthread_getattr_np F >> GLIBC_2.32 pthread_sigmask F >> GLIBC_2.32 sigabbrev_np F >> GLIBC_2.32 sigdescr_np F >> +GLIBC_2.32 strerrordesc F >> +GLIBC_2.32 strerrorname F >> GLIBC_2.4 __confstr_chk F >> GLIBC_2.4 __fgets_chk F >> GLIBC_2.4 __fgets_unlocked_chk F >> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist >> index 34c1c4fdca..680c7b0c77 100644 >> --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist >> @@ -2152,3 +2152,5 @@ GLIBC_2.32 pthread_getattr_np F >> GLIBC_2.32 pthread_sigmask F >> GLIBC_2.32 sigabbrev_np F >> GLIBC_2.32 sigdescr_np F >> +GLIBC_2.32 strerrordesc F >> +GLIBC_2.32 strerrorname F >> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist >> index 099d51e893..e102493f6c 100644 >> --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist >> @@ -2149,3 +2149,5 @@ GLIBC_2.32 pthread_getattr_np F >> GLIBC_2.32 pthread_sigmask F >> GLIBC_2.32 sigabbrev_np F >> GLIBC_2.32 sigdescr_np F >> +GLIBC_2.32 strerrordesc F >> +GLIBC_2.32 strerrorname F >> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist >> index ea86646c3b..28588017fa 100644 >> --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist >> @@ -2143,6 +2143,8 @@ GLIBC_2.32 pthread_getattr_np F >> GLIBC_2.32 pthread_sigmask F >> GLIBC_2.32 sigabbrev_np F >> GLIBC_2.32 sigdescr_np F >> +GLIBC_2.32 strerrordesc F >> +GLIBC_2.32 strerrorname F >> GLIBC_2.4 __confstr_chk F >> GLIBC_2.4 __fgets_chk F >> GLIBC_2.4 __fgets_unlocked_chk F >> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist >> index 9adac43e36..64c99116c0 100644 >> --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist >> @@ -2141,6 +2141,8 @@ GLIBC_2.32 pthread_getattr_np F >> GLIBC_2.32 pthread_sigmask F >> GLIBC_2.32 sigabbrev_np F >> GLIBC_2.32 sigdescr_np F >> +GLIBC_2.32 strerrordesc F >> +GLIBC_2.32 strerrorname F >> GLIBC_2.4 __confstr_chk F >> GLIBC_2.4 __fgets_chk F >> GLIBC_2.4 __fgets_unlocked_chk F >> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist >> index c42c093cfb..7e197736d8 100644 >> --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist >> @@ -2149,6 +2149,8 @@ GLIBC_2.32 pthread_getattr_np F >> GLIBC_2.32 pthread_sigmask F >> GLIBC_2.32 sigabbrev_np F >> GLIBC_2.32 sigdescr_np F >> +GLIBC_2.32 strerrordesc F >> +GLIBC_2.32 strerrorname F >> GLIBC_2.4 __confstr_chk F >> GLIBC_2.4 __fgets_chk F >> GLIBC_2.4 __fgets_unlocked_chk F >> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist >> index 605e60a35e..e1964effc6 100644 >> --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist >> @@ -2143,6 +2143,8 @@ GLIBC_2.32 pthread_getattr_np F >> GLIBC_2.32 pthread_sigmask F >> GLIBC_2.32 sigabbrev_np F >> GLIBC_2.32 sigdescr_np F >> +GLIBC_2.32 strerrordesc F >> +GLIBC_2.32 strerrorname F >> GLIBC_2.4 __confstr_chk F >> GLIBC_2.4 __fgets_chk F >> GLIBC_2.4 __fgets_unlocked_chk F >> diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist >> index 7a57babca5..f647f86c09 100644 >> --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist >> @@ -2190,3 +2190,5 @@ GLIBC_2.32 pthread_getattr_np F >> GLIBC_2.32 pthread_sigmask F >> GLIBC_2.32 sigabbrev_np F >> GLIBC_2.32 sigdescr_np F >> +GLIBC_2.32 strerrordesc F >> +GLIBC_2.32 strerrorname F >> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist >> index c3745c3733..8998f3e0ab 100644 >> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist >> @@ -2199,6 +2199,8 @@ GLIBC_2.32 pthread_getattr_np F >> GLIBC_2.32 pthread_sigmask F >> GLIBC_2.32 sigabbrev_np F >> GLIBC_2.32 sigdescr_np F >> +GLIBC_2.32 strerrordesc F >> +GLIBC_2.32 strerrorname F >> GLIBC_2.4 _IO_fprintf F >> GLIBC_2.4 _IO_printf F >> GLIBC_2.4 _IO_sprintf F >> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist >> index 719512e999..a96c6d1ce2 100644 >> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist >> @@ -2232,6 +2232,8 @@ GLIBC_2.32 pthread_getattr_np F >> GLIBC_2.32 pthread_sigmask F >> GLIBC_2.32 sigabbrev_np F >> GLIBC_2.32 sigdescr_np F >> +GLIBC_2.32 strerrordesc F >> +GLIBC_2.32 strerrorname F >> GLIBC_2.4 _IO_fprintf F >> GLIBC_2.4 _IO_printf F >> GLIBC_2.4 _IO_sprintf F >> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist >> index 3f79daa39c..f9f0a9dd93 100644 >> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist >> @@ -2062,6 +2062,8 @@ GLIBC_2.32 pthread_getattr_np F >> GLIBC_2.32 pthread_sigmask F >> GLIBC_2.32 sigabbrev_np F >> GLIBC_2.32 sigdescr_np F >> +GLIBC_2.32 strerrordesc F >> +GLIBC_2.32 strerrorname F >> GLIBC_2.4 _IO_fprintf F >> GLIBC_2.4 _IO_printf F >> GLIBC_2.4 _IO_sprintf F >> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist >> index af1a2ae8a6..921098b1f3 100644 >> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist >> @@ -2352,3 +2352,5 @@ GLIBC_2.32 pthread_getattr_np F >> GLIBC_2.32 pthread_sigmask F >> GLIBC_2.32 sigabbrev_np F >> GLIBC_2.32 sigdescr_np F >> +GLIBC_2.32 strerrordesc F >> +GLIBC_2.32 strerrorname F >> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist >> index ff5b64c1dd..1e65005b9f 100644 >> --- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist >> @@ -2119,3 +2119,5 @@ GLIBC_2.32 pthread_getattr_np F >> GLIBC_2.32 pthread_sigmask F >> GLIBC_2.32 sigabbrev_np F >> GLIBC_2.32 sigdescr_np F >> +GLIBC_2.32 strerrordesc F >> +GLIBC_2.32 strerrorname F >> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist >> index 576caca63c..b31811135b 100644 >> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist >> @@ -2197,6 +2197,8 @@ GLIBC_2.32 pthread_getattr_np F >> GLIBC_2.32 pthread_sigmask F >> GLIBC_2.32 sigabbrev_np F >> GLIBC_2.32 sigdescr_np F >> +GLIBC_2.32 strerrordesc F >> +GLIBC_2.32 strerrorname F >> GLIBC_2.4 _IO_fprintf F >> GLIBC_2.4 _IO_printf F >> GLIBC_2.4 _IO_sprintf F >> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist >> index 7201b10288..c30fc0ef71 100644 >> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist >> @@ -2098,6 +2098,8 @@ GLIBC_2.32 pthread_getattr_np F >> GLIBC_2.32 pthread_sigmask F >> GLIBC_2.32 sigabbrev_np F >> GLIBC_2.32 sigdescr_np F >> +GLIBC_2.32 strerrordesc F >> +GLIBC_2.32 strerrorname F >> GLIBC_2.4 _IO_fprintf F >> GLIBC_2.4 _IO_printf F >> GLIBC_2.4 _IO_sprintf F >> diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist >> index 4f954ac7ee..9cbe4a650a 100644 >> --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist >> @@ -2067,6 +2067,8 @@ GLIBC_2.32 pthread_getattr_np F >> GLIBC_2.32 pthread_sigmask F >> GLIBC_2.32 sigabbrev_np F >> GLIBC_2.32 sigdescr_np F >> +GLIBC_2.32 strerrordesc F >> +GLIBC_2.32 strerrorname F >> GLIBC_2.4 __confstr_chk F >> GLIBC_2.4 __fgets_chk F >> GLIBC_2.4 __fgets_unlocked_chk F >> diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist >> index 9db9ba5cc0..c00327a607 100644 >> --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist >> @@ -2064,6 +2064,8 @@ GLIBC_2.32 pthread_getattr_np F >> GLIBC_2.32 pthread_sigmask F >> GLIBC_2.32 sigabbrev_np F >> GLIBC_2.32 sigdescr_np F >> +GLIBC_2.32 strerrordesc F >> +GLIBC_2.32 strerrorname F >> GLIBC_2.4 __confstr_chk F >> GLIBC_2.4 __fgets_chk F >> GLIBC_2.4 __fgets_unlocked_chk F >> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist >> index ecb54db317..a990eee8f8 100644 >> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist >> @@ -2188,6 +2188,8 @@ GLIBC_2.32 pthread_getattr_np F >> GLIBC_2.32 pthread_sigmask F >> GLIBC_2.32 sigabbrev_np F >> GLIBC_2.32 sigdescr_np F >> +GLIBC_2.32 strerrordesc F >> +GLIBC_2.32 strerrorname F >> GLIBC_2.4 _IO_fprintf F >> GLIBC_2.4 _IO_printf F >> GLIBC_2.4 _IO_sprintf F >> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist >> index 74bd6efed8..e988546b20 100644 >> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist >> @@ -2115,6 +2115,8 @@ GLIBC_2.32 pthread_getattr_np F >> GLIBC_2.32 pthread_sigmask F >> GLIBC_2.32 sigabbrev_np F >> GLIBC_2.32 sigdescr_np F >> +GLIBC_2.32 strerrordesc F >> +GLIBC_2.32 strerrorname F >> GLIBC_2.4 __confstr_chk F >> GLIBC_2.4 __fgets_chk F >> GLIBC_2.4 __fgets_unlocked_chk F >> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist >> index 50e45a43e8..fa10e68d3a 100644 >> --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist >> @@ -2073,6 +2073,8 @@ GLIBC_2.32 pthread_getattr_np F >> GLIBC_2.32 pthread_sigmask F >> GLIBC_2.32 sigabbrev_np F >> GLIBC_2.32 sigdescr_np F >> +GLIBC_2.32 strerrordesc F >> +GLIBC_2.32 strerrorname F >> GLIBC_2.4 __confstr_chk F >> GLIBC_2.4 __fgets_chk F >> GLIBC_2.4 __fgets_unlocked_chk F >> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist >> index 59b26b097d..29119996ae 100644 >> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist >> @@ -2170,3 +2170,5 @@ GLIBC_2.32 pthread_getattr_np F >> GLIBC_2.32 pthread_sigmask F >> GLIBC_2.32 sigabbrev_np F >> GLIBC_2.32 sigdescr_np F >> +GLIBC_2.32 strerrordesc F >> +GLIBC_2.32 strerrorname F >> > > OK. >
On 7/3/20 5:01 PM, Adhemerval Zanella wrote: > > > On 02/07/2020 18:43, Carlos O'Donell wrote: >> On 6/19/20 9:43 AM, Adhemerval Zanella wrote: >>> The strerrorname returns error number name (i.g. "EINVAL" for EINVAL) >>> while strerrordesc returns string describing error number (i.g >>> "Invalid argument" for EINVAL). Different than strerror, strerrordesc >>> does not attempt to translate the return description and both functions >>> return NULL for an invalid error number. >>> >>> They should be used instead of sys_errlist and sys_nerr and both are >> >> s/and both/, both/g > > Ack. > >> >>> thread and async-signal safe. These functions are GNU extensions. >>> >>> Checked on x86-64-linux-gnu, i686-linux-gnu, powerpc64le-linux-gnu, >>> and s390x-linux-gnu. >> >> Why not strerrorname_np or strerrordesc_np? We don't have to use *_np, >> but these functions are fiarly close in name to 'strerror' and so it >> might be beneficial to use _np at the end, like you did for sigabbrev_np >> and sigdescr_np. Thoughts? > > I don't have a strong preference here, on a patch iteration I used > the the _np suffix and Florian has pointed out the str* namespace > is reserved for libc implementations. > > But I think the _np is slight better to indicate it is an extension. > If it is eventually adopted by other system without the _np suffix > we can easily create an alias. > > So I have added the _np suffix. > >> >> No regression on x86_64 and i686. >> >> Tested-by: Carlos O'Donell <carlos@redhat.com> > > Should I add the Reviewed-by as well? No. I want to review the final patch and I'll give Reviewed-by there.
On 03/07/2020 18:19, Carlos O'Donell wrote: > On 7/3/20 5:01 PM, Adhemerval Zanella wrote: >> >> >> On 02/07/2020 18:43, Carlos O'Donell wrote: >>> On 6/19/20 9:43 AM, Adhemerval Zanella wrote: >>>> The strerrorname returns error number name (i.g. "EINVAL" for EINVAL) >>>> while strerrordesc returns string describing error number (i.g >>>> "Invalid argument" for EINVAL). Different than strerror, strerrordesc >>>> does not attempt to translate the return description and both functions >>>> return NULL for an invalid error number. >>>> >>>> They should be used instead of sys_errlist and sys_nerr and both are >>> >>> s/and both/, both/g >> >> Ack. >> >>> >>>> thread and async-signal safe. These functions are GNU extensions. >>>> >>>> Checked on x86-64-linux-gnu, i686-linux-gnu, powerpc64le-linux-gnu, >>>> and s390x-linux-gnu. >>> >>> Why not strerrorname_np or strerrordesc_np? We don't have to use *_np, >>> but these functions are fiarly close in name to 'strerror' and so it >>> might be beneficial to use _np at the end, like you did for sigabbrev_np >>> and sigdescr_np. Thoughts? >> >> I don't have a strong preference here, on a patch iteration I used >> the the _np suffix and Florian has pointed out the str* namespace >> is reserved for libc implementations. >> >> But I think the _np is slight better to indicate it is an extension. >> If it is eventually adopted by other system without the _np suffix >> we can easily create an alias. >> >> So I have added the _np suffix. >> >>> >>> No regression on x86_64 and i686. >>> >>> Tested-by: Carlos O'Donell <carlos@redhat.com> >> >> Should I add the Reviewed-by as well? > > No. I want to review the final patch and I'll give Reviewed-by there. > Alright, should I re-send it with the _np changes?
On 7/3/20 6:34 PM, Adhemerval Zanella wrote: > > > On 03/07/2020 18:19, Carlos O'Donell wrote: >> On 7/3/20 5:01 PM, Adhemerval Zanella wrote: >>> >>> >>> On 02/07/2020 18:43, Carlos O'Donell wrote: >>>> On 6/19/20 9:43 AM, Adhemerval Zanella wrote: >>>>> The strerrorname returns error number name (i.g. "EINVAL" for EINVAL) >>>>> while strerrordesc returns string describing error number (i.g >>>>> "Invalid argument" for EINVAL). Different than strerror, strerrordesc >>>>> does not attempt to translate the return description and both functions >>>>> return NULL for an invalid error number. >>>>> >>>>> They should be used instead of sys_errlist and sys_nerr and both are >>>> >>>> s/and both/, both/g >>> >>> Ack. >>> >>>> >>>>> thread and async-signal safe. These functions are GNU extensions. >>>>> >>>>> Checked on x86-64-linux-gnu, i686-linux-gnu, powerpc64le-linux-gnu, >>>>> and s390x-linux-gnu. >>>> >>>> Why not strerrorname_np or strerrordesc_np? We don't have to use *_np, >>>> but these functions are fiarly close in name to 'strerror' and so it >>>> might be beneficial to use _np at the end, like you did for sigabbrev_np >>>> and sigdescr_np. Thoughts? >>> >>> I don't have a strong preference here, on a patch iteration I used >>> the the _np suffix and Florian has pointed out the str* namespace >>> is reserved for libc implementations. >>> >>> But I think the _np is slight better to indicate it is an extension. >>> If it is eventually adopted by other system without the _np suffix >>> we can easily create an alias. >>> >>> So I have added the _np suffix. >>> >>>> >>>> No regression on x86_64 and i686. >>>> >>>> Tested-by: Carlos O'Donell <carlos@redhat.com> >>> >>> Should I add the Reviewed-by as well? >> >> No. I want to review the final patch and I'll give Reviewed-by there. >> > > Alright, should I re-send it with the _np changes? Yes please. I think the _np APIs are very clearly intended to be APIs within a known namespace e.g. str* which are non-portable and then we can try to get POSIX to standardize on existing practice.
diff --git a/NEWS b/NEWS index f504772eb6..888727581b 100644 --- a/NEWS +++ b/NEWS @@ -41,6 +41,16 @@ Major new features: They should be used instead of sys_siglist or sys_sigabbrev and they are both thread and async-signal safe. These functions are GNU extensions. +* The functions strerrorname and strerrordesc have been added. The + strerroname returns error number name (i.g. "EINVAL" for EINVAL) while + strerrordesc returns string describing error number (i.g "Invalid argument" + for EINVAL). Different than strerror, strerrordesc does not attempt to + translate the return description and both functions return NULL for an + invalid error number. + + They should be used instead of sys_errlist and sys_nerr and both are + thread and async-signal safe. These functions are GNU extensions. + Deprecated and removed features, and other changes affecting compatibility: * The deprecated <sys/sysctl.h> header and the sysctl function have been diff --git a/include/stdio.h b/include/stdio.h index 9e3bf6fe42..bc67d020d4 100644 --- a/include/stdio.h +++ b/include/stdio.h @@ -187,6 +187,7 @@ libc_hidden_proto (__libc_readline_unlocked); extern const char *const _sys_errlist_internal[] attribute_hidden; extern const char *__get_errlist (int) attribute_hidden; +extern const char *__get_errname (int) attribute_hidden; libc_hidden_ldbl_proto (__asprintf) diff --git a/manual/errno.texi b/manual/errno.texi index 8cb4ce8b48..dfc4001af0 100644 --- a/manual/errno.texi +++ b/manual/errno.texi @@ -1207,6 +1207,29 @@ to @code{errno}. The function @code{perror} is declared in @file{stdio.h}. @end deftypefun +@deftypefun void strerrorname (int @var{errnum}) +@standards{GNU, string.h} +@safety{@prelim{}@mtsafe{@mtssigintr{}}@assafe{}@acsafe{}} +This function returns the name describing the error @var{errnum} or +@code{NULL} if there is no known E* constant with this value (i.g "EINVAL" +for @code{EINVAL}). + +@pindex string.h +This function is a GNU extension, declared in the header file @file{string.h}. +@end deftypefun + +@deftypefun void errdesc_np (int @var{errnum}) +@standards{GNU, string.h} +@safety{@prelim{}@mtsafe{@mtssigintr{}}@assafe{}@acsafe{}} +This function returns the message describing the error @var{errnum} or +@code{NULL} if there is no known E* constant with this value (i.g "Invalid +argument" for @code{EINVAL}). Different than @code{strerror} the returned +description is not translated. + +@pindex string.h +This function is a GNU extension, declared in the header file @file{string.h}. +@end deftypefun + @code{strerror} and @code{perror} produce the exact same message for any given error code; the precise text varies from system to system. With @theglibc{}, the messages are fairly short; there are no multi-line diff --git a/stdio-common/errlist.c b/stdio-common/errlist.c index df52356066..d15f13a22a 100644 --- a/stdio-common/errlist.c +++ b/stdio-common/errlist.c @@ -35,4 +35,37 @@ __get_errlist (int errnum) return NULL; } +static const union sys_errname_t +{ + struct + { +#define MSGSTRFIELD1(line) str##line +#define MSGSTRFIELD(line) MSGSTRFIELD1(line) +#define _S(n, str) char MSGSTRFIELD(__LINE__)[sizeof(str)]; +#include <errlist.h> +#undef _S + }; + char str[0]; +} _sys_errname = { { +#define _S(n, s) s, +#include <errlist.h> +#undef _S +} }; + +static const unsigned short _sys_errnameidx[] = +{ +#define _S(n, s) [n] = offsetof(union sys_errname_t, MSGSTRFIELD(__LINE__)), +#include <errlist.h> +#undef _S +}; + +const char * +__get_errname (int errnum) +{ + if (errnum < 0 || errnum >= array_length (_sys_errnameidx) + || (errnum > 0 && _sys_errnameidx[errnum] == 0)) + return NULL; + return _sys_errname.str + _sys_errnameidx[errnum]; +} + #include <errlist-compat.c> diff --git a/stdio-common/test-strerr.c b/stdio-common/test-strerr.c new file mode 100644 index 0000000000..baa8d8e6d4 --- /dev/null +++ b/stdio-common/test-strerr.c @@ -0,0 +1,65 @@ +/* Test strerrorname and strerrordesc. + Copyright (C) 2020 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 <string.h> +#include <errno.h> +#include <array_length.h> + +#include <support/support.h> +#include <support/check.h> + +#define N_(name) name + +static const char *const errlist[] = + { +/* This file is auto-generated from errlist.def. */ +#include <errlist.h> + }; + +#define MSGSTR_T errname_t +#define MSGSTR errname +#define MSGIDX errnameidx +#include <errlist-name.h> +#undef MSGSTR +#undef MSGIDX + +static int +do_test (void) +{ + TEST_VERIFY (strerrordesc (-1) == NULL); + TEST_VERIFY (strerrordesc (array_length (errlist)) == NULL); + for (size_t i = 0; i < array_length (errlist); i++) + { + if (errlist[i] == NULL) + continue; + TEST_COMPARE_STRING (strerrordesc (i), errlist[i]); + } + + TEST_VERIFY (strerrorname (-1) == NULL); + TEST_VERIFY (strerrorname (array_length (errlist)) == NULL); + for (size_t i = 0; i < array_length (errlist); i++) + { + if (errlist[i] == NULL) + continue; + TEST_COMPARE_STRING (strerrorname (i), errname.str + errnameidx[i]); + } + + return 0; +} + +#include <support/test-driver.c> diff --git a/string/Makefile b/string/Makefile index e5075521b7..fd06409197 100644 --- a/string/Makefile +++ b/string/Makefile @@ -45,7 +45,7 @@ routines := strcat strchr strcmp strcoll strcpy strcspn \ envz basename \ strcoll_l strxfrm_l string-inlines memrchr \ xpg-strerror strerror_l explicit_bzero \ - sigdescr_np sigabbrev_np + sigdescr_np sigabbrev_np strerrorname strerrordesc strop-tests := memchr memcmp memcpy memmove mempcpy memset memccpy \ stpcpy stpncpy strcat strchr strcmp strcpy strcspn \ diff --git a/string/Versions b/string/Versions index 6f8dd2d372..7727fca001 100644 --- a/string/Versions +++ b/string/Versions @@ -87,5 +87,6 @@ libc { } GLIBC_2.32 { sigdescr_np; sigabbrev_np; + strerrordesc; strerrorname; } } diff --git a/string/strerrordesc.c b/string/strerrordesc.c new file mode 100644 index 0000000000..f59448f2d1 --- /dev/null +++ b/string/strerrordesc.c @@ -0,0 +1,26 @@ +/* Return string describing error number. + Copyright (C) 2020 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 <stdio.h> + +const char * +__strerrordesc (int errnum) +{ + return __get_errlist (errnum); +} +weak_alias (__strerrordesc, strerrordesc) diff --git a/string/strerrorname.c b/string/strerrorname.c new file mode 100644 index 0000000000..889ea0d245 --- /dev/null +++ b/string/strerrorname.c @@ -0,0 +1,25 @@ +/* Return string describing errno name. + Copyright (C) 2020 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 <stdio.h> + +const char * +strerrorname (int errnum) +{ + return __get_errname (errnum); +} diff --git a/string/string.h b/string/string.h index 0119d7f45d..bb90219ada 100644 --- a/string/string.h +++ b/string/string.h @@ -428,6 +428,13 @@ extern int __xpg_strerror_r (int __errnum, char *__buf, size_t __buflen) extern char *strerror_r (int __errnum, char *__buf, size_t __buflen) __THROW __nonnull ((2)) __wur __attr_access ((__write_only__, 2, 3)); # endif + +# ifdef __USE_GNU +/* Return a string describing the meaning of tthe error in ERR. */ +extern const char *strerrordesc (int __err) __THROW; +/* Return a string with the error name in ERR. */ +extern const char *strerrorname (int __err) __THROW; +# endif #endif #ifdef __USE_XOPEN2K8 diff --git a/sysdeps/mach/hurd/i386/libc.abilist b/sysdeps/mach/hurd/i386/libc.abilist index ff8ad98d03..193ceba987 100644 --- a/sysdeps/mach/hurd/i386/libc.abilist +++ b/sysdeps/mach/hurd/i386/libc.abilist @@ -2181,6 +2181,8 @@ GLIBC_2.3.4 setsourcefilter F GLIBC_2.3.4 xdr_quad_t F GLIBC_2.3.4 xdr_u_quad_t F GLIBC_2.30 twalk_r F +GLIBC_2.32 errdescr_np F +GLIBC_2.32 errname_np F GLIBC_2.32 mach_print F GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F diff --git a/sysdeps/mach/hurd/test-err_np.c b/sysdeps/mach/hurd/test-err_np.c new file mode 100644 index 0000000000..3127141128 --- /dev/null +++ b/sysdeps/mach/hurd/test-err_np.c @@ -0,0 +1,4 @@ +#include <mach/error.h> + +#define ERR_MAP(value) err_get_code (value) +#include <stdio-common/test-err_np.c> diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist index bb6045d8a6..f0529706ee 100644 --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist @@ -2157,3 +2157,5 @@ GLIBC_2.32 pthread_getattr_np F GLIBC_2.32 pthread_sigmask F GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F +GLIBC_2.32 strerrordesc F +GLIBC_2.32 strerrorname F diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist index 8e15a58eaf..ac892eceda 100644 --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist @@ -2239,6 +2239,8 @@ GLIBC_2.32 pthread_getattr_np F GLIBC_2.32 pthread_sigmask F GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F +GLIBC_2.32 strerrordesc F +GLIBC_2.32 strerrorname F GLIBC_2.4 _IO_fprintf F GLIBC_2.4 _IO_printf F GLIBC_2.4 _IO_sprintf F diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist index ce82b840e8..af574dfb9d 100644 --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist @@ -141,6 +141,8 @@ GLIBC_2.32 pthread_getattr_np F GLIBC_2.32 pthread_sigmask F GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F +GLIBC_2.32 strerrordesc F +GLIBC_2.32 strerrorname F GLIBC_2.4 _Exit F GLIBC_2.4 _IO_2_1_stderr_ D 0xa0 GLIBC_2.4 _IO_2_1_stdin_ D 0xa0 diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist index c7a436cd42..bb0e8bf312 100644 --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist @@ -138,6 +138,8 @@ GLIBC_2.32 pthread_getattr_np F GLIBC_2.32 pthread_sigmask F GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F +GLIBC_2.32 strerrordesc F +GLIBC_2.32 strerrorname F GLIBC_2.4 _Exit F GLIBC_2.4 _IO_2_1_stderr_ D 0xa0 GLIBC_2.4 _IO_2_1_stdin_ D 0xa0 diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist index 7f51d47b2f..8a612ece3e 100644 --- a/sysdeps/unix/sysv/linux/csky/libc.abilist +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist @@ -2101,3 +2101,5 @@ GLIBC_2.32 pthread_getattr_np F GLIBC_2.32 pthread_sigmask F GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F +GLIBC_2.32 strerrordesc F +GLIBC_2.32 strerrorname F diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist index 053cda00a4..ccb61a322a 100644 --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist @@ -2060,6 +2060,8 @@ GLIBC_2.32 pthread_getattr_np F GLIBC_2.32 pthread_sigmask F GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F +GLIBC_2.32 strerrordesc F +GLIBC_2.32 strerrorname F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist index f18de50f9e..bc5329d7b9 100644 --- a/sysdeps/unix/sysv/linux/i386/libc.abilist +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist @@ -2226,6 +2226,8 @@ GLIBC_2.32 pthread_getattr_np F GLIBC_2.32 pthread_sigmask F GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F +GLIBC_2.32 strerrordesc F +GLIBC_2.32 strerrorname F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist index a1966cac5a..8f8cbfa80b 100644 --- a/sysdeps/unix/sysv/linux/ia64/libc.abilist +++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist @@ -2092,6 +2092,8 @@ GLIBC_2.32 pthread_getattr_np F GLIBC_2.32 pthread_sigmask F GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F +GLIBC_2.32 strerrordesc F +GLIBC_2.32 strerrorname F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist index 8f44bc9231..802e16ac7d 100644 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist @@ -142,6 +142,8 @@ GLIBC_2.32 pthread_getattr_np F GLIBC_2.32 pthread_sigmask F GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F +GLIBC_2.32 strerrordesc F +GLIBC_2.32 strerrorname F GLIBC_2.4 _Exit F GLIBC_2.4 _IO_2_1_stderr_ D 0x98 GLIBC_2.4 _IO_2_1_stdin_ D 0x98 diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist index 088f2fa0f2..62bfa336b8 100644 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist @@ -2172,6 +2172,8 @@ GLIBC_2.32 pthread_getattr_np F GLIBC_2.32 pthread_sigmask F GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F +GLIBC_2.32 strerrordesc F +GLIBC_2.32 strerrorname F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist index 34c1c4fdca..680c7b0c77 100644 --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist @@ -2152,3 +2152,5 @@ GLIBC_2.32 pthread_getattr_np F GLIBC_2.32 pthread_sigmask F GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F +GLIBC_2.32 strerrordesc F +GLIBC_2.32 strerrorname F diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist index 099d51e893..e102493f6c 100644 --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist @@ -2149,3 +2149,5 @@ GLIBC_2.32 pthread_getattr_np F GLIBC_2.32 pthread_sigmask F GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F +GLIBC_2.32 strerrordesc F +GLIBC_2.32 strerrorname F diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist index ea86646c3b..28588017fa 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist @@ -2143,6 +2143,8 @@ GLIBC_2.32 pthread_getattr_np F GLIBC_2.32 pthread_sigmask F GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F +GLIBC_2.32 strerrordesc F +GLIBC_2.32 strerrorname F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist index 9adac43e36..64c99116c0 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist @@ -2141,6 +2141,8 @@ GLIBC_2.32 pthread_getattr_np F GLIBC_2.32 pthread_sigmask F GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F +GLIBC_2.32 strerrordesc F +GLIBC_2.32 strerrorname F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist index c42c093cfb..7e197736d8 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist @@ -2149,6 +2149,8 @@ GLIBC_2.32 pthread_getattr_np F GLIBC_2.32 pthread_sigmask F GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F +GLIBC_2.32 strerrordesc F +GLIBC_2.32 strerrorname F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist index 605e60a35e..e1964effc6 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist @@ -2143,6 +2143,8 @@ GLIBC_2.32 pthread_getattr_np F GLIBC_2.32 pthread_sigmask F GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F +GLIBC_2.32 strerrordesc F +GLIBC_2.32 strerrorname F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist index 7a57babca5..f647f86c09 100644 --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist @@ -2190,3 +2190,5 @@ GLIBC_2.32 pthread_getattr_np F GLIBC_2.32 pthread_sigmask F GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F +GLIBC_2.32 strerrordesc F +GLIBC_2.32 strerrorname F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist index c3745c3733..8998f3e0ab 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist @@ -2199,6 +2199,8 @@ GLIBC_2.32 pthread_getattr_np F GLIBC_2.32 pthread_sigmask F GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F +GLIBC_2.32 strerrordesc F +GLIBC_2.32 strerrorname F GLIBC_2.4 _IO_fprintf F GLIBC_2.4 _IO_printf F GLIBC_2.4 _IO_sprintf F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist index 719512e999..a96c6d1ce2 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist @@ -2232,6 +2232,8 @@ GLIBC_2.32 pthread_getattr_np F GLIBC_2.32 pthread_sigmask F GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F +GLIBC_2.32 strerrordesc F +GLIBC_2.32 strerrorname F GLIBC_2.4 _IO_fprintf F GLIBC_2.4 _IO_printf F GLIBC_2.4 _IO_sprintf F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist index 3f79daa39c..f9f0a9dd93 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist @@ -2062,6 +2062,8 @@ GLIBC_2.32 pthread_getattr_np F GLIBC_2.32 pthread_sigmask F GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F +GLIBC_2.32 strerrordesc F +GLIBC_2.32 strerrorname F GLIBC_2.4 _IO_fprintf F GLIBC_2.4 _IO_printf F GLIBC_2.4 _IO_sprintf F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist index af1a2ae8a6..921098b1f3 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist @@ -2352,3 +2352,5 @@ GLIBC_2.32 pthread_getattr_np F GLIBC_2.32 pthread_sigmask F GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F +GLIBC_2.32 strerrordesc F +GLIBC_2.32 strerrorname F diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist index ff5b64c1dd..1e65005b9f 100644 --- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist @@ -2119,3 +2119,5 @@ GLIBC_2.32 pthread_getattr_np F GLIBC_2.32 pthread_sigmask F GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F +GLIBC_2.32 strerrordesc F +GLIBC_2.32 strerrorname F diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist index 576caca63c..b31811135b 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist @@ -2197,6 +2197,8 @@ GLIBC_2.32 pthread_getattr_np F GLIBC_2.32 pthread_sigmask F GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F +GLIBC_2.32 strerrordesc F +GLIBC_2.32 strerrorname F GLIBC_2.4 _IO_fprintf F GLIBC_2.4 _IO_printf F GLIBC_2.4 _IO_sprintf F diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist index 7201b10288..c30fc0ef71 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist @@ -2098,6 +2098,8 @@ GLIBC_2.32 pthread_getattr_np F GLIBC_2.32 pthread_sigmask F GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F +GLIBC_2.32 strerrordesc F +GLIBC_2.32 strerrorname F GLIBC_2.4 _IO_fprintf F GLIBC_2.4 _IO_printf F GLIBC_2.4 _IO_sprintf F diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist index 4f954ac7ee..9cbe4a650a 100644 --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist @@ -2067,6 +2067,8 @@ GLIBC_2.32 pthread_getattr_np F GLIBC_2.32 pthread_sigmask F GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F +GLIBC_2.32 strerrordesc F +GLIBC_2.32 strerrorname F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist index 9db9ba5cc0..c00327a607 100644 --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist @@ -2064,6 +2064,8 @@ GLIBC_2.32 pthread_getattr_np F GLIBC_2.32 pthread_sigmask F GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F +GLIBC_2.32 strerrordesc F +GLIBC_2.32 strerrorname F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist index ecb54db317..a990eee8f8 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist @@ -2188,6 +2188,8 @@ GLIBC_2.32 pthread_getattr_np F GLIBC_2.32 pthread_sigmask F GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F +GLIBC_2.32 strerrordesc F +GLIBC_2.32 strerrorname F GLIBC_2.4 _IO_fprintf F GLIBC_2.4 _IO_printf F GLIBC_2.4 _IO_sprintf F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist index 74bd6efed8..e988546b20 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist @@ -2115,6 +2115,8 @@ GLIBC_2.32 pthread_getattr_np F GLIBC_2.32 pthread_sigmask F GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F +GLIBC_2.32 strerrordesc F +GLIBC_2.32 strerrorname F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist index 50e45a43e8..fa10e68d3a 100644 --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist @@ -2073,6 +2073,8 @@ GLIBC_2.32 pthread_getattr_np F GLIBC_2.32 pthread_sigmask F GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F +GLIBC_2.32 strerrordesc F +GLIBC_2.32 strerrorname F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist index 59b26b097d..29119996ae 100644 --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist @@ -2170,3 +2170,5 @@ GLIBC_2.32 pthread_getattr_np F GLIBC_2.32 pthread_sigmask F GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F +GLIBC_2.32 strerrordesc F +GLIBC_2.32 strerrorname F