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