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