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 03ccee1939.
This commit is contained in:
Yu Watanabe
2025-07-25 09:40:00 +09:00
committed by Luca Boccassi
parent 111e2a106c
commit c4ffd0a020

View File

@@ -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);