1/*
2 * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 *    notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 *    notice, this list of conditions and the following disclaimer in the
12 *    documentation and/or other materials provided with the distribution.
13 * 3. The name of the author may not be used to endorse or promote products
14 *    derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28#include "tests.h"
29#include <errno.h>
30
31#define CASE(x) case x: return #x
32
33const char *
34errno2name(void)
35{
36	switch (errno) {
37	/* names taken from linux/errnoent.h */
38#ifdef E2BIG
39	CASE(E2BIG);
40#endif
41#ifdef EACCES
42	CASE(EACCES);
43#endif
44#ifdef EADDRINUSE
45	CASE(EADDRINUSE);
46#endif
47#ifdef EADDRNOTAVAIL
48	CASE(EADDRNOTAVAIL);
49#endif
50#ifdef EADV
51	CASE(EADV);
52#endif
53#ifdef EAFNOSUPPORT
54	CASE(EAFNOSUPPORT);
55#endif
56#ifdef EAGAIN
57	CASE(EAGAIN);
58#endif
59#ifdef EALREADY
60	CASE(EALREADY);
61#endif
62#ifdef EBADCOOKIE
63	CASE(EBADCOOKIE);
64#endif
65#ifdef EBADE
66	CASE(EBADE);
67#endif
68#ifdef EBADF
69	CASE(EBADF);
70#endif
71#ifdef EBADFD
72	CASE(EBADFD);
73#endif
74#ifdef EBADHANDLE
75	CASE(EBADHANDLE);
76#endif
77#ifdef EBADMSG
78	CASE(EBADMSG);
79#endif
80#ifdef EBADR
81	CASE(EBADR);
82#endif
83#ifdef EBADRQC
84	CASE(EBADRQC);
85#endif
86#ifdef EBADSLT
87	CASE(EBADSLT);
88#endif
89#ifdef EBADTYPE
90	CASE(EBADTYPE);
91#endif
92#ifdef EBFONT
93	CASE(EBFONT);
94#endif
95#ifdef EBUSY
96	CASE(EBUSY);
97#endif
98#ifdef ECANCELED
99	CASE(ECANCELED);
100#endif
101#ifdef ECHILD
102	CASE(ECHILD);
103#endif
104#ifdef ECHRNG
105	CASE(ECHRNG);
106#endif
107#ifdef ECOMM
108	CASE(ECOMM);
109#endif
110#ifdef ECONNABORTED
111	CASE(ECONNABORTED);
112#endif
113#ifdef ECONNREFUSED
114	CASE(ECONNREFUSED);
115#endif
116#ifdef ECONNRESET
117	CASE(ECONNRESET);
118#endif
119#ifdef EDEADLK
120	CASE(EDEADLK);
121#endif
122#ifdef EDESTADDRREQ
123	CASE(EDESTADDRREQ);
124#endif
125#ifdef EDOM
126	CASE(EDOM);
127#endif
128#ifdef EDOTDOT
129	CASE(EDOTDOT);
130#endif
131#ifdef EDQUOT
132	CASE(EDQUOT);
133#endif
134#ifdef EEXIST
135	CASE(EEXIST);
136#endif
137#ifdef EFAULT
138	CASE(EFAULT);
139#endif
140#ifdef EFBIG
141	CASE(EFBIG);
142#endif
143#ifdef EHOSTDOWN
144	CASE(EHOSTDOWN);
145#endif
146#ifdef EHOSTUNREACH
147	CASE(EHOSTUNREACH);
148#endif
149#ifdef EHWPOISON
150	CASE(EHWPOISON);
151#endif
152#ifdef EIDRM
153	CASE(EIDRM);
154#endif
155#ifdef EILSEQ
156	CASE(EILSEQ);
157#endif
158#ifdef EINPROGRESS
159	CASE(EINPROGRESS);
160#endif
161#ifdef EINTR
162	CASE(EINTR);
163#endif
164#ifdef EINVAL
165	CASE(EINVAL);
166#endif
167#ifdef EIO
168	CASE(EIO);
169#endif
170#ifdef EIOCBQUEUED
171	CASE(EIOCBQUEUED);
172#endif
173#ifdef EISCONN
174	CASE(EISCONN);
175#endif
176#ifdef EISDIR
177	CASE(EISDIR);
178#endif
179#ifdef EISNAM
180	CASE(EISNAM);
181#endif
182#ifdef EJUKEBOX
183	CASE(EJUKEBOX);
184#endif
185#ifdef EKEYEXPIRED
186	CASE(EKEYEXPIRED);
187#endif
188#ifdef EKEYREJECTED
189	CASE(EKEYREJECTED);
190#endif
191#ifdef EKEYREVOKED
192	CASE(EKEYREVOKED);
193#endif
194#ifdef EL2HLT
195	CASE(EL2HLT);
196#endif
197#ifdef EL2NSYNC
198	CASE(EL2NSYNC);
199#endif
200#ifdef EL3HLT
201	CASE(EL3HLT);
202#endif
203#ifdef EL3RST
204	CASE(EL3RST);
205#endif
206#ifdef ELIBACC
207	CASE(ELIBACC);
208#endif
209#ifdef ELIBBAD
210	CASE(ELIBBAD);
211#endif
212#ifdef ELIBEXEC
213	CASE(ELIBEXEC);
214#endif
215#ifdef ELIBMAX
216	CASE(ELIBMAX);
217#endif
218#ifdef ELIBSCN
219	CASE(ELIBSCN);
220#endif
221#ifdef ELNRNG
222	CASE(ELNRNG);
223#endif
224#ifdef ELOOP
225	CASE(ELOOP);
226#endif
227#ifdef EMEDIUMTYPE
228	CASE(EMEDIUMTYPE);
229#endif
230#ifdef EMFILE
231	CASE(EMFILE);
232#endif
233#ifdef EMLINK
234	CASE(EMLINK);
235#endif
236#ifdef EMSGSIZE
237	CASE(EMSGSIZE);
238#endif
239#ifdef EMULTIHOP
240	CASE(EMULTIHOP);
241#endif
242#ifdef ENAMETOOLONG
243	CASE(ENAMETOOLONG);
244#endif
245#ifdef ENAVAIL
246	CASE(ENAVAIL);
247#endif
248#ifdef ENETDOWN
249	CASE(ENETDOWN);
250#endif
251#ifdef ENETRESET
252	CASE(ENETRESET);
253#endif
254#ifdef ENETUNREACH
255	CASE(ENETUNREACH);
256#endif
257#ifdef ENFILE
258	CASE(ENFILE);
259#endif
260#ifdef ENOANO
261	CASE(ENOANO);
262#endif
263#ifdef ENOBUFS
264	CASE(ENOBUFS);
265#endif
266#ifdef ENOCSI
267	CASE(ENOCSI);
268#endif
269#ifdef ENODATA
270	CASE(ENODATA);
271#endif
272#ifdef ENODEV
273	CASE(ENODEV);
274#endif
275#ifdef ENOENT
276	CASE(ENOENT);
277#endif
278#ifdef ENOEXEC
279	CASE(ENOEXEC);
280#endif
281#ifdef ENOIOCTLCMD
282	CASE(ENOIOCTLCMD);
283#endif
284#ifdef ENOKEY
285	CASE(ENOKEY);
286#endif
287#ifdef ENOLCK
288	CASE(ENOLCK);
289#endif
290#ifdef ENOLINK
291	CASE(ENOLINK);
292#endif
293#ifdef ENOMEDIUM
294	CASE(ENOMEDIUM);
295#endif
296#ifdef ENOMEM
297	CASE(ENOMEM);
298#endif
299#ifdef ENOMSG
300	CASE(ENOMSG);
301#endif
302#ifdef ENONET
303	CASE(ENONET);
304#endif
305#ifdef ENOPKG
306	CASE(ENOPKG);
307#endif
308#ifdef ENOPROTOOPT
309	CASE(ENOPROTOOPT);
310#endif
311#ifdef ENOSPC
312	CASE(ENOSPC);
313#endif
314#ifdef ENOSR
315	CASE(ENOSR);
316#endif
317#ifdef ENOSTR
318	CASE(ENOSTR);
319#endif
320#ifdef ENOSYS
321	CASE(ENOSYS);
322#endif
323#ifdef ENOTBLK
324	CASE(ENOTBLK);
325#endif
326#ifdef ENOTCONN
327	CASE(ENOTCONN);
328#endif
329#ifdef ENOTDIR
330	CASE(ENOTDIR);
331#endif
332#ifdef ENOTEMPTY
333	CASE(ENOTEMPTY);
334#endif
335#ifdef ENOTNAM
336	CASE(ENOTNAM);
337#endif
338#ifdef ENOTRECOVERABLE
339	CASE(ENOTRECOVERABLE);
340#endif
341#ifdef ENOTSOCK
342	CASE(ENOTSOCK);
343#endif
344#ifdef ENOTSUPP
345	CASE(ENOTSUPP);
346#endif
347#ifdef ENOTSYNC
348	CASE(ENOTSYNC);
349#endif
350#ifdef ENOTTY
351	CASE(ENOTTY);
352#endif
353#ifdef ENOTUNIQ
354	CASE(ENOTUNIQ);
355#endif
356#ifdef ENXIO
357	CASE(ENXIO);
358#endif
359#ifdef EOPENSTALE
360	CASE(EOPENSTALE);
361#endif
362#ifdef EOPNOTSUPP
363	CASE(EOPNOTSUPP);
364#endif
365#ifdef EOVERFLOW
366	CASE(EOVERFLOW);
367#endif
368#ifdef EOWNERDEAD
369	CASE(EOWNERDEAD);
370#endif
371#ifdef EPERM
372	CASE(EPERM);
373#endif
374#ifdef EPFNOSUPPORT
375	CASE(EPFNOSUPPORT);
376#endif
377#ifdef EPIPE
378	CASE(EPIPE);
379#endif
380#ifdef EPROBE_DEFER
381	CASE(EPROBE_DEFER);
382#endif
383#ifdef EPROTO
384	CASE(EPROTO);
385#endif
386#ifdef EPROTONOSUPPORT
387	CASE(EPROTONOSUPPORT);
388#endif
389#ifdef EPROTOTYPE
390	CASE(EPROTOTYPE);
391#endif
392#ifdef ERANGE
393	CASE(ERANGE);
394#endif
395#ifdef EREMCHG
396	CASE(EREMCHG);
397#endif
398#ifdef EREMOTE
399	CASE(EREMOTE);
400#endif
401#ifdef EREMOTEIO
402	CASE(EREMOTEIO);
403#endif
404#ifdef ERESTART
405	CASE(ERESTART);
406#endif
407#ifdef ERESTARTNOHAND
408	CASE(ERESTARTNOHAND);
409#endif
410#ifdef ERESTARTNOINTR
411	CASE(ERESTARTNOINTR);
412#endif
413#ifdef ERESTARTSYS
414	CASE(ERESTARTSYS);
415#endif
416#ifdef ERESTART_RESTARTBLOCK
417	CASE(ERESTART_RESTARTBLOCK);
418#endif
419#ifdef ERFKILL
420	CASE(ERFKILL);
421#endif
422#ifdef EROFS
423	CASE(EROFS);
424#endif
425#ifdef ESERVERFAULT
426	CASE(ESERVERFAULT);
427#endif
428#ifdef ESHUTDOWN
429	CASE(ESHUTDOWN);
430#endif
431#ifdef ESOCKTNOSUPPORT
432	CASE(ESOCKTNOSUPPORT);
433#endif
434#ifdef ESPIPE
435	CASE(ESPIPE);
436#endif
437#ifdef ESRCH
438	CASE(ESRCH);
439#endif
440#ifdef ESRMNT
441	CASE(ESRMNT);
442#endif
443#ifdef ESTALE
444	CASE(ESTALE);
445#endif
446#ifdef ESTRPIPE
447	CASE(ESTRPIPE);
448#endif
449#ifdef ETIME
450	CASE(ETIME);
451#endif
452#ifdef ETIMEDOUT
453	CASE(ETIMEDOUT);
454#endif
455#ifdef ETOOMANYREFS
456	CASE(ETOOMANYREFS);
457#endif
458#ifdef ETOOSMALL
459	CASE(ETOOSMALL);
460#endif
461#ifdef ETXTBSY
462	CASE(ETXTBSY);
463#endif
464#ifdef EUCLEAN
465	CASE(EUCLEAN);
466#endif
467#ifdef EUNATCH
468	CASE(EUNATCH);
469#endif
470#ifdef EUSERS
471	CASE(EUSERS);
472#endif
473#ifdef EXDEV
474	CASE(EXDEV);
475#endif
476#ifdef EXFULL
477	CASE(EXFULL);
478#endif
479	default:
480		perror_msg_and_fail("unknown errno %d", errno);
481	}
482}
483