diff options
author | NRK <nrk@disroot.org> | 2022-06-16 15:33:32 +0200 |
---|---|---|
committer | Gitea <gitea@fake.local> | 2022-09-05 03:52:51 +0200 |
commit | fbe186e79d2083a7bbd1588b317cd5782bc5ae73 (patch) | |
tree | 38bc3d7e0c1d3ecf8fe08360615a671fd1f0fd32 | |
parent | ba39006574776d7fa026c63fce8276378cbdaabb (diff) | |
download | nsxiv-fbe186e79d2083a7bbd1588b317cd5782bc5ae73.tar.zst |
don't assume positive argc
handle a rare, but possible case of argc being 0, in which case argv[0]
would be null.
note that both POSIX and ISO C standard allow argc to be 0 and in
practice this can be triggered via calling `exec(3)` family of functions
with NULL as the first `argv`.
-rw-r--r-- | options.c | 8 | ||||
-rw-r--r-- | util.c | 2 |
2 files changed, 6 insertions, 4 deletions
@@ -98,9 +98,6 @@ void parse_options(int argc, char **argv) static opt_t _options; options = &_options; - progname = strrchr(argv[0], '/'); - progname = progname ? progname + 1 : argv[0]; - _options.from_stdin = false; _options.to_stdout = false; _options.using_null = false; @@ -125,6 +122,11 @@ void parse_options(int argc, char **argv) _options.clean_cache = false; _options.private_mode = false; + if (argc > 0) { + s = strrchr(argv[0], '/'); + progname = s != NULL && s[1] != '\0' ? s + 1 : argv[0]; + } + optparse_init(&op, argv); while ((opt = optparse_long(&op, longopts, NULL)) != -1) { for (n = 0; n < (int)ARRLEN(longopts); ++n) { /* clang-tidy finds some non-sensical branch and thinks optarg == NULL is possible */ @@ -28,7 +28,7 @@ #include <sys/stat.h> #include <unistd.h> -const char *progname; +const char *progname = "nsxiv"; void* emalloc(size_t size) { |