]> git.zerfleddert.de Git - micropolis/blame - src/tcl/compat/strerror.c
Import Micropolis from http://www.donhopkins.com/home/micropolis/
[micropolis] / src / tcl / compat / strerror.c
CommitLineData
6a5fa4e0
MG
1/*
2 * strerror.c --
3 *
4 * Source code for the "strerror" library routine.
5 *
6 * Copyright 1988-1991 Regents of the University of California
7 * Permission to use, copy, modify, and distribute this
8 * software and its documentation for any purpose and without
9 * fee is hereby granted, provided that the above copyright
10 * notice appears in all copies. The University of California
11 * makes no representations about the suitability of this
12 * software for any purpose. It is provided "as is" without
13 * express or implied warranty.
14 */
15
16#ifndef lint
17static char rcsid[] = "$Header: /user6/ouster/tcl/compat/RCS/strerror.c,v 1.2 91/12/16 09:26:48 ouster Exp $ SPRITE (Berkeley)";
18#endif /* not lint */
19
20#include <tclint.h>
21#include <tclunix.h>
22
23/*
24 *----------------------------------------------------------------------
25 *
26 * strerror --
27 *
28 * Map an integer error number into a printable string.
29 *
30 * Results:
31 * The return value is a pointer to a string describing
32 * error. The first character of string isn't capitalized.
33 *
34 * Side effects:
35 * Each call to this procedure may overwrite the value returned
36 * by the previous call.
37 *
38 *----------------------------------------------------------------------
39 */
40
41char *
42strerror(error)
43 int error; /* Integer identifying error (must be
44 * one of the officially-defined Sprite
45 * errors, as defined in errno.h). */
46{
47 static char msg[50];
48
49#if TCL_SYS_ERRLIST
50 if ((error <= sys_nerr) && (error > 0)) {
51 return sys_errlist[error];
52 }
53#else
54 switch (error) {
55#ifdef E2BIG
56 case E2BIG: return "argument list too long";
57#endif
58#ifdef EACCES
59 case EACCES: return "permission denied";
60#endif
61#ifdef EADDRINUSE
62 case EADDRINUSE: return "address already in use";
63#endif
64#ifdef EADDRNOTAVAIL
65 case EADDRNOTAVAIL: return "can't assign requested address";
66#endif
67#ifdef EADV
68 case EADV: return "advertise error";
69#endif
70#ifdef EAFNOSUPPORT
71 case EAFNOSUPPORT: return "address family not supported by protocol family";
72#endif
73#ifdef EAGAIN
74 case EAGAIN: return "no more processes";
75#endif
76#ifdef EALIGN
77 case EALIGN: return "EALIGN";
78#endif
79#ifdef EALREADY
80 case EALREADY: return "operation already in progress";
81#endif
82#ifdef EBADE
83 case EBADE: return "bad exchange descriptor";
84#endif
85#ifdef EBADF
86 case EBADF: return "bad file number";
87#endif
88#ifdef EBADFD
89 case EBADFD: return "file descriptor in bad state";
90#endif
91#ifdef EBADMSG
92 case EBADMSG: return "not a data message";
93#endif
94#ifdef EBADR
95 case EBADR: return "bad request descriptor";
96#endif
97#ifdef EBADRPC
98 case EBADRPC: return "RPC structure is bad";
99#endif
100#ifdef EBADRQC
101 case EBADRQC: return "bad request code";
102#endif
103#ifdef EBADSLT
104 case EBADSLT: return "invalid slot";
105#endif
106#ifdef EBFONT
107 case EBFONT: return "bad font file format";
108#endif
109#ifdef EBUSY
110 case EBUSY: return "mount device busy";
111#endif
112#ifdef ECHILD
113 case ECHILD: return "no children";
114#endif
115#ifdef ECHRNG
116 case ECHRNG: return "channel number out of range";
117#endif
118#ifdef ECOMM
119 case ECOMM: return "communication error on send";
120#endif
121#ifdef ECONNABORTED
122 case ECONNABORTED: return "software caused connection abort";
123#endif
124#ifdef ECONNREFUSED
125 case ECONNREFUSED: return "connection refused";
126#endif
127#ifdef ECONNRESET
128 case ECONNRESET: return "connection reset by peer";
129#endif
130#if defined(EDEADLK) && (!defined(EWOULDBLOCK) || (EDEADLK != EWOULDBLOCK))
131 case EDEADLK: return "resource deadlock avoided";
132#endif
133#ifdef EDEADLOCK
134 case EDEADLOCK: return "resource deadlock avoided";
135#endif
136#ifdef EDESTADDRREQ
137 case EDESTADDRREQ: return "destination address required";
138#endif
139#ifdef EDIRTY
140 case EDIRTY: return "mounting a dirty fs w/o force";
141#endif
142#ifdef EDOM
143 case EDOM: return "math argument out of range";
144#endif
145#ifdef EDOTDOT
146 case EDOTDOT: return "cross mount point";
147#endif
148#ifdef EDQUOT
149 case EDQUOT: return "disk quota exceeded";
150#endif
151#ifdef EDUPPKG
152 case EDUPPKG: return "duplicate package name";
153#endif
154#ifdef EEXIST
155 case EEXIST: return "file already exists";
156#endif
157#ifdef EFAULT
158 case EFAULT: return "bad address in system call argument";
159#endif
160#ifdef EFBIG
161 case EFBIG: return "file too large";
162#endif
163#ifdef EHOSTDOWN
164 case EHOSTDOWN: return "host is down";
165#endif
166#ifdef EHOSTUNREACH
167 case EHOSTUNREACH: return "host is unreachable";
168#endif
169#ifdef EIDRM
170 case EIDRM: return "identifier removed";
171#endif
172#ifdef EINIT
173 case EINIT: return "initialization error";
174#endif
175#ifdef EINPROGRESS
176 case EINPROGRESS: return "operation now in progress";
177#endif
178#ifdef EINTR
179 case EINTR: return "interrupted system call";
180#endif
181#ifdef EINVAL
182 case EINVAL: return "invalid argument";
183#endif
184#ifdef EIO
185 case EIO: return "I/O error";
186#endif
187#ifdef EISCONN
188 case EISCONN: return "socket is already connected";
189#endif
190#ifdef EISDIR
191 case EISDIR: return "illegal operation on a directory";
192#endif
193#ifdef EISNAME
194 case EISNAM: return "is a name file";
195#endif
196#ifdef ELBIN
197 case ELBIN: return "ELBIN";
198#endif
199#ifdef EL2HLT
200 case EL2HLT: return "level 2 halted";
201#endif
202#ifdef EL2NSYNC
203 case EL2NSYNC: return "level 2 not synchronized";
204#endif
205#ifdef EL3HLT
206 case EL3HLT: return "level 3 halted";
207#endif
208#ifdef EL3RST
209 case EL3RST: return "level 3 reset";
210#endif
211#ifdef ELIBACC
212 case ELIBACC: return "can not access a needed shared library";
213#endif
214#ifdef ELIBBAD
215 case ELIBBAD: return "accessing a corrupted shared library";
216#endif
217#ifdef ELIBEXEC
218 case ELIBEXEC: return "can not exec a shared library directly";
219#endif
220#ifdef ELIBMAX
221 case ELIBMAX: return
222 "attempting to link in more shared libraries than system limit";
223#endif
224#ifdef ELIBSCN
225 case ELIBSCN: return ".lib section in a.out corrupted";
226#endif
227#ifdef ELNRNG
228 case ELNRNG: return "link number out of range";
229#endif
230#ifdef ELOOP
231 case ELOOP: return "too many levels of symbolic links";
232#endif
233#ifdef EMFILE
234 case EMFILE: return "too many open files";
235#endif
236#ifdef EMLINK
237 case EMLINK: return "too many links";
238#endif
239#ifdef EMSGSIZE
240 case EMSGSIZE: return "message too long";
241#endif
242#ifdef EMULTIHOP
243 case EMULTIHOP: return "multihop attempted";
244#endif
245#ifdef ENAMETOOLONG
246 case ENAMETOOLONG: return "file name too long";
247#endif
248#ifdef ENAVAIL
249 case ENAVAIL: return "not available";
250#endif
251#ifdef ENET
252 case ENET: return "ENET";
253#endif
254#ifdef ENETDOWN
255 case ENETDOWN: return "network is down";
256#endif
257#ifdef ENETRESET
258 case ENETRESET: return "network dropped connection on reset";
259#endif
260#ifdef ENETUNREACH
261 case ENETUNREACH: return "network is unreachable";
262#endif
263#ifdef ENFILE
264 case ENFILE: return "file table overflow";
265#endif
266#ifdef ENOANO
267 case ENOANO: return "anode table overflow";
268#endif
269#if defined(ENOBUFS) && (!defined(ENOSR) || (ENOBUFS != ENOSR))
270 case ENOBUFS: return "no buffer space available";
271#endif
272#ifdef ENOCSI
273 case ENOCSI: return "no CSI structure available";
274#endif
275#ifdef ENODATA
276 case ENODATA: return "no data available";
277#endif
278#ifdef ENODEV
279 case ENODEV: return "no such device";
280#endif
281#ifdef ENOENT
282 case ENOENT: return "no such file or directory";
283#endif
284#ifdef ENOEXEC
285 case ENOEXEC: return "exec format error";
286#endif
287#ifdef ENOLCK
288 case ENOLCK: return "no locks available";
289#endif
290#ifdef ENOLINK
291 case ENOLINK: return "link has be severed";
292#endif
293#ifdef ENOMEM
294 case ENOMEM: return "not enough memory";
295#endif
296#ifdef ENOMSG
297 case ENOMSG: return "no message of desired type";
298#endif
299#ifdef ENONET
300 case ENONET: return "machine is not on the network";
301#endif
302#ifdef ENOPKG
303 case ENOPKG: return "package not installed";
304#endif
305#ifdef ENOPROTOOPT
306 case ENOPROTOOPT: return "bad proocol option";
307#endif
308#ifdef ENOSPC
309 case ENOSPC: return "no space left on device";
310#endif
311#ifdef ENOSR
312 case ENOSR: return "out of stream resources";
313#endif
314#ifdef ENOSTR
315 case ENOSTR: return "not a stream device";
316#endif
317#ifdef ENOSYM
318 case ENOSYM: return "unresolved symbol name";
319#endif
320#ifdef ENOSYS
321 case ENOSYS: return "function not implemented";
322#endif
323#ifdef ENOTBLK
324 case ENOTBLK: return "block device required";
325#endif
326#ifdef ENOTCONN
327 case ENOTCONN: return "socket is not connected";
328#endif
329#ifdef ENOTDIR
330 case ENOTDIR: return "not a directory";
331#endif
332#ifdef ENOTEMPTY
333 case ENOTEMPTY: return "directory not empty";
334#endif
335#ifdef ENOTNAM
336 case ENOTNAM: return "not a name file";
337#endif
338#ifdef ENOTSOCK
339 case ENOTSOCK: return "socket operation on non-socket";
340#endif
341#ifdef ENOTTY
342 case ENOTTY: return "inappropriate device for ioctl";
343#endif
344#ifdef ENOTUNIQ
345 case ENOTUNIQ: return "name not unique on network";
346#endif
347#ifdef ENXIO
348 case ENXIO: return "no such device or address";
349#endif
350#ifdef EOPNOTSUPP
351 case EOPNOTSUPP: return "operation not supported on socket";
352#endif
353#ifdef EPERM
354 case EPERM: return "not owner";
355#endif
356#ifdef EPFNOSUPPORT
357 case EPFNOSUPPORT: return "protocol family not supported";
358#endif
359#ifdef EPIPE
360 case EPIPE: return "broken pipe";
361#endif
362#ifdef EPROCLIM
363 case EPROCLIM: return "too many processes";
364#endif
365#ifdef EPROCUNAVAIL
366 case EPROCUNAVAIL: return "bad procedure for program";
367#endif
368#ifdef EPROGMISMATCH
369 case EPROGMISMATCH: return "program version wrong";
370#endif
371#ifdef EPROGUNAVAIL
372 case EPROGUNAVAIL: return "RPC program not available";
373#endif
374#ifdef EPROTO
375 case EPROTO: return "protocol error";
376#endif
377#ifdef EPROTONOSUPPORT
378 case EPROTONOSUPPORT: return "protocol not suppored";
379#endif
380#ifdef EPROTOTYPE
381 case EPROTOTYPE: return "protocol wrong type for socket";
382#endif
383#ifdef ERANGE
384 case ERANGE: return "math result unrepresentable";
385#endif
386#if defined(EREFUSED) && (!defined(ECONNREFUSED) || (EREFUSED != ECONNREFUSED))
387 case EREFUSED: return "EREFUSED";
388#endif
389#ifdef EREMCHG
390 case EREMCHG: return "remote address changed";
391#endif
392#ifdef EREMDEV
393 case EREMDEV: return "remote device";
394#endif
395#ifdef EREMOTE
396 case EREMOTE: return "pathname hit remote file system";
397#endif
398#ifdef EREMOTEIO
399 case EREMOTEIO: return "remote i/o error";
400#endif
401#ifdef EREMOTERELEASE
402 case EREMOTERELEASE: return "EREMOTERELEASE";
403#endif
404#ifdef EROFS
405 case EROFS: return "read-only file system";
406#endif
407#ifdef ERPCMISMATCH
408 case ERPCMISMATCH: return "RPC version is wrong";
409#endif
410#ifdef ERREMOTE
411 case ERREMOTE: return "object is remote";
412#endif
413#ifdef ESHUTDOWN
414 case ESHUTDOWN: return "can't send afer socket shutdown";
415#endif
416#ifdef ESOCKTNOSUPPORT
417 case ESOCKTNOSUPPORT: return "socket type not supported";
418#endif
419#ifdef ESPIPE
420 case ESPIPE: return "invalid seek";
421#endif
422#ifdef ESRCH
423 case ESRCH: return "no such process";
424#endif
425#ifdef ESRMNT
426 case ESRMNT: return "srmount error";
427#endif
428#ifdef ESTALE
429 case ESTALE: return "stale remote file handle";
430#endif
431#ifdef ESUCCESS
432 case ESUCCESS: return "Error 0";
433#endif
434#ifdef ETIME
435 case ETIME: return "timer expired";
436#endif
437#ifdef ETIMEDOUT
438 case ETIMEDOUT: return "connection timed out";
439#endif
440#ifdef ETOOMANYREFS
441 case ETOOMANYREFS: return "too many references: can't splice";
442#endif
443#ifdef ETXTBSY
444 case ETXTBSY: return "text file or pseudo-device busy";
445#endif
446#ifdef EUCLEAN
447 case EUCLEAN: return "structure needs cleaning";
448#endif
449#ifdef EUNATCH
450 case EUNATCH: return "protocol driver not attached";
451#endif
452#ifdef EUSERS
453 case EUSERS: return "too many users";
454#endif
455#ifdef EVERSION
456 case EVERSION: return "version mismatch";
457#endif
458#if defined(EWOULDBLOCK) && (!defined(EAGAIN) || (EWOULDBLOCK != EAGAIN))
459 case EWOULDBLOCK: return "operation would block";
460#endif
461#ifdef EXDEV
462 case EXDEV: return "cross-domain link";
463#endif
464#ifdef EXFULL
465 case EXFULL: return "message tables full";
466#endif
467 }
468#endif /* ! TCL_SYS_ERRLIST */
469 sprintf(msg, "unknown error (%d)", error);
470 return msg;
471}
Impressum, Datenschutz