mirror of
https://github.com/diegocr/libnix.git
synced 2026-09-12 11:40:30 +00:00
183 lines
6.5 KiB
C
183 lines
6.5 KiB
C
#include <stdlib.h>
|
|
|
|
static const char *sys_errlist[] = {
|
|
"Undefined error",
|
|
|
|
"Operation not permitted", // 1: EPERM
|
|
"No such file or directory", // 2: ENOENT
|
|
"No such process", // 3: ESRCH
|
|
"Interrupted system call", // 4: EINTR
|
|
"I/O error", // 5: EIO
|
|
"No such device or address", // 6: ENXIO
|
|
"Argument list too long", // 7: E2BIG
|
|
"Exec format error", // 8: ENOEXEC
|
|
"Bad file number", // 9: EBADF
|
|
"No child processes", // 10: ECHILD
|
|
"Try again", // 11: EAGAIN
|
|
"Out of memory", // 12: ENOMEM
|
|
"Permission denied", // 13: EACCES
|
|
"Bad address", // 14: EFAULT
|
|
"Block device required", // 15: ENOTBLK
|
|
"Device or resource busy", // 16: EBUSY
|
|
"File exists", // 17: EEXIST
|
|
"Cross-device link", // 18: EXDEV
|
|
"No such device", // 19: ENODEV
|
|
"Not a directory", // 20: ENOTDIR
|
|
"Is a directory", // 21: EISDIR
|
|
"Invalid argument", // 22: EINVAL
|
|
"File table overflow", // 23: ENFILE
|
|
"Too many open files", // 24: EMFILE
|
|
"Not a typewriter", // 25: ENOTTY
|
|
"Text file busy", // 26: ETXTBSY
|
|
"File too large", // 27: EFBIG
|
|
"No space left on device", // 28: ENOSPC
|
|
"Illegal seek", // 29: ESPIPE
|
|
"Read-only file system", // 30: EROFS
|
|
"Too many links", // 31: EMLINK
|
|
"Broken pipe", // 32: EPIPE
|
|
|
|
/* math software */
|
|
"Math argument out of domain of func", // 33: EDOM
|
|
"Math result not representable", // 34: ERANGE
|
|
|
|
/* non-blocking and interrupt i/o */
|
|
"Resource temporarily unavailable", // 35: EAGAIN
|
|
"Operation now in progress", // 36: EINPROGRESS
|
|
"Operation already in progress", // 37: EALREADY
|
|
|
|
/* ipc/network software -- argument errors */
|
|
"Socket operation on non-socket", // 38: ENOTSOCK
|
|
"Destination address required", // 39: EDESTADDRREQ
|
|
"Message too long", // 40: EMSGSIZE
|
|
"Protocol wrong type for socket", // 41: EPROTOTYPE
|
|
"Protocol not available", // 42: ENOPROTOOPT
|
|
"Protocol not supported", // 43: EPROTONOSUPPORT
|
|
"Socket type not supported", // 44: ESOCKTNOSUPPORT
|
|
"Operation not supported", // 45: EOPNOTSUPP
|
|
"Protocol family not supported", // 46: EPFNOSUPPORT
|
|
"Address family not supported by protocol family", // 47: EAFNOSUPPORT
|
|
"Address already in use", // 48: EADDRINUSE
|
|
"Can't assign requested address", // 49: EADDRNOTAVAIL
|
|
|
|
/* ipc/network software -- operational errors */
|
|
"Network is down", // 50: ENETDOWN
|
|
"Network is unreachable", // 51: ENETUNREACH
|
|
"Network dropped connection on reset", // 52: ENETRESET
|
|
"Software caused connection abort", // 53: ECONNABORTED
|
|
"Connection reset by peer", // 54: ECONNRESET
|
|
"No buffer space available", // 55: ENOBUFS
|
|
"Socket is already connected", // 56: EISCONN
|
|
"Socket is not connected", // 57: ENOTCONN
|
|
"Can't send after socket shutdown", // 58: ESHUTDOWN
|
|
"Too many references: can't splice", // 59: ETOOMANYREFS
|
|
"Operation timed out", // 60: ETIMEDOUT
|
|
"Connection refused", // 61: ECONNREFUSED
|
|
|
|
"Too many levels of symbolic links", // 62: ELOOP
|
|
"File name too long", // 63: ENAMETOOLONG
|
|
|
|
/* should be rearranged */
|
|
"Host is down", // 64: EHOSTDOWN
|
|
"No route to host", // 65: EHOSTUNREACH
|
|
"Directory not empty", // 66: ENOTEMPTY
|
|
|
|
/* quotas & mush */
|
|
"Too many processes", // 67: EPROCLIM
|
|
"Too many users", // 68: EUSERS
|
|
"Disc quota exceeded", // 69: EDQUOT
|
|
|
|
/* Network File System */
|
|
"Stale NFS file handle", // 70: ESTALE
|
|
"Too many levels of remote in path", // 71: EREMOTE
|
|
"RPC struct is bad", // 72: EBADRPC
|
|
"RPC version wrong", // 73: ERPCMISMATCH
|
|
"RPC prog. not avail", // 74: EPROGUNAVAIL
|
|
"Program version wrong", // 75: EPROGMISMATCH
|
|
"Bad procedure for program", // 76: EPROCUNAVAIL
|
|
|
|
"No locks available", // 77: ENOLCK
|
|
"Function not implemented", // 78: ENOSYS
|
|
|
|
"Inappropriate file type or format", // 79: EFTYPE
|
|
|
|
/* others.. */
|
|
"corrupted shared library", // 80: ELIBBAD
|
|
"section corrupted", // 81: ELIBSCN
|
|
"link overflow", // 82: ELIBMAX
|
|
"exec error", // 83: ELIBEXEC
|
|
|
|
"Illegal byte sequence", // 84: EILSEQ
|
|
"Interrupted system call should be restarted", // 85: ERESTART
|
|
"Streams pipe error", // 86: ESTRPIPE
|
|
"Too many users", // 87: EUSERS
|
|
"Socket operation on non-socket", // 88: ENOTSOCK
|
|
"Destination address required", // 89: EDESTADDRREQ
|
|
"Message too long", // 90: EMSGSIZE
|
|
"Protocol wrong type for socket", // 91: EPROTOTYPE
|
|
"Protocol not available", // 92: ENOPROTOOPT
|
|
"Protocol not supported", // 93: EPROTONOSUPPORT
|
|
"Socket type not supported", // 94: ESOCKTNOSUPPORT
|
|
"Operation not supported on transport endpoint", // 95: EOPNOTSUPP
|
|
"Protocol family not supported", // 96: EPFNOSUPPORT
|
|
"Address family not supported by protocol", // 97: EAFNOSUPPORT
|
|
"Address already in use", // 98: EADDRINUSE
|
|
"Cannot assign requested address", // 99: EADDRNOTAVAIL
|
|
"Network is down", // 100: ENETDOWN
|
|
"Network is unreachable", // 101: ENETUNREACH
|
|
"Network dropped connection because of reset", // 102: ENETRESET
|
|
"Software caused connection abort", // 103: ECONNABORTED
|
|
"Connection reset by peer", // 104: ECONNRESET
|
|
"No buffer space available", // 105: ENOBUFS
|
|
"Transport endpoint is already connected", // 106: EISCONN
|
|
"Transport endpoint is not connected", // 107: ENOTCONN
|
|
"Cannot send after transport endpoint shutdown", // 108: ESHUTDOWN
|
|
"Too many references: cannot splice", // 109: ETOOMANYREFS
|
|
"Connection timed out", // 110: ETIMEDOUT
|
|
"Connection refused", // 111: ECONNREFUSED
|
|
"Host is down", // 112: EHOSTDOWN
|
|
"No route to host", // 113: EHOSTUNREACH
|
|
"Operation already in progress", // 114: EALREADY
|
|
"Operation now in progress", // 115: EINPROGRESS
|
|
"Stale NFS file handle", // 116: ESTALE
|
|
"Structure needs cleaning", // 117: EUCLEAN
|
|
"Not a XENIX named type file", // 118: ENOTNAM
|
|
"No XENIX semaphores available", // 119: ENAVAIL
|
|
"Is a named type file", // 120: EISNAM
|
|
"Remote I/O error", // 121: EREMOTEIO
|
|
"Quota exceeded", // 122: EDQUOT
|
|
|
|
"No medium found", // 123: ENOMEDIUM
|
|
"Wrong medium type", // 124: EMEDIUMTYPE
|
|
"Operation Canceled", // 125: ECANCELED
|
|
"Required key not available", // 126: ENOKEY
|
|
"Key has expired", // 127: EKEYEXPIRED
|
|
"Key has been revoked", // 128: EKEYREVOKED
|
|
"Key was rejected by service", // 129: EKEYREJECTED
|
|
|
|
/* for robust mutexes */
|
|
"Owner died", // 130: EOWNERDEAD
|
|
"State not recoverable", // 131: ENOTRECOVERABLE
|
|
};
|
|
|
|
static const int sys_nerr=sizeof(sys_errlist)/sizeof(sys_errlist[0]);
|
|
extern int errno;
|
|
extern void __seterrno(void);
|
|
|
|
char *strerror(int eno)
|
|
{ if(eno<1||eno>=sys_nerr)
|
|
{ int saved_errno=errno;
|
|
__seterrno();
|
|
eno = errno;
|
|
errno=saved_errno; }
|
|
return(char *)sys_errlist[eno];
|
|
}
|
|
|
|
char *strerror_r(int errno,char *buffer,size_t buflen)
|
|
{ char *b=buffer,*ptr=strerror(errno);
|
|
while(buflen-- > 1)
|
|
{ if(!(*b++ = *ptr++))
|
|
break;
|
|
} *b = '\0';
|
|
return buffer;
|
|
}
|