xref: /plan9/sys/src/ape/lib/ap/stdio/strerror.c (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
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",
393e12c5d1SDavid du Colombier 	"Notty",
403e12c5d1SDavid du Colombier 	"Nxio",
413e12c5d1SDavid du Colombier 	"Permission denied",
423e12c5d1SDavid du Colombier 	"Broken pipe",
433e12c5d1SDavid du Colombier 	"Read-only file system",
443e12c5d1SDavid du Colombier 	"Spipe",
453e12c5d1SDavid du Colombier 	"Srch",
463e12c5d1SDavid du Colombier 	"Cross-device link",
47219b2ee8SDavid du Colombier 	"Not a socket",
48219b2ee8SDavid du Colombier 	"Protocol not supported",
49219b2ee8SDavid du Colombier 	"Connection refused",
50219b2ee8SDavid du Colombier 	"Address family not supported",
51219b2ee8SDavid du Colombier 	"No buffers",
52219b2ee8SDavid du Colombier 	"OP not supported",
53219b2ee8SDavid du Colombier 	"Address in use",
54219b2ee8SDavid du Colombier 	"Destination address required",
55219b2ee8SDavid du Colombier 	"Message size",
56219b2ee8SDavid du Colombier 	"Protocol option not supported",
57219b2ee8SDavid du Colombier 	"Socket option not supported",
58219b2ee8SDavid du Colombier 	"Address not available",
59219b2ee8SDavid du Colombier 	"Network down",
60219b2ee8SDavid du Colombier 	"Network unreachable",
61219b2ee8SDavid du Colombier 	"Network reset",
62219b2ee8SDavid du Colombier 	"Connection aborted",
63219b2ee8SDavid du Colombier 	"Connected",
64219b2ee8SDavid du Colombier 	"Not connected",
65219b2ee8SDavid du Colombier 	"Shut down",
66219b2ee8SDavid du Colombier 	"Too many references",
67219b2ee8SDavid du Colombier 	"Timed out",
68219b2ee8SDavid du Colombier 	"Host down",
69*7dd7cddfSDavid du Colombier 	"Hout unreachable",
70*7dd7cddfSDavid du Colombier 	"Unknown error",
71*7dd7cddfSDavid du Colombier 	"Operation canceled",
72*7dd7cddfSDavid du Colombier 	"Operation in progress"
733e12c5d1SDavid du Colombier };
74219b2ee8SDavid du Colombier #define	_IO_nerr	(sizeof sys_errlist/sizeof sys_errlist[0])
75219b2ee8SDavid du Colombier int sys_nerr = _IO_nerr;
76219b2ee8SDavid du Colombier 
773e12c5d1SDavid du Colombier char *strerror(int n){
783e12c5d1SDavid du Colombier 	if(n >= 0 && n < _IO_nerr)
79219b2ee8SDavid du Colombier 		return sys_errlist[n];
803e12c5d1SDavid du Colombier 	if(n == EDOM)
813e12c5d1SDavid du Colombier 		return "Domain error";
823e12c5d1SDavid du Colombier 	else if(n == ERANGE)
833e12c5d1SDavid du Colombier 		return "Range error";
843e12c5d1SDavid du Colombier 	else
853e12c5d1SDavid du Colombier 		return "Unknown error";
863e12c5d1SDavid du Colombier }
87