1 // SPDX-License-Identifier: GPL-2.0 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), /* EWOULDBLOCK */ 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), /* ECANCELLED */ 36 E(ECHILD), 37 E(ECHRNG), 38 E(ECOMM), 39 E(ECONNABORTED), 40 E(ECONNREFUSED), /* EREFUSED */ 41 E(ECONNRESET), 42 E(EDEADLK), /* EDEADLOCK */ 43 #if EDEADLK != EDEADLOCK /* mips, sparc, powerpc */ 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 #ifdef ENOSYM 115 E(ENOSYM), 116 #endif 117 E(ENOSYS), 118 E(ENOTBLK), 119 E(ENOTCONN), 120 E(ENOTDIR), 121 E(ENOTEMPTY), 122 E(ENOTNAM), 123 E(ENOTRECOVERABLE), 124 E(ENOTSOCK), 125 E(ENOTTY), 126 E(ENOTUNIQ), 127 E(ENXIO), 128 E(EOPNOTSUPP), 129 E(EOVERFLOW), 130 E(EOWNERDEAD), 131 E(EPERM), 132 E(EPFNOSUPPORT), 133 E(EPIPE), 134 #ifdef EPROCLIM 135 E(EPROCLIM), 136 #endif 137 E(EPROTO), 138 E(EPROTONOSUPPORT), 139 E(EPROTOTYPE), 140 E(ERANGE), 141 E(EREMCHG), 142 #ifdef EREMDEV 143 E(EREMDEV), 144 #endif 145 E(EREMOTE), 146 E(EREMOTEIO), 147 #ifdef EREMOTERELEASE 148 E(EREMOTERELEASE), 149 #endif 150 E(ERESTART), 151 E(ERFKILL), 152 E(EROFS), 153 #ifdef ERREMOTE 154 E(ERREMOTE), 155 #endif 156 E(ESHUTDOWN), 157 E(ESOCKTNOSUPPORT), 158 E(ESPIPE), 159 E(ESRCH), 160 E(ESRMNT), 161 E(ESTALE), 162 E(ESTRPIPE), 163 E(ETIME), 164 E(ETIMEDOUT), 165 E(ETOOMANYREFS), 166 E(ETXTBSY), 167 E(EUCLEAN), 168 E(EUNATCH), 169 E(EUSERS), 170 E(EXDEV), 171 E(EXFULL), 172 }; 173 #undef E 174 175 #ifdef EREFUSED /* parisc */ 176 static_assert(EREFUSED == ECONNREFUSED); 177 #endif 178 #ifdef ECANCELLED /* parisc */ 179 static_assert(ECANCELLED == ECANCELED); 180 #endif 181 static_assert(EAGAIN == EWOULDBLOCK); /* everywhere */ 182 183 #define E(err) [err - 512 + BUILD_BUG_ON_ZERO(err < 512 || err > 550)] = "-" #err 184 static const char *names_512[] = { 185 E(ERESTARTSYS), 186 E(ERESTARTNOINTR), 187 E(ERESTARTNOHAND), 188 E(ENOIOCTLCMD), 189 E(ERESTART_RESTARTBLOCK), 190 E(EPROBE_DEFER), 191 E(EOPENSTALE), 192 E(ENOPARAM), 193 194 E(EBADHANDLE), 195 E(ENOTSYNC), 196 E(EBADCOOKIE), 197 E(ENOTSUPP), 198 E(ETOOSMALL), 199 E(ESERVERFAULT), 200 E(EBADTYPE), 201 E(EJUKEBOX), 202 E(EIOCBQUEUED), 203 E(ERECALLCONFLICT), 204 }; 205 #undef E 206 207 static const char *__errname(unsigned err) 208 { 209 if (err < ARRAY_SIZE(names_0)) 210 return names_0[err]; 211 if (err >= 512 && err - 512 < ARRAY_SIZE(names_512)) 212 return names_512[err - 512]; 213 /* But why? */ 214 if (IS_ENABLED(CONFIG_MIPS) && err == EDQUOT) /* 1133 */ 215 return "-EDQUOT"; 216 return NULL; 217 } 218 219 /* 220 * errname(EIO) -> "EIO" 221 * errname(-EIO) -> "-EIO" 222 */ 223 const char *errname(int err) 224 { 225 const char *name = __errname(abs(err)); 226 if (!name) 227 return NULL; 228 229 return err > 0 ? name + 1 : name; 230 } 231