>From 4041bb7cb24874ac7c4c927775666df6b59a5479 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Sun, 30 Aug 2020 22:19:05 +0200 Subject: [PATCH 1/2] strerrorname_np: New module. * lib/string.in.h (strerrorname_np): New declaration. * lib/strerrorname_np.c: New file. * m4/strerrorname_np.m4: New file. * m4/string_h.m4 (gl_HEADER_STRING_H_BODY): Test whether strerrorname_np is declared. (gl_HEADER_STRING_H_DEFAULTS): Initialize GNULIB_STRERRORNAME_NP, HAVE_STRERRORNAME_NP, REPLACE_STRERRORNAME_NP. * modules/string (Makefile.am): Substitute GNULIB_STRERRORNAME_NP, HAVE_STRERRORNAME_NP, REPLACE_STRERRORNAME_NP. * modules/strerrorname_np: New file. * tests/test-string-c++.cc: Verify the signature of strerrorname_np. * doc/glibc-functions/strerrorname_np.texi: Mention the new module and the glibc 2.32 bug. --- ChangeLog | 17 + doc/glibc-functions/strerrorname_np.texi | 12 +- lib/strerrorname_np.c | 1342 ++++++++++++++++++++++++++++++ lib/string.in.h | 24 + m4/strerrorname_np.m4 | 46 + m4/string_h.m4 | 89 +- modules/strerrorname_np | 28 + modules/string | 3 + tests/test-string-c++.cc | 4 + 9 files changed, 1518 insertions(+), 47 deletions(-) create mode 100644 lib/strerrorname_np.c create mode 100644 m4/strerrorname_np.m4 create mode 100644 modules/strerrorname_np diff --git a/ChangeLog b/ChangeLog index 719b958..47df957 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,20 @@ +2020-08-30 Bruno Haible + + strerrorname_np: New module. + * lib/string.in.h (strerrorname_np): New declaration. + * lib/strerrorname_np.c: New file. + * m4/strerrorname_np.m4: New file. + * m4/string_h.m4 (gl_HEADER_STRING_H_BODY): Test whether strerrorname_np + is declared. + (gl_HEADER_STRING_H_DEFAULTS): Initialize GNULIB_STRERRORNAME_NP, + HAVE_STRERRORNAME_NP, REPLACE_STRERRORNAME_NP. + * modules/string (Makefile.am): Substitute GNULIB_STRERRORNAME_NP, + HAVE_STRERRORNAME_NP, REPLACE_STRERRORNAME_NP. + * modules/strerrorname_np: New file. + * tests/test-string-c++.cc: Verify the signature of strerrorname_np. + * doc/glibc-functions/strerrorname_np.texi: Mention the new module and + the glibc 2.32 bug. + 2020-08-27 Paul Eggert perror, strerror_r: remove unportable tests diff --git a/doc/glibc-functions/strerrorname_np.texi b/doc/glibc-functions/strerrorname_np.texi index a82e3ee..12ec280 100644 --- a/doc/glibc-functions/strerrorname_np.texi +++ b/doc/glibc-functions/strerrorname_np.texi @@ -10,15 +10,19 @@ Documentation:@* @url{https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html}. @end ifnotinfo -Gnulib module: --- +Gnulib module: strerrorname_np Portability problems fixed by Gnulib: @itemize +@item +This function is missing on all non-glibc platforms: +glibc 2.31, Mac OS X 10.13, FreeBSD 6.4, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. +@item +This function returns wrong values on some platforms: +@c https://sourceware.org/bugzilla/show_bug.cgi?id=26555 +glibc 2.32. @end itemize Portability problems not fixed by Gnulib: @itemize -@item -This function is missing on all non-glibc platforms: -glibc 2.31, Mac OS X 10.13, FreeBSD 6.4, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize diff --git a/lib/strerrorname_np.c b/lib/strerrorname_np.c new file mode 100644 index 0000000..b2fb888 --- /dev/null +++ b/lib/strerrorname_np.c @@ -0,0 +1,1342 @@ +/* Name of system error code. + Copyright (C) 2020 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2020. */ + +#include + +/* Specification. */ +#include + +#include + +const char * +strerrorname_np (int errnum) +{ + switch (errnum) + { + /* Error codes specified by ISO C. */ + case EDOM: return "EDOM"; + case EILSEQ: return "EILSEQ"; + case ERANGE: return "ERANGE"; + + /* Error codes specified by POSIX. + */ + #if defined E2BIG + case E2BIG: return "E2BIG"; + #endif + #if defined EACCES + case EACCES: return "EACCES"; + #endif + #if defined EADDRINUSE + case EADDRINUSE: return "EADDRINUSE"; + #endif + #if defined EADDRNOTAVAIL + case EADDRNOTAVAIL: return "EADDRNOTAVAIL"; + #endif + #if defined EAFNOSUPPORT + case EAFNOSUPPORT: return "EAFNOSUPPORT"; + #endif + #if defined EAGAIN + case EAGAIN: return "EAGAIN"; + #endif + #if defined EALREADY + case EALREADY: return "EALREADY"; + #endif + #if defined EBADF + case EBADF: return "EBADF"; + #endif + #if defined EBADMSG + case EBADMSG: return "EBADMSG"; + #endif + #if defined EBUSY + case EBUSY: return "EBUSY"; + #endif + #if defined ECANCELED + case ECANCELED: return "ECANCELED"; + #endif + #if defined ECHILD + case ECHILD: return "ECHILD"; + #endif + #if defined ECONNABORTED + case ECONNABORTED: return "ECONNABORTED"; + #endif + #if defined ECONNREFUSED + case ECONNREFUSED: return "ECONNREFUSED"; + #endif + #if defined ECONNRESET + case ECONNRESET: return "ECONNRESET"; + #endif + #if defined EDEADLK + case EDEADLK: return "EDEADLK"; + #endif + #if defined EDESTADDRREQ + case EDESTADDRREQ: return "EDESTADDRREQ"; + #endif + #if defined EDQUOT + case EDQUOT: return "EDQUOT"; + #endif + #if defined EEXIST + case EEXIST: return "EEXIST"; + #endif + #if defined EFAULT + case EFAULT: return "EFAULT"; + #endif + #if defined EFBIG + case EFBIG: return "EFBIG"; + #endif + #if defined EHOSTUNREACH + case EHOSTUNREACH: return "EHOSTUNREACH"; + #endif + #if defined EIDRM + case EIDRM: return "EIDRM"; + #endif + #if defined EINPROGRESS + case EINPROGRESS: return "EINPROGRESS"; + #endif + #if defined EINTR + case EINTR: return "EINTR"; + #endif + #if defined EINVAL + case EINVAL: return "EINVAL"; + #endif + #if defined EIO + case EIO: return "EIO"; + #endif + #if defined EISCONN + case EISCONN: return "EISCONN"; + #endif + #if defined EISDIR + case EISDIR: return "EISDIR"; + #endif + #if defined ELOOP + case ELOOP: return "ELOOP"; + #endif + #if defined EMFILE + case EMFILE: return "EMFILE"; + #endif + #if defined EMLINK + case EMLINK: return "EMLINK"; + #endif + #if defined EMSGSIZE + case EMSGSIZE: return "EMSGSIZE"; + #endif + #if defined EMULTIHOP + case EMULTIHOP: return "EMULTIHOP"; + #endif + #if defined ENAMETOOLONG + case ENAMETOOLONG: return "ENAMETOOLONG"; + #endif + #if defined ENETDOWN + case ENETDOWN: return "ENETDOWN"; + #endif + #if defined ENETRESET + case ENETRESET: return "ENETRESET"; + #endif + #if defined ENETUNREACH + case ENETUNREACH: return "ENETUNREACH"; + #endif + #if defined ENFILE + case ENFILE: return "ENFILE"; + #endif + #if defined ENOBUFS + case ENOBUFS: return "ENOBUFS"; + #endif + #if defined ENODATA + case ENODATA: return "ENODATA"; + #endif + #if defined ENODEV + case ENODEV: return "ENODEV"; + #endif + #if defined ENOENT + case ENOENT: return "ENOENT"; + #endif + #if defined ENOEXEC + case ENOEXEC: return "ENOEXEC"; + #endif + #if defined ENOLCK + case ENOLCK: return "ENOLCK"; + #endif + #if defined ENOLINK + case ENOLINK: return "ENOLINK"; + #endif + #if defined ENOMEM + case ENOMEM: return "ENOMEM"; + #endif + #if defined ENOMSG + case ENOMSG: return "ENOMSG"; + #endif + #if defined ENOPROTOOPT + case ENOPROTOOPT: return "ENOPROTOOPT"; + #endif + #if defined ENOSPC + case ENOSPC: return "ENOSPC"; + #endif + #if defined ENOSR + case ENOSR: return "ENOSR"; + #endif + #if defined ENOSTR + case ENOSTR: return "ENOSTR"; + #endif + #if defined ENOSYS + case ENOSYS: return "ENOSYS"; + #endif + #if defined ENOTCONN + case ENOTCONN: return "ENOTCONN"; + #endif + #if defined ENOTDIR + case ENOTDIR: return "ENOTDIR"; + #endif + #if defined ENOTEMPTY && ENOTEMPTY != EEXIST + case ENOTEMPTY: return "ENOTEMPTY"; + #endif + #if defined ENOTRECOVERABLE + case ENOTRECOVERABLE: return "ENOTRECOVERABLE"; + #endif + #if defined ENOTSOCK + case ENOTSOCK: return "ENOTSOCK"; + #endif + #if defined ENOTSUP && ENOTSUP != EOPNOTSUPP + case ENOTSUP: return "ENOTSUP"; + #endif + #if defined ENOTTY + case ENOTTY: return "ENOTTY"; + #endif + #if defined ENXIO + case ENXIO: return "ENXIO"; + #endif + #if defined EOPNOTSUPP + case EOPNOTSUPP: return "EOPNOTSUPP"; + #endif + #if defined EOVERFLOW + case EOVERFLOW: return "EOVERFLOW"; + #endif + #if defined EOWNERDEAD + case EOWNERDEAD: return "EOWNERDEAD"; + #endif + #if defined EPERM + case EPERM: return "EPERM"; + #endif + #if defined EPIPE + case EPIPE: return "EPIPE"; + #endif + #if defined EPROTO + case EPROTO: return "EPROTO"; + #endif + #if defined EPROTONOSUPPORT + case EPROTONOSUPPORT: return "EPROTONOSUPPORT"; + #endif + #if defined EPROTOTYPE + case EPROTOTYPE: return "EPROTOTYPE"; + #endif + #if defined EROFS + case EROFS: return "EROFS"; + #endif + #if defined ESPIPE + case ESPIPE: return "ESPIPE"; + #endif + #if defined ESRCH + case ESRCH: return "ESRCH"; + #endif + #if defined ESTALE + case ESTALE: return "ESTALE"; + #endif + #if defined ETIME + case ETIME: return "ETIME"; + #endif + #if defined ETIMEDOUT + case ETIMEDOUT: return "ETIMEDOUT"; + #endif + #if defined ETXTBSY + case ETXTBSY: return "ETXTBSY"; + #endif + #if defined EWOULDBLOCK && EWOULDBLOCK != EAGAIN + case EWOULDBLOCK: return "EWOULDBLOCK"; + #endif + #if defined EXDEV + case EXDEV: return "EXDEV"; + #endif + + /* Other error codes on other systems. */ + /* Solaris */ + #if defined EADI + case EADI: return "EADI"; + #endif + /* Linux, HP-UX, IRIX, Solaris, Cygwin */ + #if defined EADV + case EADV: return "EADV"; + #endif + /* OSF/1 */ + #if defined EAIO + case EAIO: return "EAIO"; + #endif + /* Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix */ + #if defined EAUTH + case EAUTH: return "EAUTH"; + #endif + /* GNU/Hurd */ + #if defined EBACKGROUND + case EBACKGROUND: return "EBACKGROUND"; + #endif + /* Mac OS X */ + #if defined EBADARCH + case EBADARCH: return "EBADARCH"; + #endif + /* Minix */ + #if defined EBADCALL + case EBADCALL: return "EBADCALL"; + #endif + /* Minix */ + #if defined EBADCPU + case EBADCPU: return "EBADCPU"; + #endif + /* Linux, IRIX, Solaris, Cygwin */ + #if defined EBADE + case EBADE: return "EBADE"; + #endif + /* Minix */ + #if defined EBADEPT + case EBADEPT: return "EBADEPT"; + #endif + /* Mac OS X */ + #if defined EBADEXEC + case EBADEXEC: return "EBADEXEC"; + #endif + /* Linux, IRIX, Solaris, Cygwin */ + #if defined EBADFD + case EBADFD: return "EBADFD"; + #endif + /* IRIX */ + #if defined EBADFILT + case EBADFILT: return "EBADFILT"; + #endif + /* Minix */ + #if defined EBADIOCTL + case EBADIOCTL: return "EBADIOCTL"; + #endif + /* Mac OS X */ + #if defined EBADMACHO + case EBADMACHO: return "EBADMACHO"; + #endif + /* Minix */ + #if defined EBADMODE + case EBADMODE: return "EBADMODE"; + #endif + /* Linux, IRIX, Solaris, Cygwin */ + #if defined EBADR + case EBADR: return "EBADR"; + #endif + /* Minix */ + #if defined EBADREQUEST + case EBADREQUEST: return "EBADREQUEST"; + #endif + /* Mac OS X, FreeBSD, NetBSD, OpenBSD, OSF/1, Minix */ + #if defined EBADRPC + case EBADRPC: return "EBADRPC"; + #endif + /* Linux, IRIX, Solaris, Cygwin */ + #if defined EBADRQC + case EBADRQC: return "EBADRQC"; + #endif + /* IRIX */ + #if defined EBADRSPEC + case EBADRSPEC: return "EBADRSPEC"; + #endif + /* Linux, IRIX, Solaris, Cygwin */ + #if defined EBADSLT + case EBADSLT: return "EBADSLT"; + #endif + /* IRIX */ + #if defined EBADTSPEC + case EBADTSPEC: return "EBADTSPEC"; + #endif + /* HP-UX */ + #if defined EBADVER + case EBADVER: return "EBADVER"; + #endif + /* IRIX */ + #if defined EBDHDL + case EBDHDL: return "EBDHDL"; + #endif + /* Linux, IRIX, Solaris, Cygwin */ + #if defined EBFONT + case EBFONT: return "EBFONT"; + #endif + /* IRIX */ + #if defined EBUFSIZE + case EBUFSIZE: return "EBUFSIZE"; + #endif + /* Minix */ + #if defined ECALLDENIED + case ECALLDENIED: return "ECALLDENIED"; + #endif + /* IRIX */ + #if defined ECANTEXTENT + case ECANTEXTENT: return "ECANTEXTENT"; + #endif + /* FreeBSD */ + #if defined ECAPMODE + case ECAPMODE: return "ECAPMODE"; + #endif + /* Cygwin */ + #if defined ECASECLASH + case ECASECLASH: return "ECASECLASH"; + #endif + /* IRIX */ + #if defined ECELLDOWN + case ECELLDOWN: return "ECELLDOWN"; + #endif + /* Linux, AIX, HP-UX, IRIX, Solaris, Cygwin */ + #if defined ECHRNG + case ECHRNG: return "ECHRNG"; + #endif + /* IRIX */ + #if defined ECKPT + case ECKPT: return "ECKPT"; + #endif + /* IRIX */ + #if defined ECLOCKCPU + case ECLOCKCPU: return "ECLOCKCPU"; + #endif + /* OSF/1 */ + #if defined ECLONEME && ECLONEME != ERESTART + case ECLONEME: return "ECLONEME"; + #endif + /* Linux, HP-UX, IRIX, Solaris, Cygwin */ + #if defined ECOMM + case ECOMM: return "ECOMM"; + #endif + /* HP-UX */ + #if defined ECONFIG + case ECONFIG: return "ECONFIG"; + #endif + /* IRIX */ + #if defined ECONTROLLER + case ECONTROLLER: return "ECONTROLLER"; + #endif + /* AIX */ + #if defined ECORRUPT + case ECORRUPT: return "ECORRUPT"; + #endif + /* GNU/Hurd */ + #if defined ED + case ED: return "ED"; + #endif + /* Minix */ + #if defined EDEADEPT + case EDEADEPT: return "EDEADEPT"; + #endif + /* IRIX, Solaris, Cygwin */ + #if defined EDEADLOCK && EDEADLOCK != EDEADLK + case EDEADLOCK: return "EDEADLOCK"; + #endif + /* Minix */ + #if defined EDEADSRCDST + case EDEADSRCDST: return "EDEADSRCDST"; + #endif + /* IRIX */ + #if defined EDELAY + case EDELAY: return "EDELAY"; + #endif + /* IRIX */ + #if defined EDESTROYED + case EDESTROYED: return "EDESTROYED"; + #endif + /* Mac OS X */ + #if defined EDEVERR + case EDEVERR: return "EDEVERR"; + #endif + /* GNU/Hurd */ + #if defined EDIED + case EDIED: return "EDIED"; + #endif + /* IRIX */ + #if defined EDIRCORRUPTED + case EDIRCORRUPTED: return "EDIRCORRUPTED"; + #endif + /* FreeBSD */ + #if defined EDIRIOCTL + case EDIRIOCTL: return "EDIRIOCTL"; + #endif + /* OSF/1 */ + #if defined EDIRTY + case EDIRTY: return "EDIRTY"; + #endif + /* IRIX */ + #if defined EDISJOINT + case EDISJOINT: return "EDISJOINT"; + #endif + /* AIX */ + #if defined EDIST + case EDIST: return "EDIST"; + #endif + /* Minix */ + #if defined EDONTREPLY + case EDONTREPLY: return "EDONTREPLY"; + #endif + /* FreeBSD */ + #if defined EDOOFUS + case EDOOFUS: return "EDOOFUS"; + #endif + /* Linux, HP-UX, Cygwin */ + #if defined EDOTDOT + case EDOTDOT: return "EDOTDOT"; + #endif + /* OSF/1 */ + #if defined EDUPPKG + case EDUPPKG: return "EDUPPKG"; + #endif + /* GNU/Hurd */ + #if defined ED_ALREADY_OPEN + case ED_ALREADY_OPEN: return "ED_ALREADY_OPEN"; + #endif + /* GNU/Hurd */ + #if defined ED_DEVICE_DOWN + case ED_DEVICE_DOWN: return "ED_DEVICE_DOWN"; + #endif + /* GNU/Hurd */ + #if defined ED_INVALID_OPERATION + case ED_INVALID_OPERATION:return "ED_INVALID_OPERATION"; + #endif + /* GNU/Hurd */ + #if defined ED_INVALID_RECNUM + case ED_INVALID_RECNUM:return "ED_INVALID_RECNUM"; + #endif + /* GNU/Hurd */ + #if defined ED_INVALID_SIZE + case ED_INVALID_SIZE: return "ED_INVALID_SIZE"; + #endif + /* GNU/Hurd */ + #if defined ED_IO_ERROR + case ED_IO_ERROR: return "ED_IO_ERROR"; + #endif + /* GNU/Hurd */ + #if defined ED_NO_MEMORY + case ED_NO_MEMORY: return "ED_NO_MEMORY"; + #endif + /* GNU/Hurd */ + #if defined ED_NO_SUCH_DEVICE + case ED_NO_SUCH_DEVICE:return "ED_NO_SUCH_DEVICE"; + #endif + /* GNU/Hurd */ + #if defined ED_READ_ONLY + case ED_READ_ONLY: return "ED_READ_ONLY"; + #endif + /* GNU/Hurd */ + #if defined ED_WOULD_BLOCK + case ED_WOULD_BLOCK: return "ED_WOULD_BLOCK"; + #endif + /* IRIX */ + #if defined EEMPTY + case EEMPTY: return "EEMPTY"; + #endif + /* OSF/1 */ + #if defined EEMULATE + case EEMULATE: return "EEMULATE"; + #endif + /* IRIX */ + #if defined EENDOFMINOR + case EENDOFMINOR: return "EENDOFMINOR"; + #endif + /* IRIX */ + #if defined EENQUEUED + case EENQUEUED: return "EENQUEUED"; + #endif + /* OSF/1 */ + #if defined EFAIL + case EFAIL: return "EFAIL"; + #endif + /* AIX */ + #if defined EFORMAT + case EFORMAT: return "EFORMAT"; + #endif + /* Haiku */ + #if defined EFPOS + case EFPOS: return "EFPOS"; + #endif + /* IRIX */ + #if defined EFSCORRUPTED + case EFSCORRUPTED: return "EFSCORRUPTED"; + #endif + /* Mac OS X, FreeBSD, NetBSD, OpenBSD, OSF/1, Minix, Cygwin */ + #if defined EFTYPE + case EFTYPE: return "EFTYPE"; + #endif + /* Minix */ + #if defined EGENERIC + case EGENERIC: return "EGENERIC"; + #endif + /* GNU/Hurd */ + #if defined EGRATUITOUS + case EGRATUITOUS: return "EGRATUITOUS"; + #endif + /* GNU/Hurd */ + #if defined EGREGIOUS + case EGREGIOUS: return "EGREGIOUS"; + #endif + /* IRIX */ + #if defined EGROUPLOOP + case EGROUPLOOP: return "EGROUPLOOP"; + #endif + /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, IRIX, OSF/1, Solaris, Minix, Haiku, Cygwin */ + #if defined EHOSTDOWN + case EHOSTDOWN: return "EHOSTDOWN"; + #endif + /* Linux */ + #if defined EHWPOISON + case EHWPOISON: return "EHWPOISON"; + #endif + /* GNU/Hurd */ + #if defined EIEIO + case EIEIO: return "EIEIO"; + #endif + /* IRIX */ + #if defined EINIT + case EINIT: return "EINIT"; + #endif + /* OSF/1 */ + #if defined EINPROG + case EINPROG: return "EINPROG"; + #endif + /* IRIX */ + #if defined EINVALMODE + case EINVALMODE: return "EINVALMODE"; + #endif + /* IRIX */ + #if defined EINVALSTATE + case EINVALSTATE: return "EINVALSTATE"; + #endif + /* IRIX */ + #if defined EINVALTIME + case EINVALTIME: return "EINVALTIME"; + #endif + /* IRIX */ + #if defined EIORESID + case EIORESID: return "EIORESID"; + #endif + /* OpenBSD */ + #if defined EIPSEC + case EIPSEC: return "EIPSEC"; + #endif + /* Linux, IRIX */ + #if defined EISNAM + case EISNAM: return "EISNAM"; + #endif + /* IRIX */ + #if defined EJOINED + case EJOINED: return "EJOINED"; + #endif + /* FreeBSD, OSF/1 */ + #if defined EJUSTRETURN + case EJUSTRETURN: return "EJUSTRETURN"; + #endif + /* GNU/Hurd */ + #if defined EKERN_ABORTED + case EKERN_ABORTED: return "EKERN_ABORTED"; + #endif + /* GNU/Hurd */ + #if defined EKERN_FAILURE + case EKERN_FAILURE: return "EKERN_FAILURE"; + #endif + /* GNU/Hurd */ + #if defined EKERN_INTERRUPTED + case EKERN_INTERRUPTED:return "EKERN_INTERRUPTED"; + #endif + /* GNU/Hurd */ + #if defined EKERN_INVALID_ADDRESS + case EKERN_INVALID_ADDRESS:return "EKERN_INVALID_ADDRESS"; + #endif + /* GNU/Hurd */ + #if defined EKERN_INVALID_ARGUMENT + case EKERN_INVALID_ARGUMENT:return "EKERN_INVALID_ARGUMENT"; + #endif + /* GNU/Hurd */ + #if defined EKERN_INVALID_CAPABILITY + case EKERN_INVALID_CAPABILITY:return "EKERN_INVALID_CAPABILITY"; + #endif + /* GNU/Hurd */ + #if defined EKERN_INVALID_HOST + case EKERN_INVALID_HOST:return "EKERN_INVALID_HOST"; + #endif + /* GNU/Hurd */ + #if defined EKERN_INVALID_NAME + case EKERN_INVALID_NAME:return "EKERN_INVALID_NAME"; + #endif + /* GNU/Hurd */ + #if defined EKERN_INVALID_RIGHT + case EKERN_INVALID_RIGHT:return "EKERN_INVALID_RIGHT"; + #endif + /* GNU/Hurd */ + #if defined EKERN_INVALID_TASK + case EKERN_INVALID_TASK:return "EKERN_INVALID_TASK"; + #endif + /* GNU/Hurd */ + #if defined EKERN_INVALID_VALUE + case EKERN_INVALID_VALUE:return "EKERN_INVALID_VALUE"; + #endif + /* GNU/Hurd */ + #if defined EKERN_MEMORY_ERROR + case EKERN_MEMORY_ERROR:return "EKERN_MEMORY_ERROR"; + #endif + /* GNU/Hurd */ + #if defined EKERN_MEMORY_FAILURE + case EKERN_MEMORY_FAILURE:return "EKERN_MEMORY_FAILURE"; + #endif + /* GNU/Hurd */ + #if defined EKERN_MEMORY_PRESENT + case EKERN_MEMORY_PRESENT:return "EKERN_MEMORY_PRESENT"; + #endif + /* GNU/Hurd */ + #if defined EKERN_NAME_EXISTS + case EKERN_NAME_EXISTS:return "EKERN_NAME_EXISTS"; + #endif + /* GNU/Hurd */ + #if defined EKERN_NOT_IN_SET + case EKERN_NOT_IN_SET:return "EKERN_NOT_IN_SET"; + #endif + /* GNU/Hurd */ + #if defined EKERN_NOT_RECEIVER + case EKERN_NOT_RECEIVER:return "EKERN_NOT_RECEIVER"; + #endif + /* GNU/Hurd */ + #if defined EKERN_NO_ACCESS + case EKERN_NO_ACCESS: return "EKERN_NO_ACCESS"; + #endif + /* GNU/Hurd */ + #if defined EKERN_NO_SPACE + case EKERN_NO_SPACE: return "EKERN_NO_SPACE"; + #endif + /* GNU/Hurd */ + #if defined EKERN_PROTECTION_FAILURE + case EKERN_PROTECTION_FAILURE:return "EKERN_PROTECTION_FAILURE"; + #endif + /* GNU/Hurd */ + #if defined EKERN_RESOURCE_SHORTAGE + case EKERN_RESOURCE_SHORTAGE:return "EKERN_RESOURCE_SHORTAGE"; + #endif + /* GNU/Hurd */ + #if defined EKERN_RIGHT_EXISTS + case EKERN_RIGHT_EXISTS:return "EKERN_RIGHT_EXISTS"; + #endif + /* GNU/Hurd */ + #if defined EKERN_TERMINATED + case EKERN_TERMINATED:return "EKERN_TERMINATED"; + #endif + /* GNU/Hurd */ + #if defined EKERN_TIMEDOUT + case EKERN_TIMEDOUT: return "EKERN_TIMEDOUT"; + #endif + /* GNU/Hurd */ + #if defined EKERN_UREFS_OVERFLOW + case EKERN_UREFS_OVERFLOW:return "EKERN_UREFS_OVERFLOW"; + #endif + /* GNU/Hurd */ + #if defined EKERN_WRITE_PROTECTION_FAILURE + case EKERN_WRITE_PROTECTION_FAILURE:return "EKERN_WRITE_PROTECTION_FAILURE"; + #endif + /* Linux */ + #if defined EKEYEXPIRED + case EKEYEXPIRED: return "EKEYEXPIRED"; + #endif + /* Linux */ + #if defined EKEYREJECTED + case EKEYREJECTED: return "EKEYREJECTED"; + #endif + /* Linux */ + #if defined EKEYREVOKED + case EKEYREVOKED: return "EKEYREVOKED"; + #endif + /* Linux, AIX, HP-UX, IRIX, Solaris, Cygwin */ + #if defined EL2HLT + case EL2HLT: return "EL2HLT"; + #endif + /* Linux, AIX, HP-UX, IRIX, Solaris, Cygwin */ + #if defined EL2NSYNC + case EL2NSYNC: return "EL2NSYNC"; + #endif + /* Linux, AIX, HP-UX, IRIX, Solaris, Cygwin */ + #if defined EL3HLT + case EL3HLT: return "EL3HLT"; + #endif + /* Linux, AIX, HP-UX, IRIX, Solaris, Cygwin */ + #if defined EL3RST + case EL3RST: return "EL3RST"; + #endif + /* Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix */ + #if defined ELAST && 0 + case ELAST: return "ELAST"; + #endif + /* Cygwin */ + #if defined ELBIN + case ELBIN: return "ELBIN"; + #endif + /* Linux, IRIX, Solaris, Cygwin */ + #if defined ELIBACC + case ELIBACC: return "ELIBACC"; + #endif + /* Linux, IRIX, Solaris, Cygwin */ + #if defined ELIBBAD + case ELIBBAD: return "ELIBBAD"; + #endif + /* Linux, IRIX, Solaris, Cygwin */ + #if defined ELIBEXEC + case ELIBEXEC: return "ELIBEXEC"; + #endif + /* Linux, IRIX, Solaris, Cygwin */ + #if defined ELIBMAX + case ELIBMAX: return "ELIBMAX"; + #endif + /* Linux, IRIX, Solaris, Cygwin */ + #if defined ELIBSCN + case ELIBSCN: return "ELIBSCN"; + #endif + /* Linux, AIX, HP-UX, IRIX, Solaris, Cygwin */ + #if defined ELNRNG + case ELNRNG: return "ELNRNG"; + #endif + /* Minix */ + #if defined ELOCKED + case ELOCKED: return "ELOCKED"; + #endif + /* Solaris */ + #if defined ELOCKUNMAPPED + case ELOCKUNMAPPED: return "ELOCKUNMAPPED"; + #endif + /* IRIX */ + #if defined ELOGINLIM + case ELOGINLIM: return "ELOGINLIM"; + #endif + /* GNU/Hurd */ + #if defined EMACH_RCV_BODY_ERROR + case EMACH_RCV_BODY_ERROR:return "EMACH_RCV_BODY_ERROR"; + #endif + /* GNU/Hurd */ + #if defined EMACH_RCV_HEADER_ERROR + case EMACH_RCV_HEADER_ERROR:return "EMACH_RCV_HEADER_ERROR"; + #endif + /* GNU/Hurd */ + #if defined EMACH_RCV_INTERRUPTED + case EMACH_RCV_INTERRUPTED:return "EMACH_RCV_INTERRUPTED"; + #endif + /* GNU/Hurd */ + #if defined EMACH_RCV_INVALID_DATA + case EMACH_RCV_INVALID_DATA:return "EMACH_RCV_INVALID_DATA"; + #endif + /* GNU/Hurd */ + #if defined EMACH_RCV_INVALID_NAME + case EMACH_RCV_INVALID_NAME:return "EMACH_RCV_INVALID_NAME"; + #endif + /* GNU/Hurd */ + #if defined EMACH_RCV_INVALID_NOTIFY + case EMACH_RCV_INVALID_NOTIFY:return "EMACH_RCV_INVALID_NOTIFY"; + #endif + /* GNU/Hurd */ + #if defined EMACH_RCV_IN_PROGRESS + case EMACH_RCV_IN_PROGRESS:return "EMACH_RCV_IN_PROGRESS"; + #endif + /* GNU/Hurd */ + #if defined EMACH_RCV_IN_SET + case EMACH_RCV_IN_SET:return "EMACH_RCV_IN_SET"; + #endif + /* GNU/Hurd */ + #if defined EMACH_RCV_PORT_CHANGED + case EMACH_RCV_PORT_CHANGED:return "EMACH_RCV_PORT_CHANGED"; + #endif + /* GNU/Hurd */ + #if defined EMACH_RCV_PORT_DIED + case EMACH_RCV_PORT_DIED:return "EMACH_RCV_PORT_DIED"; + #endif + /* GNU/Hurd */ + #if defined EMACH_RCV_TIMED_OUT + case EMACH_RCV_TIMED_OUT:return "EMACH_RCV_TIMED_OUT"; + #endif + /* GNU/Hurd */ + #if defined EMACH_RCV_TOO_LARGE + case EMACH_RCV_TOO_LARGE:return "EMACH_RCV_TOO_LARGE"; + #endif + /* GNU/Hurd */ + #if defined EMACH_SEND_INTERRUPTED + case EMACH_SEND_INTERRUPTED:return "EMACH_SEND_INTERRUPTED"; + #endif + /* GNU/Hurd */ + #if defined EMACH_SEND_INVALID_DATA + case EMACH_SEND_INVALID_DATA:return "EMACH_SEND_INVALID_DATA"; + #endif + /* GNU/Hurd */ + #if defined EMACH_SEND_INVALID_DEST + case EMACH_SEND_INVALID_DEST:return "EMACH_SEND_INVALID_DEST"; + #endif + /* GNU/Hurd */ + #if defined EMACH_SEND_INVALID_HEADER + case EMACH_SEND_INVALID_HEADER:return "EMACH_SEND_INVALID_HEADER"; + #endif + /* GNU/Hurd */ + #if defined EMACH_SEND_INVALID_MEMORY + case EMACH_SEND_INVALID_MEMORY:return "EMACH_SEND_INVALID_MEMORY"; + #endif + /* GNU/Hurd */ + #if defined EMACH_SEND_INVALID_NOTIFY + case EMACH_SEND_INVALID_NOTIFY:return "EMACH_SEND_INVALID_NOTIFY"; + #endif + /* GNU/Hurd */ + #if defined EMACH_SEND_INVALID_REPLY + case EMACH_SEND_INVALID_REPLY:return "EMACH_SEND_INVALID_REPLY"; + #endif + /* GNU/Hurd */ + #if defined EMACH_SEND_INVALID_RIGHT + case EMACH_SEND_INVALID_RIGHT:return "EMACH_SEND_INVALID_RIGHT"; + #endif + /* GNU/Hurd */ + #if defined EMACH_SEND_INVALID_TYPE + case EMACH_SEND_INVALID_TYPE:return "EMACH_SEND_INVALID_TYPE"; + #endif + /* GNU/Hurd */ + #if defined EMACH_SEND_IN_PROGRESS + case EMACH_SEND_IN_PROGRESS:return "EMACH_SEND_IN_PROGRESS"; + #endif + /* GNU/Hurd */ + #if defined EMACH_SEND_MSG_TOO_SMALL + case EMACH_SEND_MSG_TOO_SMALL:return "EMACH_SEND_MSG_TOO_SMALL"; + #endif + /* GNU/Hurd */ + #if defined EMACH_SEND_NOTIFY_IN_PROGRESS + case EMACH_SEND_NOTIFY_IN_PROGRESS:return "EMACH_SEND_NOTIFY_IN_PROGRESS"; + #endif + /* GNU/Hurd */ + #if defined EMACH_SEND_NO_BUFFER + case EMACH_SEND_NO_BUFFER:return "EMACH_SEND_NO_BUFFER"; + #endif + /* GNU/Hurd */ + #if defined EMACH_SEND_NO_NOTIFY + case EMACH_SEND_NO_NOTIFY:return "EMACH_SEND_NO_NOTIFY"; + #endif + /* GNU/Hurd */ + #if defined EMACH_SEND_TIMED_OUT + case EMACH_SEND_TIMED_OUT:return "EMACH_SEND_TIMED_OUT"; + #endif + /* GNU/Hurd */ + #if defined EMACH_SEND_WILL_NOTIFY + case EMACH_SEND_WILL_NOTIFY:return "EMACH_SEND_WILL_NOTIFY"; + #endif + /* AIX, OSF/1 */ + #if defined EMEDIA + case EMEDIA: return "EMEDIA"; + #endif + /* Linux, OpenBSD */ + #if defined EMEDIUMTYPE + case EMEDIUMTYPE: return "EMEDIUMTYPE"; + #endif + /* IRIX */ + #if defined EMEMRETRY + case EMEMRETRY: return "EMEMRETRY"; + #endif + /* IRIX */ + #if defined EMIGRATED + case EMIGRATED: return "EMIGRATED"; + #endif + /* IRIX */ + #if defined EMIGRATING + case EMIGRATING: return "EMIGRATING"; + #endif + /* GNU/Hurd */ + #if defined EMIG_ARRAY_TOO_LARGE + case EMIG_ARRAY_TOO_LARGE:return "EMIG_ARRAY_TOO_LARGE"; + #endif + /* GNU/Hurd */ + #if defined EMIG_BAD_ARGUMENTS + case EMIG_BAD_ARGUMENTS:return "EMIG_BAD_ARGUMENTS"; + #endif + /* GNU/Hurd */ + #if defined EMIG_BAD_ID + case EMIG_BAD_ID: return "EMIG_BAD_ID"; + #endif + /* GNU/Hurd */ + #if defined EMIG_DESTROY_REQUEST + case EMIG_DESTROY_REQUEST:return "EMIG_DESTROY_REQUEST"; + #endif + /* GNU/Hurd */ + #if defined EMIG_EXCEPTION + case EMIG_EXCEPTION: return "EMIG_EXCEPTION"; + #endif + /* GNU/Hurd */ + #if defined EMIG_NO_REPLY + case EMIG_NO_REPLY: return "EMIG_NO_REPLY"; + #endif + /* GNU/Hurd */ + #if defined EMIG_REMOTE_ERROR + case EMIG_REMOTE_ERROR:return "EMIG_REMOTE_ERROR"; + #endif + /* GNU/Hurd */ + #if defined EMIG_REPLY_MISMATCH + case EMIG_REPLY_MISMATCH:return "EMIG_REPLY_MISMATCH"; + #endif + /* GNU/Hurd */ + #if defined EMIG_SERVER_DIED + case EMIG_SERVER_DIED:return "EMIG_SERVER_DIED"; + #endif + /* GNU/Hurd */ + #if defined EMIG_TYPE_ERROR + case EMIG_TYPE_ERROR: return "EMIG_TYPE_ERROR"; + #endif + /* OSF/1 */ + #if defined EMTIMERS + case EMTIMERS: return "EMTIMERS"; + #endif + /* IRIX */ + #if defined EMUSTRUN + case EMUSTRUN: return "EMUSTRUN"; + #endif + /* Linux, IRIX */ + #if defined ENAVAIL + case ENAVAIL: return "ENAVAIL"; + #endif + /* Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix */ + #if defined ENEEDAUTH + case ENEEDAUTH: return "ENEEDAUTH"; + #endif + /* IRIX */ + #if defined ENFSREMOTE + case ENFSREMOTE: return "ENFSREMOTE"; + #endif + /* Cygwin */ + #if defined ENMFILE + case ENMFILE: return "ENMFILE"; + #endif + /* Linux, IRIX, Solaris, Cygwin */ + #if defined ENOANO + case ENOANO: return "ENOANO"; + #endif + /* IRIX */ + #if defined ENOATTACH + case ENOATTACH: return "ENOATTACH"; + #endif + /* Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, IRIX, Minix */ + #if defined ENOATTR + case ENOATTR: return "ENOATTR"; + #endif + /* IRIX */ + #if defined ENOBWD + case ENOBWD: return "ENOBWD"; + #endif + /* MirBSD */ + #if defined ENOCOFFEE + case ENOCOFFEE: return "ENOCOFFEE"; + #endif + /* Minix */ + #if defined ENOCONN + case ENOCONN: return "ENOCONN"; + #endif + /* AIX */ + #if defined ENOCONNECT + case ENOCONNECT: return "ENOCONNECT"; + #endif + /* Linux, AIX, HP-UX, IRIX, Solaris, Cygwin */ + #if defined ENOCSI + case ENOCSI: return "ENOCSI"; + #endif + /* IRIX */ + #if defined ENOEXIST + case ENOEXIST: return "ENOEXIST"; + #endif + /* IRIX */ + #if defined ENOINTRGROUP + case ENOINTRGROUP: return "ENOINTRGROUP"; + #endif + /* FreeBSD */ + #if defined ENOIOCTL + case ENOIOCTL: return "ENOIOCTL"; + #endif + /* Linux */ + #if defined ENOKEY + case ENOKEY: return "ENOKEY"; + #endif + /* IRIX */ + #if defined ENOLIMFILE + case ENOLIMFILE: return "ENOLIMFILE"; + #endif + /* HP-UX */ + #if defined ENOLOAD + case ENOLOAD: return "ENOLOAD"; + #endif + /* IRIX */ + #if defined ENOLOGIN + case ENOLOGIN: return "ENOLOGIN"; + #endif + /* HP-UX */ + #if defined ENOMATCH + case ENOMATCH: return "ENOMATCH"; + #endif + /* Linux, OpenBSD, Cygwin */ + #if defined ENOMEDIUM + case ENOMEDIUM: return "ENOMEDIUM"; + #endif + /* IRIX */ + #if defined ENOMESSAGE + case ENOMESSAGE: return "ENOMESSAGE"; + #endif + /* Linux, HP-UX, IRIX, Solaris, Cygwin */ + #if defined ENONET + case ENONET: return "ENONET"; + #endif + /* Linux, HP-UX, IRIX, OSF/1, Solaris, Cygwin */ + #if defined ENOPKG + case ENOPKG: return "ENOPKG"; + #endif + /* Mac OS X */ + #if defined ENOPOLICY + case ENOPOLICY: return "ENOPOLICY"; + #endif + /* IRIX */ + #if defined ENOPROC + case ENOPROC: return "ENOPROC"; + #endif + /* HP-UX */ + #if defined ENOREG + case ENOREG: return "ENOREG"; + #endif + /* IRIX */ + #if defined ENOSERVICE + case ENOSERVICE: return "ENOSERVICE"; + #endif + /* Cygwin */ + #if defined ENOSHARE + case ENOSHARE: return "ENOSHARE"; + #endif + /* HP-UX, OSF/1 */ + #if defined ENOSYM + case ENOSYM: return "ENOSYM"; + #endif + /* Solaris */ + #if defined ENOTACTIVE + case ENOTACTIVE: return "ENOTACTIVE"; + #endif + /* Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, IRIX, OSF/1, Solaris, Minix, Cygwin */ + #if defined ENOTBLK + case ENOTBLK: return "ENOTBLK"; + #endif + /* FreeBSD */ + #if defined ENOTCAPABLE + case ENOTCAPABLE: return "ENOTCAPABLE"; + #endif + /* IRIX */ + #if defined ENOTCONTROLLER + case ENOTCONTROLLER: return "ENOTCONTROLLER"; + #endif + /* IRIX */ + #if defined ENOTENQUEUED + case ENOTENQUEUED: return "ENOTENQUEUED"; + #endif + /* IRIX */ + #if defined ENOTJOINED + case ENOTJOINED: return "ENOTJOINED"; + #endif + /* Linux, IRIX */ + #if defined ENOTNAM + case ENOTNAM: return "ENOTNAM"; + #endif + /* AIX, Minix */ + #if defined ENOTREADY + case ENOTREADY: return "ENOTREADY"; + #endif + /* AIX */ + #if defined ENOTRUST + case ENOTRUST: return "ENOTRUST"; + #endif + /* IRIX */ + #if defined ENOTSTOPPED + case ENOTSTOPPED: return "ENOTSTOPPED"; + #endif + /* Linux, IRIX, Solaris, Cygwin */ + #if defined ENOTUNIQ + case ENOTUNIQ: return "ENOTUNIQ"; + #endif + /* HP-UX */ + #if defined ENOUNLD + case ENOUNLD: return "ENOUNLD"; + #endif + /* HP-UX */ + #if defined ENOUNREG + case ENOUNREG: return "ENOUNREG"; + #endif + /* Minix */ + #if defined ENOURG + case ENOURG: return "ENOURG"; + #endif + /* native Windows */ + #if defined EOTHER + case EOTHER: return "EOTHER"; + #endif + /* Minix */ + #if defined EPACKSIZE + case EPACKSIZE: return "EPACKSIZE"; + #endif + /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, IRIX, OSF/1, Solaris, Minix, Haiku, Cygwin */ + #if defined EPFNOSUPPORT + case EPFNOSUPPORT: return "EPFNOSUPPORT"; + #endif + /* Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, IRIX, OSF/1, Minix, Cygwin */ + #if defined EPROCLIM + case EPROCLIM: return "EPROCLIM"; + #endif + /* Mac OS X, FreeBSD, NetBSD, OpenBSD, OSF/1, Minix */ + #if defined EPROCUNAVAIL + case EPROCUNAVAIL: return "EPROCUNAVAIL"; + #endif + /* Mac OS X, FreeBSD, NetBSD, OpenBSD, OSF/1, Minix */ + #if defined EPROGMISMATCH + case EPROGMISMATCH: return "EPROGMISMATCH"; + #endif + /* Mac OS X, FreeBSD, NetBSD, OpenBSD, OSF/1, Minix */ + #if defined EPROGUNAVAIL + case EPROGUNAVAIL: return "EPROGUNAVAIL"; + #endif + /* Mac OS X */ + #if defined EPWROFF + case EPWROFF: return "EPWROFF"; + #endif + /* Mac OS X */ + #if defined EQFULL + case EQFULL: return "EQFULL"; + #endif + /* HP-UX */ + #if defined ERELOC + case ERELOC: return "ERELOC"; + #endif + /* OSF/1 */ + #if defined ERELOCATED + case ERELOCATED: return "ERELOCATED"; + #endif + /* FreeBSD */ + #if defined ERELOOKUP + case ERELOOKUP: return "ERELOOKUP"; + #endif + /* Linux, IRIX, Solaris, Cygwin */ + #if defined EREMCHG + case EREMCHG: return "EREMCHG"; + #endif + /* IRIX */ + #if defined EREMDEV + case EREMDEV: return "EREMDEV"; + #endif + /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, IRIX, OSF/1, Solaris, Minix, Haiku, Cygwin */ + #if defined EREMOTE + case EREMOTE: return "EREMOTE"; + #endif + /* Linux, IRIX */ + #if defined EREMOTEIO + case EREMOTEIO: return "EREMOTEIO"; + #endif + /* HP-UX */ + #if defined EREMOTERELEASE + case EREMOTERELEASE: return "EREMOTERELEASE"; + #endif + /* Linux, FreeBSD, AIX, IRIX, OSF/1, Solaris, Minix */ + #if defined ERESTART + case ERESTART: return "ERESTART"; + #endif + /* Linux */ + #if defined ERFKILL + case ERFKILL: return "ERFKILL"; + #endif + /* Mac OS X, FreeBSD, NetBSD, OpenBSD, OSF/1, Minix */ + #if defined ERPCMISMATCH + case ERPCMISMATCH: return "ERPCMISMATCH"; + #endif + /* AIX */ + #if defined ESAD + case ESAD: return "ESAD"; + #endif + /* Mac OS X */ + #if defined ESHLIBVERS + case ESHLIBVERS: return "ESHLIBVERS"; + #endif + /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, IRIX, OSF/1, Solaris, Minix, Haiku, Cygwin */ + #if defined ESHUTDOWN + case ESHUTDOWN: return "ESHUTDOWN"; + #endif + /* Haiku */ + #if defined ESIGPARM + case ESIGPARM: return "ESIGPARM"; + #endif + /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, IRIX, OSF/1, Solaris, Minix, Cygwin */ + #if defined ESOCKTNOSUPPORT + case ESOCKTNOSUPPORT: return "ESOCKTNOSUPPORT"; + #endif + /* AIX, OSF/1 */ + #if defined ESOFT + case ESOFT: return "ESOFT"; + #endif + /* Linux, HP-UX, IRIX, Solaris, Cygwin */ + #if defined ESRMNT + case ESRMNT: return "ESRMNT"; + #endif + /* Linux, IRIX, Solaris, Cygwin */ + #if defined ESTRPIPE + case ESTRPIPE: return "ESTRPIPE"; + #endif + /* OSF/1 */ + #if defined ESUCCESS + case ESUCCESS: return "ESUCCESS"; + #endif + /* AIX */ + #if defined ESYSERROR + case ESYSERROR: return "ESYSERROR"; + #endif + /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, IRIX, OSF/1, Solaris, Minix, Cygwin */ + #if defined ETOOMANYREFS + case ETOOMANYREFS: return "ETOOMANYREFS"; + #endif + /* Minix */ + #if defined ETRAPDENIED + case ETRAPDENIED: return "ETRAPDENIED"; + #endif + /* Linux, IRIX */ + #if defined EUCLEAN + case EUCLEAN: return "EUCLEAN"; + #endif + /* Linux, AIX, HP-UX, IRIX, Solaris, Cygwin */ + #if defined EUNATCH + case EUNATCH: return "EUNATCH"; + #endif + /* Minix */ + #if defined EURG + case EURG: return "EURG"; + #endif + /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, IRIX, OSF/1, Solaris, Minix, Cygwin */ + #if defined EUSERS + case EUSERS: return "EUSERS"; + #endif + /* OSF/1 */ + #if defined EVERSION + case EVERSION: return "EVERSION"; + #endif + /* IRIX */ + #if defined EWRONGFS + case EWRONGFS: return "EWRONGFS"; + #endif + /* AIX */ + #if defined EWRPROTECT + case EWRPROTECT: return "EWRPROTECT"; + #endif + /* Linux, IRIX, Solaris, Cygwin */ + #if defined EXFULL + case EXFULL: return "EXFULL"; + #endif + + default: + return NULL; + } +} diff --git a/lib/string.in.h b/lib/string.in.h index 6a54270..b0c490b 100644 --- a/lib/string.in.h +++ b/lib/string.in.h @@ -1045,6 +1045,30 @@ _GL_WARN_ON_USE (strerror_r, "strerror_r is unportable - " # endif #endif +/* Return the name of the system error code ERRNUM. */ +#if @GNULIB_STRERRORNAME_NP@ +# if @REPLACE_STRERRORNAME_NP@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strerrorname_np +# define strerrorname_np rpl_strerrorname_np +# endif +_GL_FUNCDECL_RPL (strerrorname_np, const char *, (int errnum)); +_GL_CXXALIAS_RPL (strerrorname_np, const char *, (int errnum)); +# else +# if !@HAVE_STRERRORNAME_NP@ +_GL_FUNCDECL_SYS (strerrorname_np, const char *, (int errnum)); +# endif +_GL_CXXALIAS_SYS (strerrorname_np, const char *, (int errnum)); +# endif +_GL_CXXALIASWARN (strerrorname_np); +#elif defined GNULIB_POSIXCHECK +# undef strerrorname_np +# if HAVE_RAW_DECL_STRERRORNAME_NP +_GL_WARN_ON_USE (strerrorname_np, "strerrorname_np is unportable - " + "use gnulib module strerrorname_np for portability"); +# endif +#endif + /* Return an abbreviation string for the signal number SIG. */ #if @GNULIB_SIGABBREV_NP@ # if ! @HAVE_SIGABBREV_NP@ diff --git a/m4/strerrorname_np.m4 b/m4/strerrorname_np.m4 new file mode 100644 index 0000000..395e31f --- /dev/null +++ b/m4/strerrorname_np.m4 @@ -0,0 +1,46 @@ +# strerrorname_np.m4 serial 1 +dnl Copyright (C) 2020 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_STRERRORNAME_NP], +[ + dnl Persuade glibc to declare strerrorname_np(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + AC_CHECK_FUNCS([strerrorname_np]) + if test $ac_cv_func_strerrorname_np = yes; then + dnl In glibc 2.32, strerrorname_np returns English error descriptions, not + dnl error names. + dnl See . + AC_CACHE_CHECK([whether strerrorname_np works], + [gl_cv_func_strerrorname_np_works], + [AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#include + #include + ]], + [[return strcmp (strerrorname_np (EINVAL), "EINVAL") != 0; + ]])], + [gl_cv_func_strerrorname_np_works=yes], + [gl_cv_func_strerrorname_np_works=no], + [case "$host_os" in + # Guess no on glibc systems. + *-gnu* | gnu*) + gl_cv_func_strerrorname_np_works="guessing no" ;; + # Otherwise obey --enable-cross-guesses. + *) + gl_cv_func_strerrorname_np_works="$gl_cross_guess_normal" ;; + esac + ]) + ]) + case "$gl_cv_func_strerrorname_np_works" in + *yes) ;; + *) REPLACE_STRERRORNAME_NP=1 ;; + esac + else + HAVE_STRERRORNAME_NP=0 + fi +]) diff --git a/m4/string_h.m4 b/m4/string_h.m4 index d7c12aa..29796b8 100644 --- a/m4/string_h.m4 +++ b/m4/string_h.m4 @@ -5,7 +5,7 @@ # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 26 +# serial 27 # Written by Paul Eggert. @@ -28,7 +28,7 @@ AC_DEFUN([gl_HEADER_STRING_H_BODY], ]], [ffsl ffsll memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul strdup strncat strndup strnlen strpbrk strsep strcasestr strtok_r - strerror_r sigabbrev_np sigdescr_np strsignal strverscmp]) + strerror_r strerrorname_np sigabbrev_np sigdescr_np strsignal strverscmp]) AC_REQUIRE([AC_C_RESTRICT]) ]) @@ -44,47 +44,48 @@ AC_DEFUN([gl_STRING_MODULE_INDICATOR], AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS], [ - GNULIB_EXPLICIT_BZERO=0; AC_SUBST([GNULIB_EXPLICIT_BZERO]) - GNULIB_FFSL=0; AC_SUBST([GNULIB_FFSL]) - GNULIB_FFSLL=0; AC_SUBST([GNULIB_FFSLL]) - GNULIB_MEMCHR=0; AC_SUBST([GNULIB_MEMCHR]) - GNULIB_MEMMEM=0; AC_SUBST([GNULIB_MEMMEM]) - GNULIB_MEMPCPY=0; AC_SUBST([GNULIB_MEMPCPY]) - GNULIB_MEMRCHR=0; AC_SUBST([GNULIB_MEMRCHR]) - GNULIB_RAWMEMCHR=0; AC_SUBST([GNULIB_RAWMEMCHR]) - GNULIB_STPCPY=0; AC_SUBST([GNULIB_STPCPY]) - GNULIB_STPNCPY=0; AC_SUBST([GNULIB_STPNCPY]) - GNULIB_STRCHRNUL=0; AC_SUBST([GNULIB_STRCHRNUL]) - GNULIB_STRDUP=0; AC_SUBST([GNULIB_STRDUP]) - GNULIB_STRNCAT=0; AC_SUBST([GNULIB_STRNCAT]) - GNULIB_STRNDUP=0; AC_SUBST([GNULIB_STRNDUP]) - GNULIB_STRNLEN=0; AC_SUBST([GNULIB_STRNLEN]) - GNULIB_STRPBRK=0; AC_SUBST([GNULIB_STRPBRK]) - GNULIB_STRSEP=0; AC_SUBST([GNULIB_STRSEP]) - GNULIB_STRSTR=0; AC_SUBST([GNULIB_STRSTR]) - GNULIB_STRCASESTR=0; AC_SUBST([GNULIB_STRCASESTR]) - GNULIB_STRTOK_R=0; AC_SUBST([GNULIB_STRTOK_R]) - GNULIB_MBSLEN=0; AC_SUBST([GNULIB_MBSLEN]) - GNULIB_MBSNLEN=0; AC_SUBST([GNULIB_MBSNLEN]) - GNULIB_MBSCHR=0; AC_SUBST([GNULIB_MBSCHR]) - GNULIB_MBSRCHR=0; AC_SUBST([GNULIB_MBSRCHR]) - GNULIB_MBSSTR=0; AC_SUBST([GNULIB_MBSSTR]) - GNULIB_MBSCASECMP=0; AC_SUBST([GNULIB_MBSCASECMP]) - GNULIB_MBSNCASECMP=0; AC_SUBST([GNULIB_MBSNCASECMP]) - GNULIB_MBSPCASECMP=0; AC_SUBST([GNULIB_MBSPCASECMP]) - GNULIB_MBSCASESTR=0; AC_SUBST([GNULIB_MBSCASESTR]) - GNULIB_MBSCSPN=0; AC_SUBST([GNULIB_MBSCSPN]) - GNULIB_MBSPBRK=0; AC_SUBST([GNULIB_MBSPBRK]) - GNULIB_MBSSPN=0; AC_SUBST([GNULIB_MBSSPN]) - GNULIB_MBSSEP=0; AC_SUBST([GNULIB_MBSSEP]) - GNULIB_MBSTOK_R=0; AC_SUBST([GNULIB_MBSTOK_R]) - GNULIB_STRERROR=0; AC_SUBST([GNULIB_STRERROR]) - GNULIB_STRERROR_R=0; AC_SUBST([GNULIB_STRERROR_R]) - GNULIB_SIGABBREV_NP=0;AC_SUBST([GNULIB_SIGABBREV_NP]) - GNULIB_SIGDESCR_NP=0; AC_SUBST([GNULIB_SIGDESCR_NP]) - GNULIB_STRSIGNAL=0; AC_SUBST([GNULIB_STRSIGNAL]) - GNULIB_STRVERSCMP=0; AC_SUBST([GNULIB_STRVERSCMP]) - HAVE_MBSLEN=0; AC_SUBST([HAVE_MBSLEN]) + GNULIB_EXPLICIT_BZERO=0; AC_SUBST([GNULIB_EXPLICIT_BZERO]) + GNULIB_FFSL=0; AC_SUBST([GNULIB_FFSL]) + GNULIB_FFSLL=0; AC_SUBST([GNULIB_FFSLL]) + GNULIB_MEMCHR=0; AC_SUBST([GNULIB_MEMCHR]) + GNULIB_MEMMEM=0; AC_SUBST([GNULIB_MEMMEM]) + GNULIB_MEMPCPY=0; AC_SUBST([GNULIB_MEMPCPY]) + GNULIB_MEMRCHR=0; AC_SUBST([GNULIB_MEMRCHR]) + GNULIB_RAWMEMCHR=0; AC_SUBST([GNULIB_RAWMEMCHR]) + GNULIB_STPCPY=0; AC_SUBST([GNULIB_STPCPY]) + GNULIB_STPNCPY=0; AC_SUBST([GNULIB_STPNCPY]) + GNULIB_STRCHRNUL=0; AC_SUBST([GNULIB_STRCHRNUL]) + GNULIB_STRDUP=0; AC_SUBST([GNULIB_STRDUP]) + GNULIB_STRNCAT=0; AC_SUBST([GNULIB_STRNCAT]) + GNULIB_STRNDUP=0; AC_SUBST([GNULIB_STRNDUP]) + GNULIB_STRNLEN=0; AC_SUBST([GNULIB_STRNLEN]) + GNULIB_STRPBRK=0; AC_SUBST([GNULIB_STRPBRK]) + GNULIB_STRSEP=0; AC_SUBST([GNULIB_STRSEP]) + GNULIB_STRSTR=0; AC_SUBST([GNULIB_STRSTR]) + GNULIB_STRCASESTR=0; AC_SUBST([GNULIB_STRCASESTR]) + GNULIB_STRTOK_R=0; AC_SUBST([GNULIB_STRTOK_R]) + GNULIB_MBSLEN=0; AC_SUBST([GNULIB_MBSLEN]) + GNULIB_MBSNLEN=0; AC_SUBST([GNULIB_MBSNLEN]) + GNULIB_MBSCHR=0; AC_SUBST([GNULIB_MBSCHR]) + GNULIB_MBSRCHR=0; AC_SUBST([GNULIB_MBSRCHR]) + GNULIB_MBSSTR=0; AC_SUBST([GNULIB_MBSSTR]) + GNULIB_MBSCASECMP=0; AC_SUBST([GNULIB_MBSCASECMP]) + GNULIB_MBSNCASECMP=0; AC_SUBST([GNULIB_MBSNCASECMP]) + GNULIB_MBSPCASECMP=0; AC_SUBST([GNULIB_MBSPCASECMP]) + GNULIB_MBSCASESTR=0; AC_SUBST([GNULIB_MBSCASESTR]) + GNULIB_MBSCSPN=0; AC_SUBST([GNULIB_MBSCSPN]) + GNULIB_MBSPBRK=0; AC_SUBST([GNULIB_MBSPBRK]) + GNULIB_MBSSPN=0; AC_SUBST([GNULIB_MBSSPN]) + GNULIB_MBSSEP=0; AC_SUBST([GNULIB_MBSSEP]) + GNULIB_MBSTOK_R=0; AC_SUBST([GNULIB_MBSTOK_R]) + GNULIB_STRERROR=0; AC_SUBST([GNULIB_STRERROR]) + GNULIB_STRERROR_R=0; AC_SUBST([GNULIB_STRERROR_R]) + GNULIB_STRERRORNAME_NP=0; AC_SUBST([GNULIB_STRERRORNAME_NP]) + GNULIB_SIGABBREV_NP=0; AC_SUBST([GNULIB_SIGABBREV_NP]) + GNULIB_SIGDESCR_NP=0; AC_SUBST([GNULIB_SIGDESCR_NP]) + GNULIB_STRSIGNAL=0; AC_SUBST([GNULIB_STRSIGNAL]) + GNULIB_STRVERSCMP=0; AC_SUBST([GNULIB_STRVERSCMP]) + HAVE_MBSLEN=0; AC_SUBST([HAVE_MBSLEN]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_EXPLICIT_BZERO=1; AC_SUBST([HAVE_EXPLICIT_BZERO]) HAVE_FFSL=1; AC_SUBST([HAVE_FFSL]) @@ -104,6 +105,7 @@ AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS], HAVE_STRCASESTR=1; AC_SUBST([HAVE_STRCASESTR]) HAVE_DECL_STRTOK_R=1; AC_SUBST([HAVE_DECL_STRTOK_R]) HAVE_DECL_STRERROR_R=1; AC_SUBST([HAVE_DECL_STRERROR_R]) + HAVE_STRERRORNAME_NP=1; AC_SUBST([HAVE_STRERRORNAME_NP]) HAVE_SIGABBREV_NP=1; AC_SUBST([HAVE_SIGABBREV_NP]) HAVE_SIGDESCR_NP=1; AC_SUBST([HAVE_SIGDESCR_NP]) HAVE_DECL_STRSIGNAL=1; AC_SUBST([HAVE_DECL_STRSIGNAL]) @@ -121,6 +123,7 @@ AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS], REPLACE_STRTOK_R=0; AC_SUBST([REPLACE_STRTOK_R]) REPLACE_STRERROR=0; AC_SUBST([REPLACE_STRERROR]) REPLACE_STRERROR_R=0; AC_SUBST([REPLACE_STRERROR_R]) + REPLACE_STRERRORNAME_NP=0; AC_SUBST([REPLACE_STRERRORNAME_NP]) REPLACE_STRSIGNAL=0; AC_SUBST([REPLACE_STRSIGNAL]) UNDEFINE_STRTOK_R=0; AC_SUBST([UNDEFINE_STRTOK_R]) ]) diff --git a/modules/strerrorname_np b/modules/strerrorname_np new file mode 100644 index 0000000..41abf30 --- /dev/null +++ b/modules/strerrorname_np @@ -0,0 +1,28 @@ +Description: +strerrorname_np() function: name of system error code. + +Files: +lib/strerrorname_np.c +m4/strerrorname_np.m4 + +Depends-on: +extensions +string + +configure.ac: +gl_FUNC_STRERRORNAME_NP +if test $HAVE_STRERRORNAME_NP = 0 || test $REPLACE_STRERRORNAME_NP = 1; then + AC_LIBOBJ([strerrorname_np]) +fi +gl_STRING_MODULE_INDICATOR([strerrorname_np]) + +Makefile.am: + +Include: + + +License: +LGPLv2+ + +Maintainer: +all diff --git a/modules/string b/modules/string index 5a9db0f..759e4d5 100644 --- a/modules/string +++ b/modules/string @@ -66,6 +66,7 @@ string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H -e 's/@''GNULIB_STRTOK_R''@/$(GNULIB_STRTOK_R)/g' \ -e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \ -e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \ + -e 's/@''GNULIB_STRERRORNAME_NP''@/$(GNULIB_STRERRORNAME_NP)/g' \ -e 's/@''GNULIB_SIGABBREV_NP''@/$(GNULIB_SIGABBREV_NP)/g' \ -e 's/@''GNULIB_SIGDESCR_NP''@/$(GNULIB_SIGDESCR_NP)/g' \ -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \ @@ -90,6 +91,7 @@ string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \ + -e 's|@''HAVE_STRERRORNAME_NP''@|$(HAVE_STRERRORNAME_NP)|g' \ -e 's|@''HAVE_SIGABBREV_NP''@|$(HAVE_SIGABBREV_NP)|g' \ -e 's|@''HAVE_SIGDESCR_NP''@|$(HAVE_SIGDESCR_NP)|g' \ -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ @@ -107,6 +109,7 @@ string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \ -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \ + -e 's|@''REPLACE_STRERRORNAME_NP''@|$(REPLACE_STRERRORNAME_NP)|g' \ -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ diff --git a/tests/test-string-c++.cc b/tests/test-string-c++.cc index 960fb2a..2832a8b 100644 --- a/tests/test-string-c++.cc +++ b/tests/test-string-c++.cc @@ -138,6 +138,10 @@ SIGNATURE_CHECK (GNULIB_NAMESPACE::strerror, char *, (int)); SIGNATURE_CHECK (GNULIB_NAMESPACE::strerror_r, int, (int, char *, size_t)); #endif +#if GNULIB_TEST_STRERRORNAME_NP +SIGNATURE_CHECK (GNULIB_NAMESPACE::strerrorname_np, const char *, (int)); +#endif + #if GNULIB_TEST_SIGABBREV_NP SIGNATURE_CHECK (GNULIB_NAMESPACE::sigabbrev_np, const char *, (int)); #endif -- 2.7.4