Blame


1 a695bc7d 2006-07-23 devnull #include "a.h"
2 a695bc7d 2006-07-23 devnull
3 a695bc7d 2006-07-23 devnull enum
4 a695bc7d 2006-07-23 devnull {
5 a695bc7d 2006-07-23 devnull EPLAN9 = 0x19283745 /* see /usr/local/plan9/src/lib9/errstr.c */
6 a695bc7d 2006-07-23 devnull };
7 a695bc7d 2006-07-23 devnull
8 a695bc7d 2006-07-23 devnull typedef struct Error Error;
9 a695bc7d 2006-07-23 devnull struct Error
10 a695bc7d 2006-07-23 devnull {
11 a695bc7d 2006-07-23 devnull char *text;
12 a695bc7d 2006-07-23 devnull int err;
13 a695bc7d 2006-07-23 devnull int len;
14 a695bc7d 2006-07-23 devnull };
15 a695bc7d 2006-07-23 devnull
16 a695bc7d 2006-07-23 devnull static Error errortab[] = {
17 6292a25b 2006-07-23 devnull { "permitted", EPERM },
18 6292a25b 2006-07-23 devnull { "permission", EACCES },
19 6292a25b 2006-07-23 devnull { "access", EACCES },
20 6292a25b 2006-07-23 devnull { "exists", EEXIST },
21 6292a25b 2006-07-23 devnull { "exist", ENOENT },
22 6292a25b 2006-07-23 devnull { "no such", ENOENT },
23 6292a25b 2006-07-23 devnull { "not found", ENOENT },
24 6292a25b 2006-07-23 devnull { "input/output", EIO },
25 6292a25b 2006-07-23 devnull { "timeout", ETIMEDOUT },
26 6292a25b 2006-07-23 devnull { "timed out", ETIMEDOUT },
27 6292a25b 2006-07-23 devnull { "i/o", EIO },
28 6292a25b 2006-07-23 devnull { "too long", E2BIG },
29 6292a25b 2006-07-23 devnull { "interrupt", EINTR },
30 6292a25b 2006-07-23 devnull { "no such", ENODEV },
31 6292a25b 2006-07-23 devnull { "bad file", EBADF },
32 6292a25b 2006-07-23 devnull { " fid ", EBADF },
33 6292a25b 2006-07-23 devnull { "temporar", EAGAIN },
34 6292a25b 2006-07-23 devnull { "memory", ENOMEM },
35 6292a25b 2006-07-23 devnull { "is a directory", EISDIR },
36 6292a25b 2006-07-23 devnull { "directory", ENOTDIR },
37 6292a25b 2006-07-23 devnull { "argument", EINVAL },
38 6292a25b 2006-07-23 devnull { "pipe", EPIPE },
39 6292a25b 2006-07-23 devnull { "in use", EBUSY },
40 6292a25b 2006-07-23 devnull { "busy", EBUSY },
41 6292a25b 2006-07-23 devnull { "illegal", EINVAL },
42 77fb6ec7 2008-07-24 rsc { "invalid", EINVAL },
43 6292a25b 2006-07-23 devnull { "read-only", EROFS },
44 6292a25b 2006-07-23 devnull { "read only", EROFS },
45 6007b4d9 2006-10-12 devnull #ifdef EPROTO
46 6292a25b 2006-07-23 devnull { "proto", EPROTO },
47 6007b4d9 2006-10-12 devnull #else
48 6007b4d9 2006-10-12 devnull { "proto", EINVAL },
49 6007b4d9 2006-10-12 devnull #endif
50 6292a25b 2006-07-23 devnull { "entry", ENOENT },
51 a695bc7d 2006-07-23 devnull };
52 a695bc7d 2006-07-23 devnull
53 a695bc7d 2006-07-23 devnull int
54 a695bc7d 2006-07-23 devnull errstr2errno(void)
55 a695bc7d 2006-07-23 devnull {
56 a695bc7d 2006-07-23 devnull char e[ERRMAX];
57 a695bc7d 2006-07-23 devnull int i, len;
58 a695bc7d 2006-07-23 devnull
59 a695bc7d 2006-07-23 devnull if(errno != EPLAN9)
60 a695bc7d 2006-07-23 devnull return errno;
61 a695bc7d 2006-07-23 devnull
62 a695bc7d 2006-07-23 devnull if(errortab[0].len == 0)
63 a695bc7d 2006-07-23 devnull for(i=0; i<nelem(errortab); i++)
64 a695bc7d 2006-07-23 devnull errortab[i].len = strlen(errortab[i].text);
65 a695bc7d 2006-07-23 devnull
66 a695bc7d 2006-07-23 devnull rerrstr(e, sizeof e);
67 a695bc7d 2006-07-23 devnull len = strlen(e);
68 a695bc7d 2006-07-23 devnull for(i=0; i<nelem(errortab); i++)
69 a695bc7d 2006-07-23 devnull if(errortab[i].len <= len && cistrstr(e, errortab[i].text))
70 a695bc7d 2006-07-23 devnull return errortab[i].err;
71 6292a25b 2006-07-23 devnull return ERANGE; /* who knows - be blatantly wrong */
72 a695bc7d 2006-07-23 devnull }
73 a695bc7d 2006-07-23 devnull