Line data Source code
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 0 : if (err < ARRAY_SIZE(names_0))
210 0 : return names_0[err];
211 0 : if (err >= 512 && err - 512 < ARRAY_SIZE(names_512))
212 0 : 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 0 : const char *errname(int err)
224 : {
225 0 : const char *name = __errname(abs(err));
226 0 : if (!name)
227 : return NULL;
228 :
229 0 : return err > 0 ? name + 1 : name;
230 : }
|