From 683249bd8b7cb762dc848456e3145252ba5cf6fc Mon Sep 17 00:00:00 2001 From: Jakob Kaivo Date: Thu, 9 Apr 2020 09:40:35 -0400 Subject: allow specifying errors by symbolic name --- strerror.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/strerror.c b/strerror.c index 0e0359b..820d78c 100644 --- a/strerror.c +++ b/strerror.c @@ -1,6 +1,8 @@ #define _XOPEN_SOURCE 700 +#include #include #include +#include #include #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; -- cgit v1.2.1