mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
224 lines
3.7 KiB
224 lines
3.7 KiB
// SPDX-License-Identifier: GPL-2.0 |
|
#include <linux/build_bug.h> |
|
#include <linux/errno.h> |
|
#include <linux/errname.h> |
|
#include <linux/kernel.h> |
|
#include <linux/math.h> |
|
|
|
/* |
|
* Ensure these tables do not accidentally become gigantic if some |
|
* huge errno makes it in. On most architectures, the first table will |
|
* only have about 140 entries, but mips and parisc have more sparsely |
|
* allocated errnos (with EHWPOISON = 257 on parisc, and EDQUOT = 1133 |
|
* on mips), so this wastes a bit of space on those - though we |
|
* special case the EDQUOT case. |
|
*/ |
|
#define E(err) [err + BUILD_BUG_ON_ZERO(err <= 0 || err > 300)] = "-" #err |
|
static const char *names_0[] = { |
|
E(E2BIG), |
|
E(EACCES), |
|
E(EADDRINUSE), |
|
E(EADDRNOTAVAIL), |
|
E(EADV), |
|
E(EAFNOSUPPORT), |
|
E(EALREADY), |
|
E(EBADE), |
|
E(EBADF), |
|
E(EBADFD), |
|
E(EBADMSG), |
|
E(EBADR), |
|
E(EBADRQC), |
|
E(EBADSLT), |
|
E(EBFONT), |
|
E(EBUSY), |
|
#ifdef ECANCELLED |
|
E(ECANCELLED), |
|
#endif |
|
E(ECHILD), |
|
E(ECHRNG), |
|
E(ECOMM), |
|
E(ECONNABORTED), |
|
E(ECONNRESET), |
|
E(EDEADLOCK), |
|
E(EDESTADDRREQ), |
|
E(EDOM), |
|
E(EDOTDOT), |
|
#ifndef CONFIG_MIPS |
|
E(EDQUOT), |
|
#endif |
|
E(EEXIST), |
|
E(EFAULT), |
|
E(EFBIG), |
|
E(EHOSTDOWN), |
|
E(EHOSTUNREACH), |
|
E(EHWPOISON), |
|
E(EIDRM), |
|
E(EILSEQ), |
|
#ifdef EINIT |
|
E(EINIT), |
|
#endif |
|
E(EINPROGRESS), |
|
E(EINTR), |
|
E(EINVAL), |
|
E(EIO), |
|
E(EISCONN), |
|
E(EISDIR), |
|
E(EISNAM), |
|
E(EKEYEXPIRED), |
|
E(EKEYREJECTED), |
|
E(EKEYREVOKED), |
|
E(EL2HLT), |
|
E(EL2NSYNC), |
|
E(EL3HLT), |
|
E(EL3RST), |
|
E(ELIBACC), |
|
E(ELIBBAD), |
|
E(ELIBEXEC), |
|
E(ELIBMAX), |
|
E(ELIBSCN), |
|
E(ELNRNG), |
|
E(ELOOP), |
|
E(EMEDIUMTYPE), |
|
E(EMFILE), |
|
E(EMLINK), |
|
E(EMSGSIZE), |
|
E(EMULTIHOP), |
|
E(ENAMETOOLONG), |
|
E(ENAVAIL), |
|
E(ENETDOWN), |
|
E(ENETRESET), |
|
E(ENETUNREACH), |
|
E(ENFILE), |
|
E(ENOANO), |
|
E(ENOBUFS), |
|
E(ENOCSI), |
|
E(ENODATA), |
|
E(ENODEV), |
|
E(ENOENT), |
|
E(ENOEXEC), |
|
E(ENOKEY), |
|
E(ENOLCK), |
|
E(ENOLINK), |
|
E(ENOMEDIUM), |
|
E(ENOMEM), |
|
E(ENOMSG), |
|
E(ENONET), |
|
E(ENOPKG), |
|
E(ENOPROTOOPT), |
|
E(ENOSPC), |
|
E(ENOSR), |
|
E(ENOSTR), |
|
#ifdef ENOSYM |
|
E(ENOSYM), |
|
#endif |
|
E(ENOSYS), |
|
E(ENOTBLK), |
|
E(ENOTCONN), |
|
E(ENOTDIR), |
|
E(ENOTEMPTY), |
|
E(ENOTNAM), |
|
E(ENOTRECOVERABLE), |
|
E(ENOTSOCK), |
|
E(ENOTTY), |
|
E(ENOTUNIQ), |
|
E(ENXIO), |
|
E(EOPNOTSUPP), |
|
E(EOVERFLOW), |
|
E(EOWNERDEAD), |
|
E(EPERM), |
|
E(EPFNOSUPPORT), |
|
E(EPIPE), |
|
#ifdef EPROCLIM |
|
E(EPROCLIM), |
|
#endif |
|
E(EPROTO), |
|
E(EPROTONOSUPPORT), |
|
E(EPROTOTYPE), |
|
E(ERANGE), |
|
E(EREMCHG), |
|
#ifdef EREMDEV |
|
E(EREMDEV), |
|
#endif |
|
E(EREMOTE), |
|
E(EREMOTEIO), |
|
#ifdef EREMOTERELEASE |
|
E(EREMOTERELEASE), |
|
#endif |
|
E(ERESTART), |
|
E(ERFKILL), |
|
E(EROFS), |
|
#ifdef ERREMOTE |
|
E(ERREMOTE), |
|
#endif |
|
E(ESHUTDOWN), |
|
E(ESOCKTNOSUPPORT), |
|
E(ESPIPE), |
|
E(ESRCH), |
|
E(ESRMNT), |
|
E(ESTALE), |
|
E(ESTRPIPE), |
|
E(ETIME), |
|
E(ETIMEDOUT), |
|
E(ETOOMANYREFS), |
|
E(ETXTBSY), |
|
E(EUCLEAN), |
|
E(EUNATCH), |
|
E(EUSERS), |
|
E(EXDEV), |
|
E(EXFULL), |
|
|
|
E(ECANCELED), /* ECANCELLED */ |
|
E(EAGAIN), /* EWOULDBLOCK */ |
|
E(ECONNREFUSED), /* EREFUSED */ |
|
E(EDEADLK), /* EDEADLOCK */ |
|
}; |
|
#undef E |
|
|
|
#define E(err) [err - 512 + BUILD_BUG_ON_ZERO(err < 512 || err > 550)] = "-" #err |
|
static const char *names_512[] = { |
|
E(ERESTARTSYS), |
|
E(ERESTARTNOINTR), |
|
E(ERESTARTNOHAND), |
|
E(ENOIOCTLCMD), |
|
E(ERESTART_RESTARTBLOCK), |
|
E(EPROBE_DEFER), |
|
E(EOPENSTALE), |
|
E(ENOPARAM), |
|
|
|
E(EBADHANDLE), |
|
E(ENOTSYNC), |
|
E(EBADCOOKIE), |
|
E(ENOTSUPP), |
|
E(ETOOSMALL), |
|
E(ESERVERFAULT), |
|
E(EBADTYPE), |
|
E(EJUKEBOX), |
|
E(EIOCBQUEUED), |
|
E(ERECALLCONFLICT), |
|
}; |
|
#undef E |
|
|
|
static const char *__errname(unsigned err) |
|
{ |
|
if (err < ARRAY_SIZE(names_0)) |
|
return names_0[err]; |
|
if (err >= 512 && err - 512 < ARRAY_SIZE(names_512)) |
|
return names_512[err - 512]; |
|
/* But why? */ |
|
if (IS_ENABLED(CONFIG_MIPS) && err == EDQUOT) /* 1133 */ |
|
return "-EDQUOT"; |
|
return NULL; |
|
} |
|
|
|
/* |
|
* errname(EIO) -> "EIO" |
|
* errname(-EIO) -> "-EIO" |
|
*/ |
|
const char *errname(int err) |
|
{ |
|
const char *name = __errname(abs(err)); |
|
if (!name) |
|
return NULL; |
|
|
|
return err > 0 ? name + 1 : name; |
|
}
|
|
|