diff --git a/src/basic/errno-list.c b/src/basic/errno-list.c index 8de9888083..1cad1f6a5d 100644 --- a/src/basic/errno-list.c +++ b/src/basic/errno-list.c @@ -10,6 +10,7 @@ static const struct errno_name* lookup_errno(register const char *str, register GPERF_LEN_TYPE len); #include "errno-from-name.inc" +#include "errno-to-name.inc" int errno_from_name(const char *name) { const struct errno_name *sc; @@ -24,26 +25,24 @@ int errno_from_name(const char *name) { return sc->id; } -#if HAVE_STRERRORNAME_NP const char* errno_to_name(int id) { if (id == 0) /* To stay in line with our own impl */ return NULL; - return strerrorname_np(ABS(id)); -} -#else -# include "errno-to-name.inc" - -const char* errno_to_name(int id) { if (id < 0) id = -id; +#if HAVE_STRERRORNAME_NP + const char *n = strerrorname_np(id); + if (n) + return n; +#endif + if ((size_t) id >= ELEMENTSOF(errno_names)) return NULL; return errno_names[id]; } -#endif const char* errno_name_full(int id, char buf[static ERRNO_NAME_BUF_LEN]) { const char *a = errno_to_name(id);