lib: c: combine libc and ulibc
libc is now made up of several independent components, each of which is individually compiled into a static library. they are then all combined into a single shared library.
This commit is contained in:
342
lib/libc/core/string/strerror.c
Normal file
342
lib/libc/core/string/strerror.c
Normal file
@@ -0,0 +1,342 @@
|
||||
#include <errno.h>
|
||||
|
||||
const char *strerror(int errnum)
|
||||
{
|
||||
switch (errnum) {
|
||||
case SUCCESS:
|
||||
return "Success";
|
||||
case EPERM:
|
||||
return "Operation not permitted";
|
||||
case ENOENT:
|
||||
return "No such file or directory";
|
||||
case ESRCH:
|
||||
return "No such process";
|
||||
case EINTR:
|
||||
return "Interrupted system call";
|
||||
case EIO:
|
||||
return "Input/output error";
|
||||
case ENXIO:
|
||||
return "Device not configured";
|
||||
case E2BIG:
|
||||
return "Argument list too long";
|
||||
case ENOEXEC:
|
||||
return "Exec format error";
|
||||
case EBADF:
|
||||
return "Bad file descriptor";
|
||||
case ECHILD:
|
||||
return "No child processes";
|
||||
case EDEADLK:
|
||||
return "Resource deadlock avoided";
|
||||
case ENOMEM:
|
||||
return "Cannot allocate memory";
|
||||
case EACCES:
|
||||
return "Permission denied";
|
||||
case EFAULT:
|
||||
return "Bad address";
|
||||
case ENOTBLK:
|
||||
return "Block device required";
|
||||
case EBUSY:
|
||||
return "Resource busy";
|
||||
case EEXIST:
|
||||
return "File exists";
|
||||
case EXDEV:
|
||||
return "Cross-device link";
|
||||
case ENODEV:
|
||||
return "Operation not supported by device";
|
||||
case ENOTDIR:
|
||||
return "Not a directory";
|
||||
case EISDIR:
|
||||
return "Is a directory";
|
||||
case EINVAL:
|
||||
return "Invalid argument";
|
||||
case ENFILE:
|
||||
return "Too many open files in system";
|
||||
case EMFILE:
|
||||
return "Too many open files";
|
||||
case ENOTTY:
|
||||
return "Inappropriate ioctl for device";
|
||||
case ETXTBSY:
|
||||
return "Text file busy";
|
||||
case EFBIG:
|
||||
return "File too large";
|
||||
case ENOSPC:
|
||||
return "No space left on device";
|
||||
case ESPIPE:
|
||||
return "Illegal seek";
|
||||
case EROFS:
|
||||
return "Read-only file system";
|
||||
case EMLINK:
|
||||
return "Too many links";
|
||||
case EPIPE:
|
||||
return "Broken pipe";
|
||||
case EDOM:
|
||||
return "Numerical argument out of domain";
|
||||
case ERANGE:
|
||||
return "Result too large";
|
||||
case EAGAIN:
|
||||
return "Resource temporarily unavailable";
|
||||
case EINPROGRESS:
|
||||
return "Operation now in progress";
|
||||
case EALREADY:
|
||||
return "Operation already in progress";
|
||||
case ENOTSOCK:
|
||||
return "Socket operation on non-socket";
|
||||
case EDESTADDRREQ:
|
||||
return "Destination address required";
|
||||
case EMSGSIZE:
|
||||
return "Message too long";
|
||||
case EPROTOTYPE:
|
||||
return "Protocol wrong type for socket";
|
||||
case ENOPROTOOPT:
|
||||
return "Protocol not available";
|
||||
case EPROTONOSUPPORT:
|
||||
return "Protocol not supported";
|
||||
case ESOCKTNOSUPPORT:
|
||||
return "Socket type not supported";
|
||||
case ENOTSUP:
|
||||
return "Operation not supported";
|
||||
case EPFNOSUPPORT:
|
||||
return "Protocol family not supported";
|
||||
case EAFNOSUPPORT:
|
||||
return "Address family not supported by protocol family";
|
||||
case EADDRINUSE:
|
||||
return "Address already in use";
|
||||
case EADDRNOTAVAIL:
|
||||
return "Can't assign requested address";
|
||||
case ENETDOWN:
|
||||
return "Network is down";
|
||||
case ENETUNREACH:
|
||||
return "Network is unreachable";
|
||||
case ENETRESET:
|
||||
return "Network dropped connection on reset";
|
||||
case ECONNABORTED:
|
||||
return "Software caused connection abort";
|
||||
case ECONNRESET:
|
||||
return "Connection reset by peer";
|
||||
case ENOBUFS:
|
||||
return "No buffer space available";
|
||||
case EISCONN:
|
||||
return "Socket is already connected";
|
||||
case ENOTCONN:
|
||||
return "Socket is not connected";
|
||||
case ESHUTDOWN:
|
||||
return "Can't send after socket shutdown";
|
||||
case ETOOMANYREFS:
|
||||
return "Too many references: can't splice";
|
||||
case ETIMEDOUT:
|
||||
return "Operation timed out";
|
||||
case ECONNREFUSED:
|
||||
return "Connection refused";
|
||||
case ELOOP:
|
||||
return "Too many levels of symbolic links";
|
||||
case ENAMETOOLONG:
|
||||
return "File name too long";
|
||||
case EHOSTDOWN:
|
||||
return "Host is down";
|
||||
case EHOSTUNREACH:
|
||||
return "No route to host";
|
||||
case ENOTEMPTY:
|
||||
return "Directory not empty";
|
||||
case EPROCLIM:
|
||||
return "Too many processes";
|
||||
case EUSERS:
|
||||
return "Too many users";
|
||||
case EDQUOT:
|
||||
return "Disc quota exceeded";
|
||||
case ESTALE:
|
||||
return "Stale NFS file handle";
|
||||
case EREMOTE:
|
||||
return "Too many levels of remote in path";
|
||||
case EBADRPC:
|
||||
return "RPC struct is bad";
|
||||
case ERPCMISMATCH:
|
||||
return "RPC version wrong";
|
||||
case EPROGUNAVAIL:
|
||||
return "RPC prog. not avail";
|
||||
case EPROGMISMATCH:
|
||||
return "Program version wrong";
|
||||
case EPROCUNAVAIL:
|
||||
return "Bad procedure for program";
|
||||
case ENOLCK:
|
||||
return "No locks available";
|
||||
case ENOSYS:
|
||||
return "Function not implemented";
|
||||
case EFTYPE:
|
||||
return "Inappropriate file type or format";
|
||||
case EAUTH:
|
||||
return "Authentication error";
|
||||
case ENEEDAUTH:
|
||||
return "Need authenticator";
|
||||
case EPWROFF:
|
||||
return "Device power is off";
|
||||
case EDEVERR:
|
||||
return "Device error";
|
||||
case EOVERFLOW:
|
||||
return "Value too large to be stored in data type";
|
||||
case EBADEXEC:
|
||||
return "Bad executable (or shared library)";
|
||||
case EBADARCH:
|
||||
return "Bad CPU type in executable";
|
||||
case ESHLIBVERS:
|
||||
return "Shared library version mismatch";
|
||||
case EBADMACHO:
|
||||
return "Malformed Mach-o file";
|
||||
case ECANCELED:
|
||||
return "Operation canceled";
|
||||
case EIDRM:
|
||||
return "Identifier removed";
|
||||
case ENOMSG:
|
||||
return "No message of desired type";
|
||||
case EILSEQ:
|
||||
return "Illegal byte sequence";
|
||||
case ENOATTR:
|
||||
return "Attribute not found";
|
||||
case EBADMSG:
|
||||
return "Bad message";
|
||||
case EMULTIHOP:
|
||||
return "EMULTIHOP (Reserved)";
|
||||
case ENODATA:
|
||||
return "No message available on STREAM";
|
||||
case ENOLINK:
|
||||
return "ENOLINK (Reserved)";
|
||||
case ENOSR:
|
||||
return "No STREAM resources";
|
||||
case ENOSTR:
|
||||
return "Not a STREAM";
|
||||
case EPROTO:
|
||||
return "Protocol error";
|
||||
case ETIME:
|
||||
return "STREAM ioctl timeout";
|
||||
case EOPNOTSUPP:
|
||||
return "Operation not supported on socket";
|
||||
case ENOPOLICY:
|
||||
return "Policy not found";
|
||||
case ENOTRECOVERABLE:
|
||||
return "State not recoverable";
|
||||
case EOWNERDEAD:
|
||||
return "Previous owner died";
|
||||
case EQFULL:
|
||||
return "Interface output queue is full";
|
||||
default:
|
||||
return "Unknown error";
|
||||
}
|
||||
}
|
||||
|
||||
#define ENUM_STR(x) \
|
||||
case x: \
|
||||
return #x
|
||||
|
||||
const char *strerror_code(int errnum)
|
||||
{
|
||||
switch (errnum) {
|
||||
ENUM_STR(SUCCESS);
|
||||
ENUM_STR(EPERM);
|
||||
ENUM_STR(ENOENT);
|
||||
ENUM_STR(ESRCH);
|
||||
ENUM_STR(EINTR);
|
||||
ENUM_STR(EIO);
|
||||
ENUM_STR(ENXIO);
|
||||
ENUM_STR(E2BIG);
|
||||
ENUM_STR(ENOEXEC);
|
||||
ENUM_STR(EBADF);
|
||||
ENUM_STR(ECHILD);
|
||||
ENUM_STR(EDEADLK);
|
||||
ENUM_STR(ENOMEM);
|
||||
ENUM_STR(EACCES);
|
||||
ENUM_STR(EFAULT);
|
||||
ENUM_STR(ENOTBLK);
|
||||
ENUM_STR(EBUSY);
|
||||
ENUM_STR(EEXIST);
|
||||
ENUM_STR(EXDEV);
|
||||
ENUM_STR(ENODEV);
|
||||
ENUM_STR(ENOTDIR);
|
||||
ENUM_STR(EISDIR);
|
||||
ENUM_STR(EINVAL);
|
||||
ENUM_STR(ENFILE);
|
||||
ENUM_STR(EMFILE);
|
||||
ENUM_STR(ENOTTY);
|
||||
ENUM_STR(ETXTBSY);
|
||||
ENUM_STR(EFBIG);
|
||||
ENUM_STR(ENOSPC);
|
||||
ENUM_STR(ESPIPE);
|
||||
ENUM_STR(EROFS);
|
||||
ENUM_STR(EMLINK);
|
||||
ENUM_STR(EPIPE);
|
||||
ENUM_STR(EDOM);
|
||||
ENUM_STR(ERANGE);
|
||||
ENUM_STR(EAGAIN);
|
||||
ENUM_STR(EINPROGRESS);
|
||||
ENUM_STR(EALREADY);
|
||||
ENUM_STR(ENOTSOCK);
|
||||
ENUM_STR(EDESTADDRREQ);
|
||||
ENUM_STR(EMSGSIZE);
|
||||
ENUM_STR(EPROTOTYPE);
|
||||
ENUM_STR(ENOPROTOOPT);
|
||||
ENUM_STR(EPROTONOSUPPORT);
|
||||
ENUM_STR(ESOCKTNOSUPPORT);
|
||||
ENUM_STR(ENOTSUP);
|
||||
ENUM_STR(EPFNOSUPPORT);
|
||||
ENUM_STR(EAFNOSUPPORT);
|
||||
ENUM_STR(EADDRINUSE);
|
||||
ENUM_STR(EADDRNOTAVAIL);
|
||||
ENUM_STR(ENETDOWN);
|
||||
ENUM_STR(ENETUNREACH);
|
||||
ENUM_STR(ENETRESET);
|
||||
ENUM_STR(ECONNABORTED);
|
||||
ENUM_STR(ECONNRESET);
|
||||
ENUM_STR(ENOBUFS);
|
||||
ENUM_STR(EISCONN);
|
||||
ENUM_STR(ENOTCONN);
|
||||
ENUM_STR(ESHUTDOWN);
|
||||
ENUM_STR(ETOOMANYREFS);
|
||||
ENUM_STR(ETIMEDOUT);
|
||||
ENUM_STR(ECONNREFUSED);
|
||||
ENUM_STR(ELOOP);
|
||||
ENUM_STR(ENAMETOOLONG);
|
||||
ENUM_STR(EHOSTDOWN);
|
||||
ENUM_STR(EHOSTUNREACH);
|
||||
ENUM_STR(ENOTEMPTY);
|
||||
ENUM_STR(EPROCLIM);
|
||||
ENUM_STR(EUSERS);
|
||||
ENUM_STR(EDQUOT);
|
||||
ENUM_STR(ESTALE);
|
||||
ENUM_STR(EREMOTE);
|
||||
ENUM_STR(EBADRPC);
|
||||
ENUM_STR(ERPCMISMATCH);
|
||||
ENUM_STR(EPROGUNAVAIL);
|
||||
ENUM_STR(EPROGMISMATCH);
|
||||
ENUM_STR(EPROCUNAVAIL);
|
||||
ENUM_STR(ENOLCK);
|
||||
ENUM_STR(ENOSYS);
|
||||
ENUM_STR(EFTYPE);
|
||||
ENUM_STR(EAUTH);
|
||||
ENUM_STR(ENEEDAUTH);
|
||||
ENUM_STR(EPWROFF);
|
||||
ENUM_STR(EDEVERR);
|
||||
ENUM_STR(EOVERFLOW);
|
||||
ENUM_STR(EBADEXEC);
|
||||
ENUM_STR(EBADARCH);
|
||||
ENUM_STR(ESHLIBVERS);
|
||||
ENUM_STR(EBADMACHO);
|
||||
ENUM_STR(ECANCELED);
|
||||
ENUM_STR(EIDRM);
|
||||
ENUM_STR(ENOMSG);
|
||||
ENUM_STR(EILSEQ);
|
||||
ENUM_STR(ENOATTR);
|
||||
ENUM_STR(EBADMSG);
|
||||
ENUM_STR(EMULTIHOP);
|
||||
ENUM_STR(ENODATA);
|
||||
ENUM_STR(ENOLINK);
|
||||
ENUM_STR(ENOSR);
|
||||
ENUM_STR(ENOSTR);
|
||||
ENUM_STR(EPROTO);
|
||||
ENUM_STR(ETIME);
|
||||
ENUM_STR(EOPNOTSUPP);
|
||||
ENUM_STR(ENOPOLICY);
|
||||
ENUM_STR(ENOTRECOVERABLE);
|
||||
ENUM_STR(EOWNERDEAD);
|
||||
ENUM_STR(EQFULL);
|
||||
default:
|
||||
return "";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user