# HG changeset patch # User David Demelier # Date 1660722720 -7200 # Node ID 3199794275661369bae36fb74b5b28a90c5c9301 # Parent 95bc6b4ec753e9a581478f821f053a20ab13ead9 misc: refactor using util_getopt diff -r 95bc6b4ec753 -r 319979427566 libsci/util.c --- a/libsci/util.c Wed Aug 17 09:38:19 2022 +0200 +++ b/libsci/util.c Wed Aug 17 09:52:00 2022 +0200 @@ -36,7 +36,7 @@ void *ret; if (!(ret = malloc(size))) - util_die("malloc: %s\n", strerror(errno)); + util_die("abort: malloc: %s\n", strerror(errno)); return ret; } @@ -47,7 +47,7 @@ void *ret; if (!(ret = calloc(n, size))) - util_die("calloc: %s\n", strerror(errno)); + util_die("abort: calloc: %s\n", strerror(errno)); return ret; } @@ -58,7 +58,7 @@ void *ret; if (!(ret = realloc(ptr, size)) && size) - util_die("realloc: %s\n", strerror(errno)); + util_die("abort: realloc: %s\n", strerror(errno)); return ret; } @@ -69,7 +69,7 @@ char *ret; if (!(ret = strdup(src))) - util_die("strdup: %s\n", strerror(errno)); + util_die("abort: strdup: %s\n", strerror(errno)); return ret; } @@ -82,7 +82,7 @@ char *ret; if (!(ret = strndup(src, n))) - util_die("strndup: %s\n", strerror(errno)); + util_die("abort: strndup: %s\n", strerror(errno)); return ret; } @@ -120,7 +120,7 @@ FILE *fp; if (!(fp = open_memstream(out, outsz))) - util_die("open_memstream: %s\n", strerror(errno)); + util_die("abort: open_memstream: %s\n", strerror(errno)); return fp; } @@ -174,7 +174,7 @@ va_end(ap); if (!doc) - util_die("json_vpack_ex: %s\n", err.text); + util_die("abort: json_vpack_ex: %s\n", err.text); return doc; } @@ -187,7 +187,28 @@ char *ret; if (!(ret = json_dumps(json, JSON_COMPACT))) - util_die("json_dump: %s\n", strerror(ENOMEM)); + util_die("abort: json_dump: %s\n", strerror(ENOMEM)); return ret; } + +int +util_getopt(int argc, char * const *argv, const char *optstring) +{ + int ch; + + opterr = 0; + + switch ((ch = getopt(argc, argv, optstring))) { + case '?': + util_die("abort: invalid option: %c\n", ch); + break; + case ':': + util_die("abort: missing value for option %c\n", ch); + break; + default: + break; + } + + return ch; +} diff -r 95bc6b4ec753 -r 319979427566 libsci/util.h --- a/libsci/util.h Wed Aug 17 09:38:19 2022 +0200 +++ b/libsci/util.h Wed Aug 17 09:52:00 2022 +0200 @@ -194,4 +194,16 @@ long long util_strtonum(const char *str, long long min, long long max, const char **errstr); +/** + * Wrap getopt(3) but handle invalid option or missing value with a predefined + * message. + * + * \param argc number of arguments + * \param argv arguments + * \param optstring the string format + * \return option or -1 when complete + */ +int +util_getopt(int argc, char * const *argv, const char *optstring); + #endif /* !SCI_UTIL_H */ diff -r 95bc6b4ec753 -r 319979427566 scictl/scictl.c --- a/scictl/scictl.c Wed Aug 17 09:38:19 2022 +0200 +++ b/scictl/scictl.c Wed Aug 17 09:52:00 2022 +0200 @@ -333,7 +333,7 @@ if ((env = getenv("SCI_API_KEY"))) util_strlcpy(apiconf.key, env, sizeof (apiconf.key)); - while ((ch = getopt(argc, argv, "k:u:")) != -1) { + while ((ch = util_getopt(argc, argv, "k:u:")) != -1) { switch (ch) { case 'k': util_strlcpy(apiconf.key, optarg, sizeof (apiconf.key)); @@ -341,12 +341,6 @@ case 'u': util_strlcpy(apiconf.baseurl, optarg, sizeof (apiconf.baseurl)); break; - case '?': - util_die("abort: invalid option: %c\n", ch); - break; - case ':': - util_die("abort: missing value for option %c\n", ch); - break; default: break; } diff -r 95bc6b4ec753 -r 319979427566 scid/main.c --- a/scid/main.c Wed Aug 17 09:38:19 2022 +0200 +++ b/scid/main.c Wed Aug 17 09:52:00 2022 +0200 @@ -37,7 +37,7 @@ int ch; void (*run)(void) = &(http_cgi_run); - while ((ch = getopt(argc, argv, "d:ft:")) != -1) { + while ((ch = util_getopt(argc, argv, "d:ft:")) != -1) { switch (ch) { case 'd': util_strlcpy(scid.dbpath, optarg, sizeof (scid.dbpath)); diff -r 95bc6b4ec753 -r 319979427566 sciworkerd/main.c --- a/sciworkerd/main.c Wed Aug 17 09:38:19 2022 +0200 +++ b/sciworkerd/main.c Wed Aug 17 09:52:00 2022 +0200 @@ -45,7 +45,7 @@ env(); opterr = 0; - while ((ch = getopt(argc, argv, "k:j:t:u:w:")) != -1) { + while ((ch = util_getopt(argc, argv, "k:j:t:u:w:")) != -1) { switch (ch) { case 'j': if ((val = atoi(optarg)) > 0)