13e12c5d1SDavid du Colombier /*
23e12c5d1SDavid du Colombier * pANS stdio -- strerror (not really in stdio)
3219b2ee8SDavid du Colombier *
4219b2ee8SDavid du Colombier * Shouldn't really call this sys_errlist or make it
5219b2ee8SDavid du Colombier * externally visible, but too many programs in X assume it...
63e12c5d1SDavid du Colombier */
72d069feaSDavid du Colombier #include <string.h>
83e12c5d1SDavid du Colombier #include <errno.h>
93e12c5d1SDavid du Colombier
103e12c5d1SDavid du Colombier #include "iolib.h"
112d069feaSDavid du Colombier
12219b2ee8SDavid du Colombier char *sys_errlist[] = {
133e12c5d1SDavid du Colombier "Error 0",
143e12c5d1SDavid du Colombier "Too big",
153e12c5d1SDavid du Colombier "Access denied",
163e12c5d1SDavid du Colombier "Try again",
173e12c5d1SDavid du Colombier "Bad file number",
183e12c5d1SDavid du Colombier "In use",
193e12c5d1SDavid du Colombier "No children",
203e12c5d1SDavid du Colombier "Deadlock",
213e12c5d1SDavid du Colombier "File exists",
223e12c5d1SDavid du Colombier "Bad address",
233e12c5d1SDavid du Colombier "File too large",
243e12c5d1SDavid du Colombier "Interrupted system call",
253e12c5d1SDavid du Colombier "Invalid argument",
263e12c5d1SDavid du Colombier "I/O error",
273e12c5d1SDavid du Colombier "Is a directory",
283e12c5d1SDavid du Colombier "Too many open files",
293e12c5d1SDavid du Colombier "Too many links",
303e12c5d1SDavid du Colombier "Name too long",
313e12c5d1SDavid du Colombier "File table overflow",
323e12c5d1SDavid du Colombier "No such device",
333e12c5d1SDavid du Colombier "No such file or directory",
343e12c5d1SDavid du Colombier "Exec format error",
353e12c5d1SDavid du Colombier "Not enough locks",
363e12c5d1SDavid du Colombier "Not enough memory",
373e12c5d1SDavid du Colombier "No space left on device",
383e12c5d1SDavid du Colombier "No such system call",
393e12c5d1SDavid du Colombier "Not a directory",
403e12c5d1SDavid du Colombier "Directory not empty",
4141dd6b47SDavid du Colombier "Inappropriate ioctl",
4241dd6b47SDavid du Colombier "No such device or address",
433e12c5d1SDavid du Colombier "Permission denied",
443e12c5d1SDavid du Colombier "Broken pipe",
453e12c5d1SDavid du Colombier "Read-only file system",
4641dd6b47SDavid du Colombier "Illegal seek",
4741dd6b47SDavid du Colombier "No such process",
483e12c5d1SDavid du Colombier "Cross-device link",
4941dd6b47SDavid du Colombier
5041dd6b47SDavid du Colombier /* bsd networking software */
51219b2ee8SDavid du Colombier "Not a socket",
5241dd6b47SDavid du Colombier "Protocol not supported", /* EPROTONOSUPPORT, EPROTOTYPE */
5341dd6b47SDavid du Colombier /* "Protocol wrong type for socket", /* EPROTOTYPE */
54219b2ee8SDavid du Colombier "Connection refused",
55219b2ee8SDavid du Colombier "Address family not supported",
56219b2ee8SDavid du Colombier "No buffers",
57219b2ee8SDavid du Colombier "OP not supported",
58219b2ee8SDavid du Colombier "Address in use",
59219b2ee8SDavid du Colombier "Destination address required",
60219b2ee8SDavid du Colombier "Message size",
61219b2ee8SDavid du Colombier "Protocol option not supported",
62219b2ee8SDavid du Colombier "Socket option not supported",
6341dd6b47SDavid du Colombier "Protocol family not supported", /* EPFNOSUPPORT */
64219b2ee8SDavid du Colombier "Address not available",
65219b2ee8SDavid du Colombier "Network down",
66219b2ee8SDavid du Colombier "Network unreachable",
67219b2ee8SDavid du Colombier "Network reset",
68219b2ee8SDavid du Colombier "Connection aborted",
69219b2ee8SDavid du Colombier "Connected",
70219b2ee8SDavid du Colombier "Not connected",
71219b2ee8SDavid du Colombier "Shut down",
72219b2ee8SDavid du Colombier "Too many references",
73219b2ee8SDavid du Colombier "Timed out",
74219b2ee8SDavid du Colombier "Host down",
7541dd6b47SDavid du Colombier "Host unreachable",
7641dd6b47SDavid du Colombier "Unknown error", /* EGREG */
7741dd6b47SDavid du Colombier
7841dd6b47SDavid du Colombier /* These added in 1003.1b-1993 */
797dd7cddfSDavid du Colombier "Operation canceled",
807dd7cddfSDavid du Colombier "Operation in progress"
813e12c5d1SDavid du Colombier };
82219b2ee8SDavid du Colombier #define _IO_nerr (sizeof sys_errlist/sizeof sys_errlist[0])
83219b2ee8SDavid du Colombier int sys_nerr = _IO_nerr;
8459c21d95SDavid du Colombier extern char _plan9err[];
85219b2ee8SDavid du Colombier
862d069feaSDavid du Colombier char *
strerror(int n)872d069feaSDavid du Colombier strerror(int n)
882d069feaSDavid du Colombier {
8959c21d95SDavid du Colombier if(n == EPLAN9)
9059c21d95SDavid du Colombier return _plan9err;
913e12c5d1SDavid du Colombier if(n >= 0 && n < _IO_nerr)
92219b2ee8SDavid du Colombier return sys_errlist[n];
933e12c5d1SDavid du Colombier if(n == EDOM)
943e12c5d1SDavid du Colombier return "Domain error";
953e12c5d1SDavid du Colombier else if(n == ERANGE)
963e12c5d1SDavid du Colombier return "Range error";
973e12c5d1SDavid du Colombier else
983e12c5d1SDavid du Colombier return "Unknown error";
993e12c5d1SDavid du Colombier }
1002d069feaSDavid du Colombier
1012d069feaSDavid du Colombier char *
strerror_r(int n,char * buf,int len)1022d069feaSDavid du Colombier strerror_r(int n, char *buf, int len)
1032d069feaSDavid du Colombier {
1042d069feaSDavid du Colombier strncpy(buf, strerror(n), len);
1052d069feaSDavid du Colombier buf[len-1] = 0;
106*027288c8SDavid du Colombier return buf;
1072d069feaSDavid du Colombier }
108