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