From 542bb9be7cd0c05e3fb1beb849b70d79fec42189 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 31 Mar 2022 11:09:48 +0200 Subject: [PATCH] tree-wide: unify some code that looks for --help in the command line --- src/backlight/backlight.c | 5 +++-- src/basic/process-util.c | 24 ++++++++++++++++++++++++ src/basic/process-util.h | 2 ++ src/cryptsetup/cryptsetup.c | 3 ++- src/integritysetup/integritysetup.c | 8 +++----- src/veritysetup/veritysetup.c | 6 ++---- 6 files changed, 36 insertions(+), 12 deletions(-) diff --git a/src/backlight/backlight.c b/src/backlight/backlight.c index 5a3095cbba..a4e5d77f6c 100644 --- a/src/backlight/backlight.c +++ b/src/backlight/backlight.c @@ -14,10 +14,11 @@ #include "mkdir.h" #include "parse-util.h" #include "pretty-print.h" -#include "terminal-util.h" +#include "process-util.h" #include "reboot-util.h" #include "string-util.h" #include "strv.h" +#include "terminal-util.h" #include "util.h" static int help(void) { @@ -368,7 +369,7 @@ static int run(int argc, char *argv[]) { log_setup(); - if (strv_contains(strv_skip(argv, 1), "--help")) + if (argv_looks_like_help(argc, argv)) return help(); if (argc != 3) diff --git a/src/basic/process-util.c b/src/basic/process-util.c index 72807d039c..10aec10bfa 100644 --- a/src/basic/process-util.c +++ b/src/basic/process-util.c @@ -1615,6 +1615,30 @@ _noreturn_ void freeze(void) { pause(); } +bool argv_looks_like_help(int argc, char **argv) { + char **l; + + /* Scans the command line for indications the user asks for help. This is supposed to be called by + * tools that do not implement getopt() style command line parsing because they are not primarily + * user-facing. Detects four ways of asking for help: + * + * 1. Passing zero arguments + * 2. Passing "help" as first argument + * 3. Passing --help as any argument + * 4. Passing -h as any argument + */ + + if (argc <= 1) + return true; + + if (streq_ptr(argv[1], "help")) + return true; + + l = strv_skip(argv, 1); + + return strv_contains(l, "--help") || + strv_contains(l, "-h"); +} static const char *const sigchld_code_table[] = { [CLD_EXITED] = "exited", diff --git a/src/basic/process-util.h b/src/basic/process-util.h index f22ff76ee8..c07575e580 100644 --- a/src/basic/process-util.h +++ b/src/basic/process-util.h @@ -191,3 +191,5 @@ int setpriority_closest(int priority); bool invoked_as(char *argv[], const char *token); _noreturn_ void freeze(void); + +bool argv_looks_like_help(int argc, char **argv); diff --git a/src/cryptsetup/cryptsetup.c b/src/cryptsetup/cryptsetup.c index 21430d4256..408d7511bf 100644 --- a/src/cryptsetup/cryptsetup.c +++ b/src/cryptsetup/cryptsetup.c @@ -34,6 +34,7 @@ #include "path-util.h" #include "pkcs11-util.h" #include "pretty-print.h" +#include "process-util.h" #include "random-util.h" #include "string-util.h" #include "strv.h" @@ -1719,7 +1720,7 @@ static int run(int argc, char *argv[]) { const char *verb; int r; - if (argc <= 1) + if (argv_looks_like_help(argc, argv)) return help(); if (argc < 3) diff --git a/src/integritysetup/integritysetup.c b/src/integritysetup/integritysetup.c index d8cfd12e95..7eff0ce5dc 100644 --- a/src/integritysetup/integritysetup.c +++ b/src/integritysetup/integritysetup.c @@ -12,9 +12,10 @@ #include "log.h" #include "main-func.h" #include "memory-util.h" -#include "path-util.h" #include "parse-util.h" +#include "path-util.h" #include "pretty-print.h" +#include "process-util.h" #include "string-util.h" #include "terminal-util.h" @@ -90,10 +91,7 @@ static int run(int argc, char *argv[]) { int r; char *action, *volume; - if (argc <= 1 || - strv_contains(strv_skip(argv, 1), "--help") || - strv_contains(strv_skip(argv, 1), "-h") || - streq(argv[1], "help")) + if (argv_looks_like_help(argc, argv)) return help(); if (argc < 3) diff --git a/src/veritysetup/veritysetup.c b/src/veritysetup/veritysetup.c index a81e93cb75..1d1baaa59d 100644 --- a/src/veritysetup/veritysetup.c +++ b/src/veritysetup/veritysetup.c @@ -12,6 +12,7 @@ #include "main-func.h" #include "path-util.h" #include "pretty-print.h" +#include "process-util.h" #include "string-util.h" #include "terminal-util.h" @@ -114,10 +115,7 @@ static int run(int argc, char *argv[]) { const char *verb; int r; - if (argc <= 1 || - strv_contains(strv_skip(argv, 1), "--help") || - strv_contains(strv_skip(argv, 1), "-h") || - streq(argv[1], "help")) + if (argv_looks_like_help(argc, argv)) return help(); if (argc < 3)