/*
Portability layer for error codes
Copyright (C) Amitay Isaacs 2018
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, see .
*/
/*
* These errors are as listed in POSIX standard
* IEEE Std 1003.1-2017 (Revision of IEEE Std 1003.1-2008)
*
* Error codes marked obsolete are removed (ENODATA, ENOSR, ENOSTR, ETIME)
*/
#include "replace.h"
struct {
const char *label;
int code;
} err_codes[] = {
{ "E2BIG", E2BIG },
{ "EACCES", EACCES },
{ "EADDRINUSE", EADDRINUSE },
{ "EADDRNOTAVAIL", EADDRNOTAVAIL },
{ "EAFNOSUPPORT", EAFNOSUPPORT },
{ "EAGAIN", EAGAIN },
{ "EALREADY", EALREADY },
{ "EBADF", EBADF },
{ "EBADMSG", EBADMSG },
{ "EBUSY", EBUSY },
{ "ECANCELED", ECANCELED },
{ "ECHILD", ECHILD },
{ "ECONNABORTED", ECONNABORTED },
{ "ECONNREFUSED", ECONNREFUSED },
{ "ECONNRESET", ECONNRESET },
{ "EDEADLK", EDEADLK },
{ "EDESTADDRREQ", EDESTADDRREQ },
{ "EDOM", EDOM },
{ "EDQUOT", EDQUOT },
{ "EEXIST", EEXIST },
{ "EFAULT", EFAULT },
{ "EFBIG", EFBIG },
{ "EHOSTUNREACH", EHOSTUNREACH },
{ "EIDRM", EIDRM },
{ "EILSEQ", EILSEQ },
{ "EINPROGRESS", EINPROGRESS },
{ "EINTR", EINTR },
{ "EINVAL", EINVAL },
{ "EIO", EIO },
{ "EISCONN", EISCONN },
{ "EISDIR", EISDIR },
{ "ELOOP", ELOOP },
{ "EMFILE", EMFILE },
{ "EMLINK", EMLINK },
{ "EMSGSIZE", EMSGSIZE },
{ "EMULTIHOP", EMULTIHOP },
{ "ENAMETOOLONG", ENAMETOOLONG },
{ "ENETDOWN", ENETDOWN },
{ "ENETRESET", ENETRESET },
{ "ENETUNREACH", ENETUNREACH },
{ "ENFILE", ENFILE },
{ "ENOBUFS", ENOBUFS },
{ "ENODEV", ENODEV },
{ "ENOENT", ENOENT },
{ "ENOEXEC", ENOEXEC },
{ "ENOLCK", ENOLCK },
{ "ENOLINK", ENOLINK },
{ "ENOMEM", ENOMEM },
{ "ENOMSG", ENOMSG },
{ "ENOPROTOOPT", ENOPROTOOPT },
{ "ENOSPC", ENOSPC },
{ "ENOSYS", ENOSYS },
{ "ENOTCONN", ENOTCONN },
{ "ENOTDIR", ENOTDIR },
{ "ENOTEMPTY", ENOTEMPTY },
{ "ENOTSOCK", ENOTSOCK },
{ "ENOTSUP", ENOTSUP },
{ "ENOTTY", ENOTTY },
{ "ENXIO", ENXIO },
{ "EOPNOTSUPP", EOPNOTSUPP },
{ "EOVERFLOW", EOVERFLOW },
{ "EPERM", EPERM },
{ "EPIPE", EPIPE },
{ "EPROTO", EPROTO },
{ "EPROTONOSUPPORT", EPROTONOSUPPORT },
{ "EPROTOTYPE", EPROTOTYPE },
{ "ERANGE", ERANGE },
{ "EROFS", EROFS },
{ "ESPIPE", ESPIPE },
{ "ESRCH", ESRCH },
{ "ESTALE", ESTALE },
{ "ETIMEDOUT", ETIMEDOUT },
{ "ETXTBSY", ETXTBSY },
{ "EWOULDBLOCK", EWOULDBLOCK },
{ "EXDEV", EXDEV },
};
static void dump(void)
{
size_t i;
for (i=0; i\n", argv[0]);
exit(1);
}
if (strcmp(argv[1], "dump") == 0) {
dump();
} else {
code = strtol(argv[1], &endptr, 0);
if (*endptr == '\0') {
match_code(code);
} else {
match_label(argv[1]);
}
}
exit(0);
}