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