/*
 * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
 * Copyright (c) 2016-2017 The strace developers.
 * 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);
	}
}
