strerrorname_np is another new function in glibc 2.32. It is probably useful
for the runtime library of many programming languages (such as guile or
GNU clisp).

Here's a module which adds support for it to gnulib, so that it may be
used in GNU code without portability worries.

Note: The function is completely unusable in glibc 2.32, see
<https://sourceware.org/bugzilla/show_bug.cgi?id=26555>. Gnulib overrides
it therefore.

I also don't want to hide from you these two error codes:
In GNU/Hurd there is

  EIEIO                          = 0x40000068, /* Computer bought the farm */

and in MirBSD 10 there is

#define ENOCOFFEE       85              /* Programmer needs more coffee */


>From 4041bb7cb24874ac7c4c927775666df6b59a5479 Mon Sep 17 00:00:00 2001
From: Bruno Haible <br...@clisp.org>
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  <br...@clisp.org>
+
+	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  <egg...@cs.ucla.edu>
 
 	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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <br...@clisp.org>, 2020.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <string.h>
+
+#include <errno.h>
+
+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.
+       <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/errno.h.html>  */
+    #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 <string.h> 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 <https://sourceware.org/bugzilla/show_bug.cgi?id=26555>.
+    AC_CACHE_CHECK([whether strerrorname_np works],
+      [gl_cv_func_strerrorname_np_works],
+      [AC_RUN_IFELSE(
+         [AC_LANG_PROGRAM(
+            [[#include <errno.h>
+              #include <string.h>
+            ]],
+            [[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:
+<string.h>
+
+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

>From a60712f35f128ab6d3b2f27be0802e10970c9904 Mon Sep 17 00:00:00 2001
From: Bruno Haible <br...@clisp.org>
Date: Sun, 30 Aug 2020 22:20:01 +0200
Subject: [PATCH 2/2] strerrorname_np: Add tests.

* tests/test-strerrorname_np.c: New file.
* modules/strerrorname_np-tests: New file.
---
 ChangeLog                     |    4 +
 modules/strerrorname_np-tests |   12 +
 tests/test-strerrorname_np.c  | 1345 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 1361 insertions(+)
 create mode 100644 modules/strerrorname_np-tests
 create mode 100644 tests/test-strerrorname_np.c

diff --git a/ChangeLog b/ChangeLog
index 47df957..c30c56b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2020-08-30  Bruno Haible  <br...@clisp.org>
 
+	strerrorname_np: Add tests.
+	* tests/test-strerrorname_np.c: New file.
+	* modules/strerrorname_np-tests: New file.
+
 	strerrorname_np: New module.
 	* lib/string.in.h (strerrorname_np): New declaration.
 	* lib/strerrorname_np.c: New file.
diff --git a/modules/strerrorname_np-tests b/modules/strerrorname_np-tests
new file mode 100644
index 0000000..609fd19
--- /dev/null
+++ b/modules/strerrorname_np-tests
@@ -0,0 +1,12 @@
+Files:
+tests/test-strerrorname_np.c
+tests/signature.h
+tests/macros.h
+
+Depends-on:
+
+configure.ac:
+
+Makefile.am:
+TESTS += test-strerrorname_np
+check_PROGRAMS += test-strerrorname_np
diff --git a/tests/test-strerrorname_np.c b/tests/test-strerrorname_np.c
new file mode 100644
index 0000000..0ca5ab9
--- /dev/null
+++ b/tests/test-strerrorname_np.c
@@ -0,0 +1,1345 @@
+/* Test of strerrorname_np() function.
+
+   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, 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 <https://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <string.h>
+
+#include "signature.h"
+SIGNATURE_CHECK (strerrorname_np, const char *, (int));
+
+#include <errno.h>
+
+#include "macros.h"
+
+int
+main (void)
+{
+  /* Error codes specified by ISO C.  */
+  ASSERT (strcmp (strerrorname_np (EDOM), "EDOM") == 0);
+  ASSERT (strcmp (strerrorname_np (EILSEQ), "EILSEQ") == 0);
+  ASSERT (strcmp (strerrorname_np (ERANGE), "ERANGE") == 0);
+
+  /* Error codes specified by POSIX.
+     <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/errno.h.html>  */
+  #if defined E2BIG
+  ASSERT (strcmp (strerrorname_np (E2BIG), "E2BIG") == 0);
+  #endif
+  #if defined EACCES
+  ASSERT (strcmp (strerrorname_np (EACCES), "EACCES") == 0);
+  #endif
+  #if defined EADDRINUSE
+  ASSERT (strcmp (strerrorname_np (EADDRINUSE), "EADDRINUSE") == 0);
+  #endif
+  #if defined EADDRNOTAVAIL
+  ASSERT (strcmp (strerrorname_np (EADDRNOTAVAIL), "EADDRNOTAVAIL") == 0);
+  #endif
+  #if defined EAFNOSUPPORT
+  ASSERT (strcmp (strerrorname_np (EAFNOSUPPORT), "EAFNOSUPPORT") == 0);
+  #endif
+  #if defined EAGAIN
+  ASSERT (strcmp (strerrorname_np (EAGAIN), "EAGAIN") == 0);
+  #endif
+  #if defined EALREADY
+  ASSERT (strcmp (strerrorname_np (EALREADY), "EALREADY") == 0);
+  #endif
+  #if defined EBADF
+  ASSERT (strcmp (strerrorname_np (EBADF), "EBADF") == 0);
+  #endif
+  #if defined EBADMSG
+  ASSERT (strcmp (strerrorname_np (EBADMSG), "EBADMSG") == 0);
+  #endif
+  #if defined EBUSY
+  ASSERT (strcmp (strerrorname_np (EBUSY), "EBUSY") == 0);
+  #endif
+  #if defined ECANCELED
+  ASSERT (strcmp (strerrorname_np (ECANCELED), "ECANCELED") == 0);
+  #endif
+  #if defined ECHILD
+  ASSERT (strcmp (strerrorname_np (ECHILD), "ECHILD") == 0);
+  #endif
+  #if defined ECONNABORTED
+  ASSERT (strcmp (strerrorname_np (ECONNABORTED), "ECONNABORTED") == 0);
+  #endif
+  #if defined ECONNREFUSED
+  ASSERT (strcmp (strerrorname_np (ECONNREFUSED), "ECONNREFUSED") == 0);
+  #endif
+  #if defined ECONNRESET
+  ASSERT (strcmp (strerrorname_np (ECONNRESET), "ECONNRESET") == 0);
+  #endif
+  #if defined EDEADLK
+  ASSERT (strcmp (strerrorname_np (EDEADLK), "EDEADLK") == 0);
+  #endif
+  #if defined EDESTADDRREQ
+  ASSERT (strcmp (strerrorname_np (EDESTADDRREQ), "EDESTADDRREQ") == 0);
+  #endif
+  #if defined EDQUOT
+  ASSERT (strcmp (strerrorname_np (EDQUOT), "EDQUOT") == 0);
+  #endif
+  #if defined EEXIST
+  ASSERT (strcmp (strerrorname_np (EEXIST), "EEXIST") == 0);
+  #endif
+  #if defined EFAULT
+  ASSERT (strcmp (strerrorname_np (EFAULT), "EFAULT") == 0);
+  #endif
+  #if defined EFBIG
+  ASSERT (strcmp (strerrorname_np (EFBIG), "EFBIG") == 0);
+  #endif
+  #if defined EHOSTUNREACH
+  ASSERT (strcmp (strerrorname_np (EHOSTUNREACH), "EHOSTUNREACH") == 0);
+  #endif
+  #if defined EIDRM
+  ASSERT (strcmp (strerrorname_np (EIDRM), "EIDRM") == 0);
+  #endif
+  #if defined EINPROGRESS
+  ASSERT (strcmp (strerrorname_np (EINPROGRESS), "EINPROGRESS") == 0);
+  #endif
+  #if defined EINTR
+  ASSERT (strcmp (strerrorname_np (EINTR), "EINTR") == 0);
+  #endif
+  #if defined EINVAL
+  ASSERT (strcmp (strerrorname_np (EINVAL), "EINVAL") == 0);
+  #endif
+  #if defined EIO
+  ASSERT (strcmp (strerrorname_np (EIO), "EIO") == 0);
+  #endif
+  #if defined EISCONN
+  ASSERT (strcmp (strerrorname_np (EISCONN), "EISCONN") == 0);
+  #endif
+  #if defined EISDIR
+  ASSERT (strcmp (strerrorname_np (EISDIR), "EISDIR") == 0);
+  #endif
+  #if defined ELOOP
+  ASSERT (strcmp (strerrorname_np (ELOOP), "ELOOP") == 0);
+  #endif
+  #if defined EMFILE
+  ASSERT (strcmp (strerrorname_np (EMFILE), "EMFILE") == 0);
+  #endif
+  #if defined EMLINK
+  ASSERT (strcmp (strerrorname_np (EMLINK), "EMLINK") == 0);
+  #endif
+  #if defined EMSGSIZE
+  ASSERT (strcmp (strerrorname_np (EMSGSIZE), "EMSGSIZE") == 0);
+  #endif
+  #if defined EMULTIHOP
+  ASSERT (strcmp (strerrorname_np (EMULTIHOP), "EMULTIHOP") == 0);
+  #endif
+  #if defined ENAMETOOLONG
+  ASSERT (strcmp (strerrorname_np (ENAMETOOLONG), "ENAMETOOLONG") == 0);
+  #endif
+  #if defined ENETDOWN
+  ASSERT (strcmp (strerrorname_np (ENETDOWN), "ENETDOWN") == 0);
+  #endif
+  #if defined ENETRESET
+  ASSERT (strcmp (strerrorname_np (ENETRESET), "ENETRESET") == 0);
+  #endif
+  #if defined ENETUNREACH
+  ASSERT (strcmp (strerrorname_np (ENETUNREACH), "ENETUNREACH") == 0);
+  #endif
+  #if defined ENFILE
+  ASSERT (strcmp (strerrorname_np (ENFILE), "ENFILE") == 0);
+  #endif
+  #if defined ENOBUFS
+  ASSERT (strcmp (strerrorname_np (ENOBUFS), "ENOBUFS") == 0);
+  #endif
+  #if defined ENODATA
+  ASSERT (strcmp (strerrorname_np (ENODATA), "ENODATA") == 0);
+  #endif
+  #if defined ENODEV
+  ASSERT (strcmp (strerrorname_np (ENODEV), "ENODEV") == 0);
+  #endif
+  #if defined ENOENT
+  ASSERT (strcmp (strerrorname_np (ENOENT), "ENOENT") == 0);
+  #endif
+  #if defined ENOEXEC
+  ASSERT (strcmp (strerrorname_np (ENOEXEC), "ENOEXEC") == 0);
+  #endif
+  #if defined ENOLCK
+  ASSERT (strcmp (strerrorname_np (ENOLCK), "ENOLCK") == 0);
+  #endif
+  #if defined ENOLINK
+  ASSERT (strcmp (strerrorname_np (ENOLINK), "ENOLINK") == 0);
+  #endif
+  #if defined ENOMEM
+  ASSERT (strcmp (strerrorname_np (ENOMEM), "ENOMEM") == 0);
+  #endif
+  #if defined ENOMSG
+  ASSERT (strcmp (strerrorname_np (ENOMSG), "ENOMSG") == 0);
+  #endif
+  #if defined ENOPROTOOPT
+  ASSERT (strcmp (strerrorname_np (ENOPROTOOPT), "ENOPROTOOPT") == 0);
+  #endif
+  #if defined ENOSPC
+  ASSERT (strcmp (strerrorname_np (ENOSPC), "ENOSPC") == 0);
+  #endif
+  #if defined ENOSR
+  ASSERT (strcmp (strerrorname_np (ENOSR), "ENOSR") == 0);
+  #endif
+  #if defined ENOSTR
+  ASSERT (strcmp (strerrorname_np (ENOSTR), "ENOSTR") == 0);
+  #endif
+  #if defined ENOSYS
+  ASSERT (strcmp (strerrorname_np (ENOSYS), "ENOSYS") == 0);
+  #endif
+  #if defined ENOTCONN
+  ASSERT (strcmp (strerrorname_np (ENOTCONN), "ENOTCONN") == 0);
+  #endif
+  #if defined ENOTDIR
+  ASSERT (strcmp (strerrorname_np (ENOTDIR), "ENOTDIR") == 0);
+  #endif
+  #if defined ENOTEMPTY && ENOTEMPTY != EEXIST
+  ASSERT (strcmp (strerrorname_np (ENOTEMPTY), "ENOTEMPTY") == 0);
+  #endif
+  #if defined ENOTRECOVERABLE
+  ASSERT (strcmp (strerrorname_np (ENOTRECOVERABLE), "ENOTRECOVERABLE") == 0);
+  #endif
+  #if defined ENOTSOCK
+  ASSERT (strcmp (strerrorname_np (ENOTSOCK), "ENOTSOCK") == 0);
+  #endif
+  #if defined ENOTSUP && ENOTSUP != EOPNOTSUPP
+  ASSERT (strcmp (strerrorname_np (ENOTSUP), "ENOTSUP") == 0);
+  #endif
+  #if defined ENOTTY
+  ASSERT (strcmp (strerrorname_np (ENOTTY), "ENOTTY") == 0);
+  #endif
+  #if defined ENXIO
+  ASSERT (strcmp (strerrorname_np (ENXIO), "ENXIO") == 0);
+  #endif
+  #if defined EOPNOTSUPP
+  ASSERT (strcmp (strerrorname_np (EOPNOTSUPP), "EOPNOTSUPP") == 0);
+  #endif
+  #if defined EOVERFLOW
+  ASSERT (strcmp (strerrorname_np (EOVERFLOW), "EOVERFLOW") == 0);
+  #endif
+  #if defined EOWNERDEAD
+  ASSERT (strcmp (strerrorname_np (EOWNERDEAD), "EOWNERDEAD") == 0);
+  #endif
+  #if defined EPERM
+  ASSERT (strcmp (strerrorname_np (EPERM), "EPERM") == 0);
+  #endif
+  #if defined EPIPE
+  ASSERT (strcmp (strerrorname_np (EPIPE), "EPIPE") == 0);
+  #endif
+  #if defined EPROTO
+  ASSERT (strcmp (strerrorname_np (EPROTO), "EPROTO") == 0);
+  #endif
+  #if defined EPROTONOSUPPORT
+  ASSERT (strcmp (strerrorname_np (EPROTONOSUPPORT), "EPROTONOSUPPORT") == 0);
+  #endif
+  #if defined EPROTOTYPE
+  ASSERT (strcmp (strerrorname_np (EPROTOTYPE), "EPROTOTYPE") == 0);
+  #endif
+  #if defined EROFS
+  ASSERT (strcmp (strerrorname_np (EROFS), "EROFS") == 0);
+  #endif
+  #if defined ESPIPE
+  ASSERT (strcmp (strerrorname_np (ESPIPE), "ESPIPE") == 0);
+  #endif
+  #if defined ESRCH
+  ASSERT (strcmp (strerrorname_np (ESRCH), "ESRCH") == 0);
+  #endif
+  #if defined ESTALE
+  ASSERT (strcmp (strerrorname_np (ESTALE), "ESTALE") == 0);
+  #endif
+  #if defined ETIME
+  ASSERT (strcmp (strerrorname_np (ETIME), "ETIME") == 0);
+  #endif
+  #if defined ETIMEDOUT
+  ASSERT (strcmp (strerrorname_np (ETIMEDOUT), "ETIMEDOUT") == 0);
+  #endif
+  #if defined ETXTBSY
+  ASSERT (strcmp (strerrorname_np (ETXTBSY), "ETXTBSY") == 0);
+  #endif
+  #if defined EWOULDBLOCK && EWOULDBLOCK != EAGAIN
+  ASSERT (strcmp (strerrorname_np (EWOULDBLOCK), "EWOULDBLOCK") == 0);
+  #endif
+  #if defined EXDEV
+  ASSERT (strcmp (strerrorname_np (EXDEV), "EXDEV") == 0);
+  #endif
+
+  /* Other error codes on other systems.  */
+  /* Solaris */
+  #if defined EADI
+  ASSERT (strcmp (strerrorname_np (EADI), "EADI") == 0);
+  #endif
+  /* Linux, HP-UX, IRIX, Solaris, Cygwin */
+  #if defined EADV
+  ASSERT (strcmp (strerrorname_np (EADV), "EADV") == 0);
+  #endif
+  /* OSF/1 */
+  #if defined EAIO
+  ASSERT (strcmp (strerrorname_np (EAIO), "EAIO") == 0);
+  #endif
+  /* Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix */
+  #if defined EAUTH
+  ASSERT (strcmp (strerrorname_np (EAUTH), "EAUTH") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EBACKGROUND
+  ASSERT (strcmp (strerrorname_np (EBACKGROUND), "EBACKGROUND") == 0);
+  #endif
+  /* Mac OS X */
+  #if defined EBADARCH
+  ASSERT (strcmp (strerrorname_np (EBADARCH), "EBADARCH") == 0);
+  #endif
+  /* Minix */
+  #if defined EBADCALL
+  ASSERT (strcmp (strerrorname_np (EBADCALL), "EBADCALL") == 0);
+  #endif
+  /* Minix */
+  #if defined EBADCPU
+  ASSERT (strcmp (strerrorname_np (EBADCPU), "EBADCPU") == 0);
+  #endif
+  /* Linux, IRIX, Solaris, Cygwin */
+  #if defined EBADE
+  ASSERT (strcmp (strerrorname_np (EBADE), "EBADE") == 0);
+  #endif
+  /* Minix */
+  #if defined EBADEPT
+  ASSERT (strcmp (strerrorname_np (EBADEPT), "EBADEPT") == 0);
+  #endif
+  /* Mac OS X */
+  #if defined EBADEXEC
+  ASSERT (strcmp (strerrorname_np (EBADEXEC), "EBADEXEC") == 0);
+  #endif
+  /* Linux, IRIX, Solaris, Cygwin */
+  #if defined EBADFD
+  ASSERT (strcmp (strerrorname_np (EBADFD), "EBADFD") == 0);
+  #endif
+  /* IRIX */
+  #if defined EBADFILT
+  ASSERT (strcmp (strerrorname_np (EBADFILT), "EBADFILT") == 0);
+  #endif
+  /* Minix */
+  #if defined EBADIOCTL
+  ASSERT (strcmp (strerrorname_np (EBADIOCTL), "EBADIOCTL") == 0);
+  #endif
+  /* Mac OS X */
+  #if defined EBADMACHO
+  ASSERT (strcmp (strerrorname_np (EBADMACHO), "EBADMACHO") == 0);
+  #endif
+  /* Minix */
+  #if defined EBADMODE
+  ASSERT (strcmp (strerrorname_np (EBADMODE), "EBADMODE") == 0);
+  #endif
+  /* Linux, IRIX, Solaris, Cygwin */
+  #if defined EBADR
+  ASSERT (strcmp (strerrorname_np (EBADR), "EBADR") == 0);
+  #endif
+  /* Minix */
+  #if defined EBADREQUEST
+  ASSERT (strcmp (strerrorname_np (EBADREQUEST), "EBADREQUEST") == 0);
+  #endif
+  /* Mac OS X, FreeBSD, NetBSD, OpenBSD, OSF/1, Minix */
+  #if defined EBADRPC
+  ASSERT (strcmp (strerrorname_np (EBADRPC), "EBADRPC") == 0);
+  #endif
+  /* Linux, IRIX, Solaris, Cygwin */
+  #if defined EBADRQC
+  ASSERT (strcmp (strerrorname_np (EBADRQC), "EBADRQC") == 0);
+  #endif
+  /* IRIX */
+  #if defined EBADRSPEC
+  ASSERT (strcmp (strerrorname_np (EBADRSPEC), "EBADRSPEC") == 0);
+  #endif
+  /* Linux, IRIX, Solaris, Cygwin */
+  #if defined EBADSLT
+  ASSERT (strcmp (strerrorname_np (EBADSLT), "EBADSLT") == 0);
+  #endif
+  /* IRIX */
+  #if defined EBADTSPEC
+  ASSERT (strcmp (strerrorname_np (EBADTSPEC), "EBADTSPEC") == 0);
+  #endif
+  /* HP-UX */
+  #if defined EBADVER
+  ASSERT (strcmp (strerrorname_np (EBADVER), "EBADVER") == 0);
+  #endif
+  /* IRIX */
+  #if defined EBDHDL
+  ASSERT (strcmp (strerrorname_np (EBDHDL), "EBDHDL") == 0);
+  #endif
+  /* Linux, IRIX, Solaris, Cygwin */
+  #if defined EBFONT
+  ASSERT (strcmp (strerrorname_np (EBFONT), "EBFONT") == 0);
+  #endif
+  /* IRIX */
+  #if defined EBUFSIZE
+  ASSERT (strcmp (strerrorname_np (EBUFSIZE), "EBUFSIZE") == 0);
+  #endif
+  /* Minix */
+  #if defined ECALLDENIED
+  ASSERT (strcmp (strerrorname_np (ECALLDENIED), "ECALLDENIED") == 0);
+  #endif
+  /* IRIX */
+  #if defined ECANTEXTENT
+  ASSERT (strcmp (strerrorname_np (ECANTEXTENT), "ECANTEXTENT") == 0);
+  #endif
+  /* FreeBSD */
+  #if defined ECAPMODE
+  ASSERT (strcmp (strerrorname_np (ECAPMODE), "ECAPMODE") == 0);
+  #endif
+  /* Cygwin */
+  #if defined ECASECLASH
+  ASSERT (strcmp (strerrorname_np (ECASECLASH), "ECASECLASH") == 0);
+  #endif
+  /* IRIX */
+  #if defined ECELLDOWN
+  ASSERT (strcmp (strerrorname_np (ECELLDOWN), "ECELLDOWN") == 0);
+  #endif
+  /* Linux, AIX, HP-UX, IRIX, Solaris, Cygwin */
+  #if defined ECHRNG
+  ASSERT (strcmp (strerrorname_np (ECHRNG), "ECHRNG") == 0);
+  #endif
+  /* IRIX */
+  #if defined ECKPT
+  ASSERT (strcmp (strerrorname_np (ECKPT), "ECKPT") == 0);
+  #endif
+  /* IRIX */
+  #if defined ECLOCKCPU
+  ASSERT (strcmp (strerrorname_np (ECLOCKCPU), "ECLOCKCPU") == 0);
+  #endif
+  /* OSF/1 */
+  #if defined ECLONEME && ECLONEME != ERESTART
+  ASSERT (strcmp (strerrorname_np (ECLONEME), "ECLONEME") == 0);
+  #endif
+  /* Linux, HP-UX, IRIX, Solaris, Cygwin */
+  #if defined ECOMM
+  ASSERT (strcmp (strerrorname_np (ECOMM), "ECOMM") == 0);
+  #endif
+  /* HP-UX */
+  #if defined ECONFIG
+  ASSERT (strcmp (strerrorname_np (ECONFIG), "ECONFIG") == 0);
+  #endif
+  /* IRIX */
+  #if defined ECONTROLLER
+  ASSERT (strcmp (strerrorname_np (ECONTROLLER), "ECONTROLLER") == 0);
+  #endif
+  /* AIX */
+  #if defined ECORRUPT
+  ASSERT (strcmp (strerrorname_np (ECORRUPT), "ECORRUPT") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined ED
+  ASSERT (strcmp (strerrorname_np (ED), "ED") == 0);
+  #endif
+  /* Minix */
+  #if defined EDEADEPT
+  ASSERT (strcmp (strerrorname_np (EDEADEPT), "EDEADEPT") == 0);
+  #endif
+  /* IRIX, Solaris, Cygwin */
+  #if defined EDEADLOCK && EDEADLOCK != EDEADLK
+  ASSERT (strcmp (strerrorname_np (EDEADLOCK), "EDEADLOCK") == 0);
+  #endif
+  /* Minix */
+  #if defined EDEADSRCDST
+  ASSERT (strcmp (strerrorname_np (EDEADSRCDST), "EDEADSRCDST") == 0);
+  #endif
+  /* IRIX */
+  #if defined EDELAY
+  ASSERT (strcmp (strerrorname_np (EDELAY), "EDELAY") == 0);
+  #endif
+  /* IRIX */
+  #if defined EDESTROYED
+  ASSERT (strcmp (strerrorname_np (EDESTROYED), "EDESTROYED") == 0);
+  #endif
+  /* Mac OS X */
+  #if defined EDEVERR
+  ASSERT (strcmp (strerrorname_np (EDEVERR), "EDEVERR") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EDIED
+  ASSERT (strcmp (strerrorname_np (EDIED), "EDIED") == 0);
+  #endif
+  /* IRIX */
+  #if defined EDIRCORRUPTED
+  ASSERT (strcmp (strerrorname_np (EDIRCORRUPTED), "EDIRCORRUPTED") == 0);
+  #endif
+  /* FreeBSD */
+  #if defined EDIRIOCTL
+  ASSERT (strcmp (strerrorname_np (EDIRIOCTL), "EDIRIOCTL") == 0);
+  #endif
+  /* OSF/1 */
+  #if defined EDIRTY
+  ASSERT (strcmp (strerrorname_np (EDIRTY), "EDIRTY") == 0);
+  #endif
+  /* IRIX */
+  #if defined EDISJOINT
+  ASSERT (strcmp (strerrorname_np (EDISJOINT), "EDISJOINT") == 0);
+  #endif
+  /* AIX */
+  #if defined EDIST
+  ASSERT (strcmp (strerrorname_np (EDIST), "EDIST") == 0);
+  #endif
+  /* Minix */
+  #if defined EDONTREPLY
+  ASSERT (strcmp (strerrorname_np (EDONTREPLY), "EDONTREPLY") == 0);
+  #endif
+  /* FreeBSD */
+  #if defined EDOOFUS
+  ASSERT (strcmp (strerrorname_np (EDOOFUS), "EDOOFUS") == 0);
+  #endif
+  /* Linux, HP-UX, Cygwin */
+  #if defined EDOTDOT
+  ASSERT (strcmp (strerrorname_np (EDOTDOT), "EDOTDOT") == 0);
+  #endif
+  /* OSF/1 */
+  #if defined EDUPPKG
+  ASSERT (strcmp (strerrorname_np (EDUPPKG), "EDUPPKG") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined ED_ALREADY_OPEN
+  ASSERT (strcmp (strerrorname_np (ED_ALREADY_OPEN), "ED_ALREADY_OPEN") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined ED_DEVICE_DOWN
+  ASSERT (strcmp (strerrorname_np (ED_DEVICE_DOWN), "ED_DEVICE_DOWN") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined ED_INVALID_OPERATION
+  ASSERT (strcmp (strerrorname_np (ED_INVALID_OPERATION), "ED_INVALID_OPERATION") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined ED_INVALID_RECNUM
+  ASSERT (strcmp (strerrorname_np (ED_INVALID_RECNUM), "ED_INVALID_RECNUM") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined ED_INVALID_SIZE
+  ASSERT (strcmp (strerrorname_np (ED_INVALID_SIZE), "ED_INVALID_SIZE") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined ED_IO_ERROR
+  ASSERT (strcmp (strerrorname_np (ED_IO_ERROR), "ED_IO_ERROR") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined ED_NO_MEMORY
+  ASSERT (strcmp (strerrorname_np (ED_NO_MEMORY), "ED_NO_MEMORY") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined ED_NO_SUCH_DEVICE
+  ASSERT (strcmp (strerrorname_np (ED_NO_SUCH_DEVICE), "ED_NO_SUCH_DEVICE") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined ED_READ_ONLY
+  ASSERT (strcmp (strerrorname_np (ED_READ_ONLY), "ED_READ_ONLY") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined ED_WOULD_BLOCK
+  ASSERT (strcmp (strerrorname_np (ED_WOULD_BLOCK), "ED_WOULD_BLOCK") == 0);
+  #endif
+  /* IRIX */
+  #if defined EEMPTY
+  ASSERT (strcmp (strerrorname_np (EEMPTY), "EEMPTY") == 0);
+  #endif
+  /* OSF/1 */
+  #if defined EEMULATE
+  ASSERT (strcmp (strerrorname_np (EEMULATE), "EEMULATE") == 0);
+  #endif
+  /* IRIX */
+  #if defined EENDOFMINOR
+  ASSERT (strcmp (strerrorname_np (EENDOFMINOR), "EENDOFMINOR") == 0);
+  #endif
+  /* IRIX */
+  #if defined EENQUEUED
+  ASSERT (strcmp (strerrorname_np (EENQUEUED), "EENQUEUED") == 0);
+  #endif
+  /* OSF/1 */
+  #if defined EFAIL
+  ASSERT (strcmp (strerrorname_np (EFAIL), "EFAIL") == 0);
+  #endif
+  /* AIX */
+  #if defined EFORMAT
+  ASSERT (strcmp (strerrorname_np (EFORMAT), "EFORMAT") == 0);
+  #endif
+  /* Haiku */
+  #if defined EFPOS
+  ASSERT (strcmp (strerrorname_np (EFPOS), "EFPOS") == 0);
+  #endif
+  /* IRIX */
+  #if defined EFSCORRUPTED
+  ASSERT (strcmp (strerrorname_np (EFSCORRUPTED), "EFSCORRUPTED") == 0);
+  #endif
+  /* Mac OS X, FreeBSD, NetBSD, OpenBSD, OSF/1, Minix, Cygwin */
+  #if defined EFTYPE
+  ASSERT (strcmp (strerrorname_np (EFTYPE), "EFTYPE") == 0);
+  #endif
+  /* Minix */
+  #if defined EGENERIC
+  ASSERT (strcmp (strerrorname_np (EGENERIC), "EGENERIC") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EGRATUITOUS
+  ASSERT (strcmp (strerrorname_np (EGRATUITOUS), "EGRATUITOUS") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EGREGIOUS
+  ASSERT (strcmp (strerrorname_np (EGREGIOUS), "EGREGIOUS") == 0);
+  #endif
+  /* IRIX */
+  #if defined EGROUPLOOP
+  ASSERT (strcmp (strerrorname_np (EGROUPLOOP), "EGROUPLOOP") == 0);
+  #endif
+  /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, IRIX, OSF/1, Solaris, Minix, Haiku, Cygwin */
+  #if defined EHOSTDOWN
+  ASSERT (strcmp (strerrorname_np (EHOSTDOWN), "EHOSTDOWN") == 0);
+  #endif
+  /* Linux */
+  #if defined EHWPOISON
+  ASSERT (strcmp (strerrorname_np (EHWPOISON), "EHWPOISON") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EIEIO
+  ASSERT (strcmp (strerrorname_np (EIEIO), "EIEIO") == 0);
+  #endif
+  /* IRIX */
+  #if defined EINIT
+  ASSERT (strcmp (strerrorname_np (EINIT), "EINIT") == 0);
+  #endif
+  /* OSF/1 */
+  #if defined EINPROG
+  ASSERT (strcmp (strerrorname_np (EINPROG), "EINPROG") == 0);
+  #endif
+  /* IRIX */
+  #if defined EINVALMODE
+  ASSERT (strcmp (strerrorname_np (EINVALMODE), "EINVALMODE") == 0);
+  #endif
+  /* IRIX */
+  #if defined EINVALSTATE
+  ASSERT (strcmp (strerrorname_np (EINVALSTATE), "EINVALSTATE") == 0);
+  #endif
+  /* IRIX */
+  #if defined EINVALTIME
+  ASSERT (strcmp (strerrorname_np (EINVALTIME), "EINVALTIME") == 0);
+  #endif
+  /* IRIX */
+  #if defined EIORESID
+  ASSERT (strcmp (strerrorname_np (EIORESID), "EIORESID") == 0);
+  #endif
+  /* OpenBSD */
+  #if defined EIPSEC
+  ASSERT (strcmp (strerrorname_np (EIPSEC), "EIPSEC") == 0);
+  #endif
+  /* Linux, IRIX */
+  #if defined EISNAM
+  ASSERT (strcmp (strerrorname_np (EISNAM), "EISNAM") == 0);
+  #endif
+  /* IRIX */
+  #if defined EJOINED
+  ASSERT (strcmp (strerrorname_np (EJOINED), "EJOINED") == 0);
+  #endif
+  /* FreeBSD, OSF/1 */
+  #if defined EJUSTRETURN
+  ASSERT (strcmp (strerrorname_np (EJUSTRETURN), "EJUSTRETURN") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EKERN_ABORTED
+  ASSERT (strcmp (strerrorname_np (EKERN_ABORTED), "EKERN_ABORTED") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EKERN_FAILURE
+  ASSERT (strcmp (strerrorname_np (EKERN_FAILURE), "EKERN_FAILURE") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EKERN_INTERRUPTED
+  ASSERT (strcmp (strerrorname_np (EKERN_INTERRUPTED), "EKERN_INTERRUPTED") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EKERN_INVALID_ADDRESS
+  ASSERT (strcmp (strerrorname_np (EKERN_INVALID_ADDRESS), "EKERN_INVALID_ADDRESS") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EKERN_INVALID_ARGUMENT
+  ASSERT (strcmp (strerrorname_np (EKERN_INVALID_ARGUMENT), "EKERN_INVALID_ARGUMENT") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EKERN_INVALID_CAPABILITY
+  ASSERT (strcmp (strerrorname_np (EKERN_INVALID_CAPABILITY), "EKERN_INVALID_CAPABILITY") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EKERN_INVALID_HOST
+  ASSERT (strcmp (strerrorname_np (EKERN_INVALID_HOST), "EKERN_INVALID_HOST") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EKERN_INVALID_NAME
+  ASSERT (strcmp (strerrorname_np (EKERN_INVALID_NAME), "EKERN_INVALID_NAME") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EKERN_INVALID_RIGHT
+  ASSERT (strcmp (strerrorname_np (EKERN_INVALID_RIGHT), "EKERN_INVALID_RIGHT") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EKERN_INVALID_TASK
+  ASSERT (strcmp (strerrorname_np (EKERN_INVALID_TASK), "EKERN_INVALID_TASK") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EKERN_INVALID_VALUE
+  ASSERT (strcmp (strerrorname_np (EKERN_INVALID_VALUE), "EKERN_INVALID_VALUE") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EKERN_MEMORY_ERROR
+  ASSERT (strcmp (strerrorname_np (EKERN_MEMORY_ERROR), "EKERN_MEMORY_ERROR") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EKERN_MEMORY_FAILURE
+  ASSERT (strcmp (strerrorname_np (EKERN_MEMORY_FAILURE), "EKERN_MEMORY_FAILURE") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EKERN_MEMORY_PRESENT
+  ASSERT (strcmp (strerrorname_np (EKERN_MEMORY_PRESENT), "EKERN_MEMORY_PRESENT") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EKERN_NAME_EXISTS
+  ASSERT (strcmp (strerrorname_np (EKERN_NAME_EXISTS), "EKERN_NAME_EXISTS") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EKERN_NOT_IN_SET
+  ASSERT (strcmp (strerrorname_np (EKERN_NOT_IN_SET), "EKERN_NOT_IN_SET") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EKERN_NOT_RECEIVER
+  ASSERT (strcmp (strerrorname_np (EKERN_NOT_RECEIVER), "EKERN_NOT_RECEIVER") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EKERN_NO_ACCESS
+  ASSERT (strcmp (strerrorname_np (EKERN_NO_ACCESS), "EKERN_NO_ACCESS") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EKERN_NO_SPACE
+  ASSERT (strcmp (strerrorname_np (EKERN_NO_SPACE), "EKERN_NO_SPACE") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EKERN_PROTECTION_FAILURE
+  ASSERT (strcmp (strerrorname_np (EKERN_PROTECTION_FAILURE), "EKERN_PROTECTION_FAILURE") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EKERN_RESOURCE_SHORTAGE
+  ASSERT (strcmp (strerrorname_np (EKERN_RESOURCE_SHORTAGE), "EKERN_RESOURCE_SHORTAGE") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EKERN_RIGHT_EXISTS
+  ASSERT (strcmp (strerrorname_np (EKERN_RIGHT_EXISTS), "EKERN_RIGHT_EXISTS") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EKERN_TERMINATED
+  ASSERT (strcmp (strerrorname_np (EKERN_TERMINATED), "EKERN_TERMINATED") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EKERN_TIMEDOUT
+  ASSERT (strcmp (strerrorname_np (EKERN_TIMEDOUT), "EKERN_TIMEDOUT") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EKERN_UREFS_OVERFLOW
+  ASSERT (strcmp (strerrorname_np (EKERN_UREFS_OVERFLOW), "EKERN_UREFS_OVERFLOW") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EKERN_WRITE_PROTECTION_FAILURE
+  ASSERT (strcmp (strerrorname_np (EKERN_WRITE_PROTECTION_FAILURE), "EKERN_WRITE_PROTECTION_FAILURE") == 0);
+  #endif
+  /* Linux */
+  #if defined EKEYEXPIRED
+  ASSERT (strcmp (strerrorname_np (EKEYEXPIRED), "EKEYEXPIRED") == 0);
+  #endif
+  /* Linux */
+  #if defined EKEYREJECTED
+  ASSERT (strcmp (strerrorname_np (EKEYREJECTED), "EKEYREJECTED") == 0);
+  #endif
+  /* Linux */
+  #if defined EKEYREVOKED
+  ASSERT (strcmp (strerrorname_np (EKEYREVOKED), "EKEYREVOKED") == 0);
+  #endif
+  /* Linux, AIX, HP-UX, IRIX, Solaris, Cygwin */
+  #if defined EL2HLT
+  ASSERT (strcmp (strerrorname_np (EL2HLT), "EL2HLT") == 0);
+  #endif
+  /* Linux, AIX, HP-UX, IRIX, Solaris, Cygwin */
+  #if defined EL2NSYNC
+  ASSERT (strcmp (strerrorname_np (EL2NSYNC), "EL2NSYNC") == 0);
+  #endif
+  /* Linux, AIX, HP-UX, IRIX, Solaris, Cygwin */
+  #if defined EL3HLT
+  ASSERT (strcmp (strerrorname_np (EL3HLT), "EL3HLT") == 0);
+  #endif
+  /* Linux, AIX, HP-UX, IRIX, Solaris, Cygwin */
+  #if defined EL3RST
+  ASSERT (strcmp (strerrorname_np (EL3RST), "EL3RST") == 0);
+  #endif
+  /* Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix */
+  #if defined ELAST && 0
+  ASSERT (strcmp (strerrorname_np (ELAST), "ELAST") == 0);
+  #endif
+  /* Cygwin */
+  #if defined ELBIN
+  ASSERT (strcmp (strerrorname_np (ELBIN), "ELBIN") == 0);
+  #endif
+  /* Linux, IRIX, Solaris, Cygwin */
+  #if defined ELIBACC
+  ASSERT (strcmp (strerrorname_np (ELIBACC), "ELIBACC") == 0);
+  #endif
+  /* Linux, IRIX, Solaris, Cygwin */
+  #if defined ELIBBAD
+  ASSERT (strcmp (strerrorname_np (ELIBBAD), "ELIBBAD") == 0);
+  #endif
+  /* Linux, IRIX, Solaris, Cygwin */
+  #if defined ELIBEXEC
+  ASSERT (strcmp (strerrorname_np (ELIBEXEC), "ELIBEXEC") == 0);
+  #endif
+  /* Linux, IRIX, Solaris, Cygwin */
+  #if defined ELIBMAX
+  ASSERT (strcmp (strerrorname_np (ELIBMAX), "ELIBMAX") == 0);
+  #endif
+  /* Linux, IRIX, Solaris, Cygwin */
+  #if defined ELIBSCN
+  ASSERT (strcmp (strerrorname_np (ELIBSCN), "ELIBSCN") == 0);
+  #endif
+  /* Linux, AIX, HP-UX, IRIX, Solaris, Cygwin */
+  #if defined ELNRNG
+  ASSERT (strcmp (strerrorname_np (ELNRNG), "ELNRNG") == 0);
+  #endif
+  /* Minix */
+  #if defined ELOCKED
+  ASSERT (strcmp (strerrorname_np (ELOCKED), "ELOCKED") == 0);
+  #endif
+  /* Solaris */
+  #if defined ELOCKUNMAPPED
+  ASSERT (strcmp (strerrorname_np (ELOCKUNMAPPED), "ELOCKUNMAPPED") == 0);
+  #endif
+  /* IRIX */
+  #if defined ELOGINLIM
+  ASSERT (strcmp (strerrorname_np (ELOGINLIM), "ELOGINLIM") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMACH_RCV_BODY_ERROR
+  ASSERT (strcmp (strerrorname_np (EMACH_RCV_BODY_ERROR), "EMACH_RCV_BODY_ERROR") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMACH_RCV_HEADER_ERROR
+  ASSERT (strcmp (strerrorname_np (EMACH_RCV_HEADER_ERROR), "EMACH_RCV_HEADER_ERROR") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMACH_RCV_INTERRUPTED
+  ASSERT (strcmp (strerrorname_np (EMACH_RCV_INTERRUPTED), "EMACH_RCV_INTERRUPTED") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMACH_RCV_INVALID_DATA
+  ASSERT (strcmp (strerrorname_np (EMACH_RCV_INVALID_DATA), "EMACH_RCV_INVALID_DATA") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMACH_RCV_INVALID_NAME
+  ASSERT (strcmp (strerrorname_np (EMACH_RCV_INVALID_NAME), "EMACH_RCV_INVALID_NAME") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMACH_RCV_INVALID_NOTIFY
+  ASSERT (strcmp (strerrorname_np (EMACH_RCV_INVALID_NOTIFY), "EMACH_RCV_INVALID_NOTIFY") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMACH_RCV_IN_PROGRESS
+  ASSERT (strcmp (strerrorname_np (EMACH_RCV_IN_PROGRESS), "EMACH_RCV_IN_PROGRESS") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMACH_RCV_IN_SET
+  ASSERT (strcmp (strerrorname_np (EMACH_RCV_IN_SET), "EMACH_RCV_IN_SET") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMACH_RCV_PORT_CHANGED
+  ASSERT (strcmp (strerrorname_np (EMACH_RCV_PORT_CHANGED), "EMACH_RCV_PORT_CHANGED") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMACH_RCV_PORT_DIED
+  ASSERT (strcmp (strerrorname_np (EMACH_RCV_PORT_DIED), "EMACH_RCV_PORT_DIED") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMACH_RCV_TIMED_OUT
+  ASSERT (strcmp (strerrorname_np (EMACH_RCV_TIMED_OUT), "EMACH_RCV_TIMED_OUT") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMACH_RCV_TOO_LARGE
+  ASSERT (strcmp (strerrorname_np (EMACH_RCV_TOO_LARGE), "EMACH_RCV_TOO_LARGE") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMACH_SEND_INTERRUPTED
+  ASSERT (strcmp (strerrorname_np (EMACH_SEND_INTERRUPTED), "EMACH_SEND_INTERRUPTED") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMACH_SEND_INVALID_DATA
+  ASSERT (strcmp (strerrorname_np (EMACH_SEND_INVALID_DATA), "EMACH_SEND_INVALID_DATA") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMACH_SEND_INVALID_DEST
+  ASSERT (strcmp (strerrorname_np (EMACH_SEND_INVALID_DEST), "EMACH_SEND_INVALID_DEST") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMACH_SEND_INVALID_HEADER
+  ASSERT (strcmp (strerrorname_np (EMACH_SEND_INVALID_HEADER), "EMACH_SEND_INVALID_HEADER") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMACH_SEND_INVALID_MEMORY
+  ASSERT (strcmp (strerrorname_np (EMACH_SEND_INVALID_MEMORY), "EMACH_SEND_INVALID_MEMORY") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMACH_SEND_INVALID_NOTIFY
+  ASSERT (strcmp (strerrorname_np (EMACH_SEND_INVALID_NOTIFY), "EMACH_SEND_INVALID_NOTIFY") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMACH_SEND_INVALID_REPLY
+  ASSERT (strcmp (strerrorname_np (EMACH_SEND_INVALID_REPLY), "EMACH_SEND_INVALID_REPLY") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMACH_SEND_INVALID_RIGHT
+  ASSERT (strcmp (strerrorname_np (EMACH_SEND_INVALID_RIGHT), "EMACH_SEND_INVALID_RIGHT") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMACH_SEND_INVALID_TYPE
+  ASSERT (strcmp (strerrorname_np (EMACH_SEND_INVALID_TYPE), "EMACH_SEND_INVALID_TYPE") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMACH_SEND_IN_PROGRESS
+  ASSERT (strcmp (strerrorname_np (EMACH_SEND_IN_PROGRESS), "EMACH_SEND_IN_PROGRESS") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMACH_SEND_MSG_TOO_SMALL
+  ASSERT (strcmp (strerrorname_np (EMACH_SEND_MSG_TOO_SMALL), "EMACH_SEND_MSG_TOO_SMALL") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMACH_SEND_NOTIFY_IN_PROGRESS
+  ASSERT (strcmp (strerrorname_np (EMACH_SEND_NOTIFY_IN_PROGRESS), "EMACH_SEND_NOTIFY_IN_PROGRESS") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMACH_SEND_NO_BUFFER
+  ASSERT (strcmp (strerrorname_np (EMACH_SEND_NO_BUFFER), "EMACH_SEND_NO_BUFFER") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMACH_SEND_NO_NOTIFY
+  ASSERT (strcmp (strerrorname_np (EMACH_SEND_NO_NOTIFY), "EMACH_SEND_NO_NOTIFY") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMACH_SEND_TIMED_OUT
+  ASSERT (strcmp (strerrorname_np (EMACH_SEND_TIMED_OUT), "EMACH_SEND_TIMED_OUT") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMACH_SEND_WILL_NOTIFY
+  ASSERT (strcmp (strerrorname_np (EMACH_SEND_WILL_NOTIFY), "EMACH_SEND_WILL_NOTIFY") == 0);
+  #endif
+  /* AIX, OSF/1 */
+  #if defined EMEDIA
+  ASSERT (strcmp (strerrorname_np (EMEDIA), "EMEDIA") == 0);
+  #endif
+  /* Linux, OpenBSD */
+  #if defined EMEDIUMTYPE
+  ASSERT (strcmp (strerrorname_np (EMEDIUMTYPE), "EMEDIUMTYPE") == 0);
+  #endif
+  /* IRIX */
+  #if defined EMEMRETRY
+  ASSERT (strcmp (strerrorname_np (EMEMRETRY), "EMEMRETRY") == 0);
+  #endif
+  /* IRIX */
+  #if defined EMIGRATED
+  ASSERT (strcmp (strerrorname_np (EMIGRATED), "EMIGRATED") == 0);
+  #endif
+  /* IRIX */
+  #if defined EMIGRATING
+  ASSERT (strcmp (strerrorname_np (EMIGRATING), "EMIGRATING") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMIG_ARRAY_TOO_LARGE
+  ASSERT (strcmp (strerrorname_np (EMIG_ARRAY_TOO_LARGE), "EMIG_ARRAY_TOO_LARGE") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMIG_BAD_ARGUMENTS
+  ASSERT (strcmp (strerrorname_np (EMIG_BAD_ARGUMENTS), "EMIG_BAD_ARGUMENTS") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMIG_BAD_ID
+  ASSERT (strcmp (strerrorname_np (EMIG_BAD_ID), "EMIG_BAD_ID") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMIG_DESTROY_REQUEST
+  ASSERT (strcmp (strerrorname_np (EMIG_DESTROY_REQUEST), "EMIG_DESTROY_REQUEST") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMIG_EXCEPTION
+  ASSERT (strcmp (strerrorname_np (EMIG_EXCEPTION), "EMIG_EXCEPTION") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMIG_NO_REPLY
+  ASSERT (strcmp (strerrorname_np (EMIG_NO_REPLY), "EMIG_NO_REPLY") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMIG_REMOTE_ERROR
+  ASSERT (strcmp (strerrorname_np (EMIG_REMOTE_ERROR), "EMIG_REMOTE_ERROR") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMIG_REPLY_MISMATCH
+  ASSERT (strcmp (strerrorname_np (EMIG_REPLY_MISMATCH), "EMIG_REPLY_MISMATCH") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMIG_SERVER_DIED
+  ASSERT (strcmp (strerrorname_np (EMIG_SERVER_DIED), "EMIG_SERVER_DIED") == 0);
+  #endif
+  /* GNU/Hurd */
+  #if defined EMIG_TYPE_ERROR
+  ASSERT (strcmp (strerrorname_np (EMIG_TYPE_ERROR), "EMIG_TYPE_ERROR") == 0);
+  #endif
+  /* OSF/1 */
+  #if defined EMTIMERS
+  ASSERT (strcmp (strerrorname_np (EMTIMERS), "EMTIMERS") == 0);
+  #endif
+  /* IRIX */
+  #if defined EMUSTRUN
+  ASSERT (strcmp (strerrorname_np (EMUSTRUN), "EMUSTRUN") == 0);
+  #endif
+  /* Linux, IRIX */
+  #if defined ENAVAIL
+  ASSERT (strcmp (strerrorname_np (ENAVAIL), "ENAVAIL") == 0);
+  #endif
+  /* Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix */
+  #if defined ENEEDAUTH
+  ASSERT (strcmp (strerrorname_np (ENEEDAUTH), "ENEEDAUTH") == 0);
+  #endif
+  /* IRIX */
+  #if defined ENFSREMOTE
+  ASSERT (strcmp (strerrorname_np (ENFSREMOTE), "ENFSREMOTE") == 0);
+  #endif
+  /* Cygwin */
+  #if defined ENMFILE
+  ASSERT (strcmp (strerrorname_np (ENMFILE), "ENMFILE") == 0);
+  #endif
+  /* Linux, IRIX, Solaris, Cygwin */
+  #if defined ENOANO
+  ASSERT (strcmp (strerrorname_np (ENOANO), "ENOANO") == 0);
+  #endif
+  /* IRIX */
+  #if defined ENOATTACH
+  ASSERT (strcmp (strerrorname_np (ENOATTACH), "ENOATTACH") == 0);
+  #endif
+  /* Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, IRIX, Minix */
+  #if defined ENOATTR
+  ASSERT (strcmp (strerrorname_np (ENOATTR), "ENOATTR") == 0);
+  #endif
+  /* IRIX */
+  #if defined ENOBWD
+  ASSERT (strcmp (strerrorname_np (ENOBWD), "ENOBWD") == 0);
+  #endif
+  /* MirBSD */
+  #if defined ENOCOFFEE
+  ASSERT (strcmp (strerrorname_np (ENOCOFFEE), "ENOCOFFEE") == 0);
+  #endif
+  /* Minix */
+  #if defined ENOCONN
+  ASSERT (strcmp (strerrorname_np (ENOCONN), "ENOCONN") == 0);
+  #endif
+  /* AIX */
+  #if defined ENOCONNECT
+  ASSERT (strcmp (strerrorname_np (ENOCONNECT), "ENOCONNECT") == 0);
+  #endif
+  /* Linux, AIX, HP-UX, IRIX, Solaris, Cygwin */
+  #if defined ENOCSI
+  ASSERT (strcmp (strerrorname_np (ENOCSI), "ENOCSI") == 0);
+  #endif
+  /* IRIX */
+  #if defined ENOEXIST
+  ASSERT (strcmp (strerrorname_np (ENOEXIST), "ENOEXIST") == 0);
+  #endif
+  /* IRIX */
+  #if defined ENOINTRGROUP
+  ASSERT (strcmp (strerrorname_np (ENOINTRGROUP), "ENOINTRGROUP") == 0);
+  #endif
+  /* FreeBSD */
+  #if defined ENOIOCTL
+  ASSERT (strcmp (strerrorname_np (ENOIOCTL), "ENOIOCTL") == 0);
+  #endif
+  /* Linux */
+  #if defined ENOKEY
+  ASSERT (strcmp (strerrorname_np (ENOKEY), "ENOKEY") == 0);
+  #endif
+  /* IRIX */
+  #if defined ENOLIMFILE
+  ASSERT (strcmp (strerrorname_np (ENOLIMFILE), "ENOLIMFILE") == 0);
+  #endif
+  /* HP-UX */
+  #if defined ENOLOAD
+  ASSERT (strcmp (strerrorname_np (ENOLOAD), "ENOLOAD") == 0);
+  #endif
+  /* IRIX */
+  #if defined ENOLOGIN
+  ASSERT (strcmp (strerrorname_np (ENOLOGIN), "ENOLOGIN") == 0);
+  #endif
+  /* HP-UX */
+  #if defined ENOMATCH
+  ASSERT (strcmp (strerrorname_np (ENOMATCH), "ENOMATCH") == 0);
+  #endif
+  /* Linux, OpenBSD, Cygwin */
+  #if defined ENOMEDIUM
+  ASSERT (strcmp (strerrorname_np (ENOMEDIUM), "ENOMEDIUM") == 0);
+  #endif
+  /* IRIX */
+  #if defined ENOMESSAGE
+  ASSERT (strcmp (strerrorname_np (ENOMESSAGE), "ENOMESSAGE") == 0);
+  #endif
+  /* Linux, HP-UX, IRIX, Solaris, Cygwin */
+  #if defined ENONET
+  ASSERT (strcmp (strerrorname_np (ENONET), "ENONET") == 0);
+  #endif
+  /* Linux, HP-UX, IRIX, OSF/1, Solaris, Cygwin */
+  #if defined ENOPKG
+  ASSERT (strcmp (strerrorname_np (ENOPKG), "ENOPKG") == 0);
+  #endif
+  /* Mac OS X */
+  #if defined ENOPOLICY
+  ASSERT (strcmp (strerrorname_np (ENOPOLICY), "ENOPOLICY") == 0);
+  #endif
+  /* IRIX */
+  #if defined ENOPROC
+  ASSERT (strcmp (strerrorname_np (ENOPROC), "ENOPROC") == 0);
+  #endif
+  /* HP-UX */
+  #if defined ENOREG
+  ASSERT (strcmp (strerrorname_np (ENOREG), "ENOREG") == 0);
+  #endif
+  /* IRIX */
+  #if defined ENOSERVICE
+  ASSERT (strcmp (strerrorname_np (ENOSERVICE), "ENOSERVICE") == 0);
+  #endif
+  /* Cygwin */
+  #if defined ENOSHARE
+  ASSERT (strcmp (strerrorname_np (ENOSHARE), "ENOSHARE") == 0);
+  #endif
+  /* HP-UX, OSF/1 */
+  #if defined ENOSYM
+  ASSERT (strcmp (strerrorname_np (ENOSYM), "ENOSYM") == 0);
+  #endif
+  /* Solaris */
+  #if defined ENOTACTIVE
+  ASSERT (strcmp (strerrorname_np (ENOTACTIVE), "ENOTACTIVE") == 0);
+  #endif
+  /* Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, IRIX, OSF/1, Solaris, Minix, Cygwin */
+  #if defined ENOTBLK
+  ASSERT (strcmp (strerrorname_np (ENOTBLK), "ENOTBLK") == 0);
+  #endif
+  /* FreeBSD */
+  #if defined ENOTCAPABLE
+  ASSERT (strcmp (strerrorname_np (ENOTCAPABLE), "ENOTCAPABLE") == 0);
+  #endif
+  /* IRIX */
+  #if defined ENOTCONTROLLER
+  ASSERT (strcmp (strerrorname_np (ENOTCONTROLLER), "ENOTCONTROLLER") == 0);
+  #endif
+  /* IRIX */
+  #if defined ENOTENQUEUED
+  ASSERT (strcmp (strerrorname_np (ENOTENQUEUED), "ENOTENQUEUED") == 0);
+  #endif
+  /* IRIX */
+  #if defined ENOTJOINED
+  ASSERT (strcmp (strerrorname_np (ENOTJOINED), "ENOTJOINED") == 0);
+  #endif
+  /* Linux, IRIX */
+  #if defined ENOTNAM
+  ASSERT (strcmp (strerrorname_np (ENOTNAM), "ENOTNAM") == 0);
+  #endif
+  /* AIX, Minix */
+  #if defined ENOTREADY
+  ASSERT (strcmp (strerrorname_np (ENOTREADY), "ENOTREADY") == 0);
+  #endif
+  /* AIX */
+  #if defined ENOTRUST
+  ASSERT (strcmp (strerrorname_np (ENOTRUST), "ENOTRUST") == 0);
+  #endif
+  /* IRIX */
+  #if defined ENOTSTOPPED
+  ASSERT (strcmp (strerrorname_np (ENOTSTOPPED), "ENOTSTOPPED") == 0);
+  #endif
+  /* Linux, IRIX, Solaris, Cygwin */
+  #if defined ENOTUNIQ
+  ASSERT (strcmp (strerrorname_np (ENOTUNIQ), "ENOTUNIQ") == 0);
+  #endif
+  /* HP-UX */
+  #if defined ENOUNLD
+  ASSERT (strcmp (strerrorname_np (ENOUNLD), "ENOUNLD") == 0);
+  #endif
+  /* HP-UX */
+  #if defined ENOUNREG
+  ASSERT (strcmp (strerrorname_np (ENOUNREG), "ENOUNREG") == 0);
+  #endif
+  /* Minix */
+  #if defined ENOURG
+  ASSERT (strcmp (strerrorname_np (ENOURG), "ENOURG") == 0);
+  #endif
+  /* native Windows */
+  #if defined EOTHER
+  ASSERT (strcmp (strerrorname_np (EOTHER), "EOTHER") == 0);
+  #endif
+  /* Minix */
+  #if defined EPACKSIZE
+  ASSERT (strcmp (strerrorname_np (EPACKSIZE), "EPACKSIZE") == 0);
+  #endif
+  /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, IRIX, OSF/1, Solaris, Minix, Haiku, Cygwin */
+  #if defined EPFNOSUPPORT
+  ASSERT (strcmp (strerrorname_np (EPFNOSUPPORT), "EPFNOSUPPORT") == 0);
+  #endif
+  /* Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, IRIX, OSF/1, Minix, Cygwin */
+  #if defined EPROCLIM
+  ASSERT (strcmp (strerrorname_np (EPROCLIM), "EPROCLIM") == 0);
+  #endif
+  /* Mac OS X, FreeBSD, NetBSD, OpenBSD, OSF/1, Minix */
+  #if defined EPROCUNAVAIL
+  ASSERT (strcmp (strerrorname_np (EPROCUNAVAIL), "EPROCUNAVAIL") == 0);
+  #endif
+  /* Mac OS X, FreeBSD, NetBSD, OpenBSD, OSF/1, Minix */
+  #if defined EPROGMISMATCH
+  ASSERT (strcmp (strerrorname_np (EPROGMISMATCH), "EPROGMISMATCH") == 0);
+  #endif
+  /* Mac OS X, FreeBSD, NetBSD, OpenBSD, OSF/1, Minix */
+  #if defined EPROGUNAVAIL
+  ASSERT (strcmp (strerrorname_np (EPROGUNAVAIL), "EPROGUNAVAIL") == 0);
+  #endif
+  /* Mac OS X */
+  #if defined EPWROFF
+  ASSERT (strcmp (strerrorname_np (EPWROFF), "EPWROFF") == 0);
+  #endif
+  /* Mac OS X */
+  #if defined EQFULL
+  ASSERT (strcmp (strerrorname_np (EQFULL), "EQFULL") == 0);
+  #endif
+  /* HP-UX */
+  #if defined ERELOC
+  ASSERT (strcmp (strerrorname_np (ERELOC), "ERELOC") == 0);
+  #endif
+  /* OSF/1 */
+  #if defined ERELOCATED
+  ASSERT (strcmp (strerrorname_np (ERELOCATED), "ERELOCATED") == 0);
+  #endif
+  /* FreeBSD */
+  #if defined ERELOOKUP
+  ASSERT (strcmp (strerrorname_np (ERELOOKUP), "ERELOOKUP") == 0);
+  #endif
+  /* Linux, IRIX, Solaris, Cygwin */
+  #if defined EREMCHG
+  ASSERT (strcmp (strerrorname_np (EREMCHG), "EREMCHG") == 0);
+  #endif
+  /* IRIX */
+  #if defined EREMDEV
+  ASSERT (strcmp (strerrorname_np (EREMDEV), "EREMDEV") == 0);
+  #endif
+  /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, IRIX, OSF/1, Solaris, Minix, Haiku, Cygwin */
+  #if defined EREMOTE
+  ASSERT (strcmp (strerrorname_np (EREMOTE), "EREMOTE") == 0);
+  #endif
+  /* Linux, IRIX */
+  #if defined EREMOTEIO
+  ASSERT (strcmp (strerrorname_np (EREMOTEIO), "EREMOTEIO") == 0);
+  #endif
+  /* HP-UX */
+  #if defined EREMOTERELEASE
+  ASSERT (strcmp (strerrorname_np (EREMOTERELEASE), "EREMOTERELEASE") == 0);
+  #endif
+  /* Linux, FreeBSD, AIX, IRIX, OSF/1, Solaris, Minix */
+  #if defined ERESTART
+  ASSERT (strcmp (strerrorname_np (ERESTART), "ERESTART") == 0);
+  #endif
+  /* Linux */
+  #if defined ERFKILL
+  ASSERT (strcmp (strerrorname_np (ERFKILL), "ERFKILL") == 0);
+  #endif
+  /* Mac OS X, FreeBSD, NetBSD, OpenBSD, OSF/1, Minix */
+  #if defined ERPCMISMATCH
+  ASSERT (strcmp (strerrorname_np (ERPCMISMATCH), "ERPCMISMATCH") == 0);
+  #endif
+  /* AIX */
+  #if defined ESAD
+  ASSERT (strcmp (strerrorname_np (ESAD), "ESAD") == 0);
+  #endif
+  /* Mac OS X */
+  #if defined ESHLIBVERS
+  ASSERT (strcmp (strerrorname_np (ESHLIBVERS), "ESHLIBVERS") == 0);
+  #endif
+  /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, IRIX, OSF/1, Solaris, Minix, Haiku, Cygwin */
+  #if defined ESHUTDOWN
+  ASSERT (strcmp (strerrorname_np (ESHUTDOWN), "ESHUTDOWN") == 0);
+  #endif
+  /* Haiku */
+  #if defined ESIGPARM
+  ASSERT (strcmp (strerrorname_np (ESIGPARM), "ESIGPARM") == 0);
+  #endif
+  /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, IRIX, OSF/1, Solaris, Minix, Cygwin */
+  #if defined ESOCKTNOSUPPORT
+  ASSERT (strcmp (strerrorname_np (ESOCKTNOSUPPORT), "ESOCKTNOSUPPORT") == 0);
+  #endif
+  /* AIX, OSF/1 */
+  #if defined ESOFT
+  ASSERT (strcmp (strerrorname_np (ESOFT), "ESOFT") == 0);
+  #endif
+  /* Linux, HP-UX, IRIX, Solaris, Cygwin */
+  #if defined ESRMNT
+  ASSERT (strcmp (strerrorname_np (ESRMNT), "ESRMNT") == 0);
+  #endif
+  /* Linux, IRIX, Solaris, Cygwin */
+  #if defined ESTRPIPE
+  ASSERT (strcmp (strerrorname_np (ESTRPIPE), "ESTRPIPE") == 0);
+  #endif
+  /* OSF/1 */
+  #if defined ESUCCESS
+  ASSERT (strcmp (strerrorname_np (ESUCCESS), "ESUCCESS") == 0);
+  #endif
+  /* AIX */
+  #if defined ESYSERROR
+  ASSERT (strcmp (strerrorname_np (ESYSERROR), "ESYSERROR") == 0);
+  #endif
+  /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, IRIX, OSF/1, Solaris, Minix, Cygwin */
+  #if defined ETOOMANYREFS
+  ASSERT (strcmp (strerrorname_np (ETOOMANYREFS), "ETOOMANYREFS") == 0);
+  #endif
+  /* Minix */
+  #if defined ETRAPDENIED
+  ASSERT (strcmp (strerrorname_np (ETRAPDENIED), "ETRAPDENIED") == 0);
+  #endif
+  /* Linux, IRIX */
+  #if defined EUCLEAN
+  ASSERT (strcmp (strerrorname_np (EUCLEAN), "EUCLEAN") == 0);
+  #endif
+  /* Linux, AIX, HP-UX, IRIX, Solaris, Cygwin */
+  #if defined EUNATCH
+  ASSERT (strcmp (strerrorname_np (EUNATCH), "EUNATCH") == 0);
+  #endif
+  /* Minix */
+  #if defined EURG
+  ASSERT (strcmp (strerrorname_np (EURG), "EURG") == 0);
+  #endif
+  /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, IRIX, OSF/1, Solaris, Minix, Cygwin */
+  #if defined EUSERS
+  ASSERT (strcmp (strerrorname_np (EUSERS), "EUSERS") == 0);
+  #endif
+  /* OSF/1 */
+  #if defined EVERSION
+  ASSERT (strcmp (strerrorname_np (EVERSION), "EVERSION") == 0);
+  #endif
+  /* IRIX */
+  #if defined EWRONGFS
+  ASSERT (strcmp (strerrorname_np (EWRONGFS), "EWRONGFS") == 0);
+  #endif
+  /* AIX */
+  #if defined EWRPROTECT
+  ASSERT (strcmp (strerrorname_np (EWRPROTECT), "EWRPROTECT") == 0);
+  #endif
+  /* Linux, IRIX, Solaris, Cygwin */
+  #if defined EXFULL
+  ASSERT (strcmp (strerrorname_np (EXFULL), "EXFULL") == 0);
+  #endif
+
+  ASSERT (strerrorname_np (20200830) == NULL);
+  ASSERT (strerrorname_np (-714) == NULL);
+
+  return 0;
+}
-- 
2.7.4

Reply via email to