Merge tag 'block-6.3-2023-03-03' of git://git.kernel.dk/linux
[platform/kernel/linux-starfive.git] / lib / errname.c
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 }