]> git.ipfire.org Git - thirdparty/kernel/linux.git/blame - lib/errname.c
Merge tag 'bcachefs-2024-04-22' of https://evilpiepirate.org/git/bcachefs
[thirdparty/kernel/linux.git] / lib / errname.c
CommitLineData
57f5677e
RV
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>
aa6159ab 6#include <linux/math.h>
57f5677e
RV
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
17static const char *names_0[] = {
18 E(E2BIG),
19 E(EACCES),
20 E(EADDRINUSE),
21 E(EADDRNOTAVAIL),
22 E(EADV),
23 E(EAFNOSUPPORT),
0c2baf65 24 E(EAGAIN), /* EWOULDBLOCK */
57f5677e
RV
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),
0c2baf65 35 E(ECANCELED), /* ECANCELLED */
57f5677e
RV
36 E(ECHILD),
37 E(ECHRNG),
38 E(ECOMM),
39 E(ECONNABORTED),
0c2baf65 40 E(ECONNREFUSED), /* EREFUSED */
57f5677e 41 E(ECONNRESET),
0c2baf65
AB
42 E(EDEADLK), /* EDEADLOCK */
43#if EDEADLK != EDEADLOCK /* mips, sparc, powerpc */
57f5677e 44 E(EDEADLOCK),
0c2baf65 45#endif
57f5677e
RV
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),
57f5677e
RV
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),
57f5677e
RV
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),
57f5677e
RV
166};
167#undef E
168
0c2baf65
AB
169#ifdef EREFUSED /* parisc */
170static_assert(EREFUSED == ECONNREFUSED);
171#endif
172#ifdef ECANCELLED /* parisc */
173static_assert(ECANCELLED == ECANCELED);
174#endif
175static_assert(EAGAIN == EWOULDBLOCK); /* everywhere */
176
57f5677e
RV
177#define E(err) [err - 512 + BUILD_BUG_ON_ZERO(err < 512 || err > 550)] = "-" #err
178static 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
201static 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 */
217const 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}
21db9314 225EXPORT_SYMBOL(errname);