57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 1) // SPDX-License-Identifier: GPL-2.0
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 2) #include <linux/build_bug.h>
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 3) #include <linux/errno.h>
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 4) #include <linux/errname.h>
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 5) #include <linux/kernel.h>
aa6159ab99a9a (Andy Shevchenko 2020-12-15 20:42:48 -0800 6) #include <linux/math.h>
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 7)
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 8) /*
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 9) * Ensure these tables do not accidentally become gigantic if some
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 10) * huge errno makes it in. On most architectures, the first table will
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 11) * only have about 140 entries, but mips and parisc have more sparsely
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 12) * allocated errnos (with EHWPOISON = 257 on parisc, and EDQUOT = 1133
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 13) * on mips), so this wastes a bit of space on those - though we
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 14) * special case the EDQUOT case.
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 15) */
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 16) #define E(err) [err + BUILD_BUG_ON_ZERO(err <= 0 || err > 300)] = "-" #err
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 17) static const char *names_0[] = {
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 18) E(E2BIG),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 19) E(EACCES),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 20) E(EADDRINUSE),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 21) E(EADDRNOTAVAIL),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 22) E(EADV),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 23) E(EAFNOSUPPORT),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 24) E(EALREADY),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 25) E(EBADE),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 26) E(EBADF),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 27) E(EBADFD),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 28) E(EBADMSG),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 29) E(EBADR),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 30) E(EBADRQC),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 31) E(EBADSLT),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 32) E(EBFONT),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 33) E(EBUSY),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 34) #ifdef ECANCELLED
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 35) E(ECANCELLED),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 36) #endif
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 37) E(ECHILD),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 38) E(ECHRNG),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 39) E(ECOMM),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 40) E(ECONNABORTED),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 41) E(ECONNRESET),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 42) E(EDEADLOCK),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 43) E(EDESTADDRREQ),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 44) E(EDOM),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 45) E(EDOTDOT),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 46) #ifndef CONFIG_MIPS
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 47) E(EDQUOT),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 48) #endif
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 49) E(EEXIST),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 50) E(EFAULT),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 51) E(EFBIG),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 52) E(EHOSTDOWN),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 53) E(EHOSTUNREACH),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 54) E(EHWPOISON),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 55) E(EIDRM),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 56) E(EILSEQ),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 57) #ifdef EINIT
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 58) E(EINIT),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 59) #endif
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 60) E(EINPROGRESS),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 61) E(EINTR),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 62) E(EINVAL),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 63) E(EIO),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 64) E(EISCONN),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 65) E(EISDIR),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 66) E(EISNAM),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 67) E(EKEYEXPIRED),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 68) E(EKEYREJECTED),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 69) E(EKEYREVOKED),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 70) E(EL2HLT),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 71) E(EL2NSYNC),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 72) E(EL3HLT),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 73) E(EL3RST),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 74) E(ELIBACC),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 75) E(ELIBBAD),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 76) E(ELIBEXEC),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 77) E(ELIBMAX),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 78) E(ELIBSCN),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 79) E(ELNRNG),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 80) E(ELOOP),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 81) E(EMEDIUMTYPE),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 82) E(EMFILE),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 83) E(EMLINK),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 84) E(EMSGSIZE),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 85) E(EMULTIHOP),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 86) E(ENAMETOOLONG),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 87) E(ENAVAIL),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 88) E(ENETDOWN),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 89) E(ENETRESET),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 90) E(ENETUNREACH),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 91) E(ENFILE),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 92) E(ENOANO),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 93) E(ENOBUFS),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 94) E(ENOCSI),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 95) E(ENODATA),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 96) E(ENODEV),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 97) E(ENOENT),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 98) E(ENOEXEC),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 99) E(ENOKEY),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 100) E(ENOLCK),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 101) E(ENOLINK),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 102) E(ENOMEDIUM),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 103) E(ENOMEM),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 104) E(ENOMSG),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 105) E(ENONET),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 106) E(ENOPKG),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 107) E(ENOPROTOOPT),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 108) E(ENOSPC),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 109) E(ENOSR),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 110) E(ENOSTR),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 111) #ifdef ENOSYM
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 112) E(ENOSYM),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 113) #endif
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 114) E(ENOSYS),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 115) E(ENOTBLK),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 116) E(ENOTCONN),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 117) E(ENOTDIR),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 118) E(ENOTEMPTY),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 119) E(ENOTNAM),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 120) E(ENOTRECOVERABLE),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 121) E(ENOTSOCK),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 122) E(ENOTTY),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 123) E(ENOTUNIQ),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 124) E(ENXIO),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 125) E(EOPNOTSUPP),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 126) E(EOVERFLOW),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 127) E(EOWNERDEAD),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 128) E(EPERM),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 129) E(EPFNOSUPPORT),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 130) E(EPIPE),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 131) #ifdef EPROCLIM
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 132) E(EPROCLIM),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 133) #endif
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 134) E(EPROTO),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 135) E(EPROTONOSUPPORT),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 136) E(EPROTOTYPE),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 137) E(ERANGE),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 138) E(EREMCHG),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 139) #ifdef EREMDEV
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 140) E(EREMDEV),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 141) #endif
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 142) E(EREMOTE),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 143) E(EREMOTEIO),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 144) #ifdef EREMOTERELEASE
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 145) E(EREMOTERELEASE),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 146) #endif
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 147) E(ERESTART),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 148) E(ERFKILL),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 149) E(EROFS),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 150) #ifdef ERREMOTE
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 151) E(ERREMOTE),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 152) #endif
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 153) E(ESHUTDOWN),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 154) E(ESOCKTNOSUPPORT),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 155) E(ESPIPE),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 156) E(ESRCH),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 157) E(ESRMNT),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 158) E(ESTALE),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 159) E(ESTRPIPE),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 160) E(ETIME),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 161) E(ETIMEDOUT),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 162) E(ETOOMANYREFS),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 163) E(ETXTBSY),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 164) E(EUCLEAN),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 165) E(EUNATCH),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 166) E(EUSERS),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 167) E(EXDEV),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 168) E(EXFULL),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 169)
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 170) E(ECANCELED), /* ECANCELLED */
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 171) E(EAGAIN), /* EWOULDBLOCK */
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 172) E(ECONNREFUSED), /* EREFUSED */
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 173) E(EDEADLK), /* EDEADLOCK */
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 174) };
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 175) #undef E
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 176)
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 177) #define E(err) [err - 512 + BUILD_BUG_ON_ZERO(err < 512 || err > 550)] = "-" #err
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 178) static const char *names_512[] = {
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 179) E(ERESTARTSYS),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 180) E(ERESTARTNOINTR),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 181) E(ERESTARTNOHAND),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 182) E(ENOIOCTLCMD),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 183) E(ERESTART_RESTARTBLOCK),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 184) E(EPROBE_DEFER),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 185) E(EOPENSTALE),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 186) E(ENOPARAM),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 187)
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 188) E(EBADHANDLE),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 189) E(ENOTSYNC),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 190) E(EBADCOOKIE),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 191) E(ENOTSUPP),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 192) E(ETOOSMALL),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 193) E(ESERVERFAULT),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 194) E(EBADTYPE),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 195) E(EJUKEBOX),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 196) E(EIOCBQUEUED),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 197) E(ERECALLCONFLICT),
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 198) };
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 199) #undef E
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 200)
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 201) static const char *__errname(unsigned err)
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 202) {
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 203) if (err < ARRAY_SIZE(names_0))
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 204) return names_0[err];
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 205) if (err >= 512 && err - 512 < ARRAY_SIZE(names_512))
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 206) return names_512[err - 512];
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 207) /* But why? */
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 208) if (IS_ENABLED(CONFIG_MIPS) && err == EDQUOT) /* 1133 */
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 209) return "-EDQUOT";
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 210) return NULL;
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 211) }
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 212)
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 213) /*
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 214) * errname(EIO) -> "EIO"
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 215) * errname(-EIO) -> "-EIO"
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 216) */
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 217) const char *errname(int err)
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 218) {
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 219) const char *name = __errname(abs(err));
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 220) if (!name)
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 221) return NULL;
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 222)
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 223) return err > 0 ? name + 1 : name;
57f5677e535ba (Rasmus Villemoes 2019-10-15 21:07:05 +0200 224) }