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 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 /* parisc */ 170 static_assert(EREFUSED == ECONNREFUSED); 171 #endif 172 #ifdef ECANCELLED /* parisc */ 173 static_assert(ECANCELLED == ECANCELED); 174 #endif 175 static_assert(EAGAIN == EWOULDBLOCK); /* everywhere */ 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 /* But why? */ 208 if (IS_ENABLED(CONFIG_MIPS) && err == EDQUOT) /* 1133 */ 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); 226
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.