xref: /plan9-contrib/sys/src/ape/lib/ap/stdio/strerror.c (revision 41dd6b4775bcffc7275c15aee7294944759a2ea7)
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  */
73e12c5d1SDavid du Colombier #include <errno.h>
83e12c5d1SDavid du Colombier 
93e12c5d1SDavid du Colombier #include "iolib.h"
10219b2ee8SDavid du Colombier char *sys_errlist[] = {
113e12c5d1SDavid du Colombier 	"Error 0",
123e12c5d1SDavid du Colombier 	"Too big",
133e12c5d1SDavid du Colombier 	"Access denied",
143e12c5d1SDavid du Colombier 	"Try again",
153e12c5d1SDavid du Colombier 	"Bad file number",
163e12c5d1SDavid du Colombier 	"In use",
173e12c5d1SDavid du Colombier 	"No children",
183e12c5d1SDavid du Colombier 	"Deadlock",
193e12c5d1SDavid du Colombier 	"File exists",
203e12c5d1SDavid du Colombier 	"Bad address",
213e12c5d1SDavid du Colombier 	"File too large",
223e12c5d1SDavid du Colombier 	"Interrupted system call",
233e12c5d1SDavid du Colombier 	"Invalid argument",
243e12c5d1SDavid du Colombier 	"I/O error",
253e12c5d1SDavid du Colombier 	"Is a directory",
263e12c5d1SDavid du Colombier 	"Too many open files",
273e12c5d1SDavid du Colombier 	"Too many links",
283e12c5d1SDavid du Colombier 	"Name too long",
293e12c5d1SDavid du Colombier 	"File table overflow",
303e12c5d1SDavid du Colombier 	"No such device",
313e12c5d1SDavid du Colombier 	"No such file or directory",
323e12c5d1SDavid du Colombier 	"Exec format error",
333e12c5d1SDavid du Colombier 	"Not enough locks",
343e12c5d1SDavid du Colombier 	"Not enough memory",
353e12c5d1SDavid du Colombier 	"No space left on device",
363e12c5d1SDavid du Colombier 	"No such system call",
373e12c5d1SDavid du Colombier 	"Not a directory",
383e12c5d1SDavid du Colombier 	"Directory not empty",
39*41dd6b47SDavid du Colombier 	"Inappropriate ioctl",
40*41dd6b47SDavid du Colombier 	"No such device or address",
413e12c5d1SDavid du Colombier 	"Permission denied",
423e12c5d1SDavid du Colombier 	"Broken pipe",
433e12c5d1SDavid du Colombier 	"Read-only file system",
44*41dd6b47SDavid du Colombier 	"Illegal seek",
45*41dd6b47SDavid du Colombier 	"No such process",
463e12c5d1SDavid du Colombier 	"Cross-device link",
47*41dd6b47SDavid du Colombier 
48*41dd6b47SDavid du Colombier 	/* bsd networking software */
49219b2ee8SDavid du Colombier 	"Not a socket",
50*41dd6b47SDavid du Colombier 	"Protocol not supported",	/* EPROTONOSUPPORT, EPROTOTYPE */
51*41dd6b47SDavid du Colombier /*	"Protocol wrong type for socket",	/* EPROTOTYPE */
52219b2ee8SDavid du Colombier 	"Connection refused",
53219b2ee8SDavid du Colombier 	"Address family not supported",
54219b2ee8SDavid du Colombier 	"No buffers",
55219b2ee8SDavid du Colombier 	"OP not supported",
56219b2ee8SDavid du Colombier 	"Address in use",
57219b2ee8SDavid du Colombier 	"Destination address required",
58219b2ee8SDavid du Colombier 	"Message size",
59219b2ee8SDavid du Colombier 	"Protocol option not supported",
60219b2ee8SDavid du Colombier 	"Socket option not supported",
61*41dd6b47SDavid du Colombier 	"Protocol family not supported",	/* EPFNOSUPPORT */
62219b2ee8SDavid du Colombier 	"Address not available",
63219b2ee8SDavid du Colombier 	"Network down",
64219b2ee8SDavid du Colombier 	"Network unreachable",
65219b2ee8SDavid du Colombier 	"Network reset",
66219b2ee8SDavid du Colombier 	"Connection aborted",
67219b2ee8SDavid du Colombier 	"Connected",
68219b2ee8SDavid du Colombier 	"Not connected",
69219b2ee8SDavid du Colombier 	"Shut down",
70219b2ee8SDavid du Colombier 	"Too many references",
71219b2ee8SDavid du Colombier 	"Timed out",
72219b2ee8SDavid du Colombier 	"Host down",
73*41dd6b47SDavid du Colombier 	"Host unreachable",
74*41dd6b47SDavid du Colombier 	"Unknown error",		/* EGREG */
75*41dd6b47SDavid du Colombier 
76*41dd6b47SDavid du Colombier 	/* These added in 1003.1b-1993 */
777dd7cddfSDavid du Colombier 	"Operation canceled",
787dd7cddfSDavid du Colombier 	"Operation in progress"
793e12c5d1SDavid du Colombier };
80219b2ee8SDavid du Colombier #define	_IO_nerr	(sizeof sys_errlist/sizeof sys_errlist[0])
81219b2ee8SDavid du Colombier int sys_nerr = _IO_nerr;
8259c21d95SDavid du Colombier extern char _plan9err[];
83219b2ee8SDavid du Colombier 
843e12c5d1SDavid du Colombier char *strerror(int n){
8559c21d95SDavid du Colombier 	if(n == EPLAN9)
8659c21d95SDavid du Colombier 		return _plan9err;
873e12c5d1SDavid du Colombier 	if(n >= 0 && n < _IO_nerr)
88219b2ee8SDavid du Colombier 		return sys_errlist[n];
893e12c5d1SDavid du Colombier 	if(n == EDOM)
903e12c5d1SDavid du Colombier 		return "Domain error";
913e12c5d1SDavid du Colombier 	else if(n == ERANGE)
923e12c5d1SDavid du Colombier 		return "Range error";
933e12c5d1SDavid du Colombier 	else
943e12c5d1SDavid du Colombier 		return "Unknown error";
953e12c5d1SDavid du Colombier }
96