summaryrefslogtreecommitdiff
path: root/tests/errno2name.c
diff options
context:
space:
mode:
authorDmitry V. Levin <ldv@altlinux.org>2016-04-20 22:51:28 +0000
committerDmitry V. Levin <ldv@altlinux.org>2016-04-21 04:08:55 +0300
commit2b69fd4c4388bded07c6eb212ba4fc76235e9ab5 (patch)
tree5763f6d8f53e13debb0d7b7d82666a9386687b14 /tests/errno2name.c
parent769c98af34ad93eeb3d5df9ca570b0087cc09235 (diff)
downloadstrace-2b69fd4c4388bded07c6eb212ba4fc76235e9ab5.tar.gz
tests: add errno2name function to libtests
Add a simple translator of errno to its name, so one could simply use errno2name() instead of complex expressions like errno == EINVAL ? "EINVAL" : "EFAULT". * tests.h (errno2name): New prototype. * errno2name.c: New file. * Makefile.am (libtests_a_SOURCES): Add it.
Diffstat (limited to 'tests/errno2name.c')
-rw-r--r--tests/errno2name.c481
1 files changed, 481 insertions, 0 deletions
diff --git a/tests/errno2name.c b/tests/errno2name.c
new file mode 100644
index 000000000..4a176993b
--- /dev/null
+++ b/tests/errno2name.c
@@ -0,0 +1,481 @@
+/*
+ * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include <errno.h>
+
+#define CASE(x) case x: return #x
+
+const char *
+errno2name(void)
+{
+ switch (errno) {
+ /* names taken from linux/errnoent.h */
+#ifdef E2BIG
+ CASE(E2BIG);
+#endif
+#ifdef EACCES
+ CASE(EACCES);
+#endif
+#ifdef EADDRINUSE
+ CASE(EADDRINUSE);
+#endif
+#ifdef EADDRNOTAVAIL
+ CASE(EADDRNOTAVAIL);
+#endif
+#ifdef EADV
+ CASE(EADV);
+#endif
+#ifdef EAFNOSUPPORT
+ CASE(EAFNOSUPPORT);
+#endif
+#ifdef EAGAIN
+ CASE(EAGAIN);
+#endif
+#ifdef EALREADY
+ CASE(EALREADY);
+#endif
+#ifdef EBADCOOKIE
+ CASE(EBADCOOKIE);
+#endif
+#ifdef EBADE
+ CASE(EBADE);
+#endif
+#ifdef EBADF
+ CASE(EBADF);
+#endif
+#ifdef EBADFD
+ CASE(EBADFD);
+#endif
+#ifdef EBADHANDLE
+ CASE(EBADHANDLE);
+#endif
+#ifdef EBADMSG
+ CASE(EBADMSG);
+#endif
+#ifdef EBADR
+ CASE(EBADR);
+#endif
+#ifdef EBADRQC
+ CASE(EBADRQC);
+#endif
+#ifdef EBADSLT
+ CASE(EBADSLT);
+#endif
+#ifdef EBADTYPE
+ CASE(EBADTYPE);
+#endif
+#ifdef EBFONT
+ CASE(EBFONT);
+#endif
+#ifdef EBUSY
+ CASE(EBUSY);
+#endif
+#ifdef ECANCELED
+ CASE(ECANCELED);
+#endif
+#ifdef ECHILD
+ CASE(ECHILD);
+#endif
+#ifdef ECHRNG
+ CASE(ECHRNG);
+#endif
+#ifdef ECOMM
+ CASE(ECOMM);
+#endif
+#ifdef ECONNABORTED
+ CASE(ECONNABORTED);
+#endif
+#ifdef ECONNREFUSED
+ CASE(ECONNREFUSED);
+#endif
+#ifdef ECONNRESET
+ CASE(ECONNRESET);
+#endif
+#ifdef EDEADLK
+ CASE(EDEADLK);
+#endif
+#ifdef EDESTADDRREQ
+ CASE(EDESTADDRREQ);
+#endif
+#ifdef EDOM
+ CASE(EDOM);
+#endif
+#ifdef EDOTDOT
+ CASE(EDOTDOT);
+#endif
+#ifdef EDQUOT
+ CASE(EDQUOT);
+#endif
+#ifdef EEXIST
+ CASE(EEXIST);
+#endif
+#ifdef EFAULT
+ CASE(EFAULT);
+#endif
+#ifdef EFBIG
+ CASE(EFBIG);
+#endif
+#ifdef EHOSTDOWN
+ CASE(EHOSTDOWN);
+#endif
+#ifdef EHOSTUNREACH
+ CASE(EHOSTUNREACH);
+#endif
+#ifdef EHWPOISON
+ CASE(EHWPOISON);
+#endif
+#ifdef EIDRM
+ CASE(EIDRM);
+#endif
+#ifdef EILSEQ
+ CASE(EILSEQ);
+#endif
+#ifdef EINPROGRESS
+ CASE(EINPROGRESS);
+#endif
+#ifdef EINTR
+ CASE(EINTR);
+#endif
+#ifdef EINVAL
+ CASE(EINVAL);
+#endif
+#ifdef EIO
+ CASE(EIO);
+#endif
+#ifdef EIOCBQUEUED
+ CASE(EIOCBQUEUED);
+#endif
+#ifdef EISCONN
+ CASE(EISCONN);
+#endif
+#ifdef EISDIR
+ CASE(EISDIR);
+#endif
+#ifdef EISNAM
+ CASE(EISNAM);
+#endif
+#ifdef EJUKEBOX
+ CASE(EJUKEBOX);
+#endif
+#ifdef EKEYEXPIRED
+ CASE(EKEYEXPIRED);
+#endif
+#ifdef EKEYREJECTED
+ CASE(EKEYREJECTED);
+#endif
+#ifdef EKEYREVOKED
+ CASE(EKEYREVOKED);
+#endif
+#ifdef EL2HLT
+ CASE(EL2HLT);
+#endif
+#ifdef EL2NSYNC
+ CASE(EL2NSYNC);
+#endif
+#ifdef EL3HLT
+ CASE(EL3HLT);
+#endif
+#ifdef EL3RST
+ CASE(EL3RST);
+#endif
+#ifdef ELIBACC
+ CASE(ELIBACC);
+#endif
+#ifdef ELIBBAD
+ CASE(ELIBBAD);
+#endif
+#ifdef ELIBEXEC
+ CASE(ELIBEXEC);
+#endif
+#ifdef ELIBMAX
+ CASE(ELIBMAX);
+#endif
+#ifdef ELIBSCN
+ CASE(ELIBSCN);
+#endif
+#ifdef ELNRNG
+ CASE(ELNRNG);
+#endif
+#ifdef ELOOP
+ CASE(ELOOP);
+#endif
+#ifdef EMEDIUMTYPE
+ CASE(EMEDIUMTYPE);
+#endif
+#ifdef EMFILE
+ CASE(EMFILE);
+#endif
+#ifdef EMLINK
+ CASE(EMLINK);
+#endif
+#ifdef EMSGSIZE
+ CASE(EMSGSIZE);
+#endif
+#ifdef EMULTIHOP
+ CASE(EMULTIHOP);
+#endif
+#ifdef ENAMETOOLONG
+ CASE(ENAMETOOLONG);
+#endif
+#ifdef ENAVAIL
+ CASE(ENAVAIL);
+#endif
+#ifdef ENETDOWN
+ CASE(ENETDOWN);
+#endif
+#ifdef ENETRESET
+ CASE(ENETRESET);
+#endif
+#ifdef ENETUNREACH
+ CASE(ENETUNREACH);
+#endif
+#ifdef ENFILE
+ CASE(ENFILE);
+#endif
+#ifdef ENOANO
+ CASE(ENOANO);
+#endif
+#ifdef ENOBUFS
+ CASE(ENOBUFS);
+#endif
+#ifdef ENOCSI
+ CASE(ENOCSI);
+#endif
+#ifdef ENODATA
+ CASE(ENODATA);
+#endif
+#ifdef ENODEV
+ CASE(ENODEV);
+#endif
+#ifdef ENOENT
+ CASE(ENOENT);
+#endif
+#ifdef ENOEXEC
+ CASE(ENOEXEC);
+#endif
+#ifdef ENOIOCTLCMD
+ CASE(ENOIOCTLCMD);
+#endif
+#ifdef ENOKEY
+ CASE(ENOKEY);
+#endif
+#ifdef ENOLCK
+ CASE(ENOLCK);
+#endif
+#ifdef ENOLINK
+ CASE(ENOLINK);
+#endif
+#ifdef ENOMEDIUM
+ CASE(ENOMEDIUM);
+#endif
+#ifdef ENOMEM
+ CASE(ENOMEM);
+#endif
+#ifdef ENOMSG
+ CASE(ENOMSG);
+#endif
+#ifdef ENONET
+ CASE(ENONET);
+#endif
+#ifdef ENOPKG
+ CASE(ENOPKG);
+#endif
+#ifdef ENOPROTOOPT
+ CASE(ENOPROTOOPT);
+#endif
+#ifdef ENOSPC
+ CASE(ENOSPC);
+#endif
+#ifdef ENOSR
+ CASE(ENOSR);
+#endif
+#ifdef ENOSTR
+ CASE(ENOSTR);
+#endif
+#ifdef ENOSYS
+ CASE(ENOSYS);
+#endif
+#ifdef ENOTBLK
+ CASE(ENOTBLK);
+#endif
+#ifdef ENOTCONN
+ CASE(ENOTCONN);
+#endif
+#ifdef ENOTDIR
+ CASE(ENOTDIR);
+#endif
+#ifdef ENOTEMPTY
+ CASE(ENOTEMPTY);
+#endif
+#ifdef ENOTNAM
+ CASE(ENOTNAM);
+#endif
+#ifdef ENOTRECOVERABLE
+ CASE(ENOTRECOVERABLE);
+#endif
+#ifdef ENOTSOCK
+ CASE(ENOTSOCK);
+#endif
+#ifdef ENOTSUPP
+ CASE(ENOTSUPP);
+#endif
+#ifdef ENOTSYNC
+ CASE(ENOTSYNC);
+#endif
+#ifdef ENOTTY
+ CASE(ENOTTY);
+#endif
+#ifdef ENOTUNIQ
+ CASE(ENOTUNIQ);
+#endif
+#ifdef ENXIO
+ CASE(ENXIO);
+#endif
+#ifdef EOPENSTALE
+ CASE(EOPENSTALE);
+#endif
+#ifdef EOPNOTSUPP
+ CASE(EOPNOTSUPP);
+#endif
+#ifdef EOVERFLOW
+ CASE(EOVERFLOW);
+#endif
+#ifdef EOWNERDEAD
+ CASE(EOWNERDEAD);
+#endif
+#ifdef EPERM
+ CASE(EPERM);
+#endif
+#ifdef EPFNOSUPPORT
+ CASE(EPFNOSUPPORT);
+#endif
+#ifdef EPIPE
+ CASE(EPIPE);
+#endif
+#ifdef EPROBE_DEFER
+ CASE(EPROBE_DEFER);
+#endif
+#ifdef EPROTO
+ CASE(EPROTO);
+#endif
+#ifdef EPROTONOSUPPORT
+ CASE(EPROTONOSUPPORT);
+#endif
+#ifdef EPROTOTYPE
+ CASE(EPROTOTYPE);
+#endif
+#ifdef ERANGE
+ CASE(ERANGE);
+#endif
+#ifdef EREMCHG
+ CASE(EREMCHG);
+#endif
+#ifdef EREMOTE
+ CASE(EREMOTE);
+#endif
+#ifdef EREMOTEIO
+ CASE(EREMOTEIO);
+#endif
+#ifdef ERESTART
+ CASE(ERESTART);
+#endif
+#ifdef ERESTARTNOHAND
+ CASE(ERESTARTNOHAND);
+#endif
+#ifdef ERESTARTNOINTR
+ CASE(ERESTARTNOINTR);
+#endif
+#ifdef ERESTARTSYS
+ CASE(ERESTARTSYS);
+#endif
+#ifdef ERESTART_RESTARTBLOCK
+ CASE(ERESTART_RESTARTBLOCK);
+#endif
+#ifdef ERFKILL
+ CASE(ERFKILL);
+#endif
+#ifdef EROFS
+ CASE(EROFS);
+#endif
+#ifdef ESERVERFAULT
+ CASE(ESERVERFAULT);
+#endif
+#ifdef ESHUTDOWN
+ CASE(ESHUTDOWN);
+#endif
+#ifdef ESOCKTNOSUPPORT
+ CASE(ESOCKTNOSUPPORT);
+#endif
+#ifdef ESPIPE
+ CASE(ESPIPE);
+#endif
+#ifdef ESRCH
+ CASE(ESRCH);
+#endif
+#ifdef ESRMNT
+ CASE(ESRMNT);
+#endif
+#ifdef ESTALE
+ CASE(ESTALE);
+#endif
+#ifdef ESTRPIPE
+ CASE(ESTRPIPE);
+#endif
+#ifdef ETIME
+ CASE(ETIME);
+#endif
+#ifdef ETIMEDOUT
+ CASE(ETIMEDOUT);
+#endif
+#ifdef ETOOMANYREFS
+ CASE(ETOOMANYREFS);
+#endif
+#ifdef ETOOSMALL
+ CASE(ETOOSMALL);
+#endif
+#ifdef ETXTBSY
+ CASE(ETXTBSY);
+#endif
+#ifdef EUCLEAN
+ CASE(EUCLEAN);
+#endif
+#ifdef EUNATCH
+ CASE(EUNATCH);
+#endif
+#ifdef EUSERS
+ CASE(EUSERS);
+#endif
+#ifdef EXDEV
+ CASE(EXDEV);
+#endif
+#ifdef EXFULL
+ CASE(EXFULL);
+#endif
+ default: perror_msg_and_fail("unknown errno %d", errno);
+ }
+}