aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNRK <nrk@disroot.org>2022-06-16 15:33:32 +0200
committerGitea <gitea@fake.local>2022-09-05 03:52:51 +0200
commitfbe186e79d2083a7bbd1588b317cd5782bc5ae73 (patch)
tree38bc3d7e0c1d3ecf8fe08360615a671fd1f0fd32
parentba39006574776d7fa026c63fce8276378cbdaabb (diff)
downloadnsxiv-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.c8
-rw-r--r--util.c2
2 files changed, 6 insertions, 4 deletions
diff --git a/options.c b/options.c
index 8e8baa7..c94c9be 100644
--- a/options.c
+++ b/options.c
@@ -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 */
diff --git a/util.c b/util.c
index f03fe23..8b164ed 100644
--- a/util.c
+++ b/util.c
@@ -28,7 +28,7 @@
#include <sys/stat.h>
#include <unistd.h>
-const char *progname;
+const char *progname = "nsxiv";
void* emalloc(size_t size)
{