From: Yu Watanabe Date: Fri, 25 Jul 2025 00:40:00 +0000 (+0900) Subject: errno-list: fallback to use our errno name table X-Git-Tag: v258-rc2~93 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c4ffd0a02075f14c6124b1da2219e15f7e4fd64b;p=thirdparty%2Fsystemd.git errno-list: fallback to use our errno name table Some architecture specific errno may not be known by glibc. Let's fallback to our table when strerrorname_np() returns NULL. Fixes the following error in mips: ``` src/test/test-errno-list.c:14: Assertion failed: Expected "errno_to_name(i) == errno_names[i]", got "(null) != EINIT" ``` Follow-up for 03ccee19396ae604d9ac1570dddb8b41ec0e7253. --- diff --git a/src/basic/errno-list.c b/src/basic/errno-list.c index 8de98880839..1cad1f6a5d0 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);