diff options
-rw-r--r-- | strerror.c | 26 |
1 files changed, 24 insertions, 2 deletions
@@ -1,6 +1,8 @@ #define _XOPEN_SOURCE 700 +#include <ctype.h> #include <string.h> #include <stdio.h> +#include <strings.h> #include <stdlib.h> #include "strerror.h" @@ -13,6 +15,16 @@ const char *errname(int err) return "-"; } +int errnum(const char *name) +{ + for (int i = 0; i < sizeof(errlist) / sizeof(errlist[0]); i++) { + if (errlist[i] && !strcasecmp(name, errlist[i])) { + return i; + } + } + return -1; +} + int main(int argc, char *argv[]) { int n = 1; @@ -23,8 +35,18 @@ int main(int argc, char *argv[]) } do { - int err = atoi(argv[n]); - printf("%d: %s [%s]\n", err, strerror(err), errname(err)); + int err = -1; + if (toupper(argv[n][0]) == 'E') { + err = errnum(argv[n]); + } else { + err = atoi(argv[n]); + } + + if (err == -1) { + fprintf(stderr, "%s: %s: unknown error code\n", argv[0], argv[n]); + } else { + printf("%d: %s [%s]\n", err, strerror(err), errname(err)); + } } while (argv[++n]); return 0; |