diff options
author | Jakob Kaivo <jkk@ung.org> | 2020-04-09 09:40:35 -0400 |
---|---|---|
committer | Jakob Kaivo <jkk@ung.org> | 2020-04-09 09:40:35 -0400 |
commit | 683249bd8b7cb762dc848456e3145252ba5cf6fc (patch) | |
tree | 7f5622893c8edda3ce307d70af9621702552f190 | |
parent | fada1a67c40ea39a1f6ebec382070b4f2cdd6b7b (diff) |
allow specifying errors by symbolic name
-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; |