From 601185b43da638b1c74153deae01dbd518680889 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Sat, 2 Aug 2014 11:12:21 -0400 Subject: [PATCH] Unify parse_argv style getopt is usually good at printing out a nice error message when commandline options are invalid. It distinguishes between an unknown option and a known option with a missing arg. It is better to let it do its job and not use opterr=0 unless we actually want to suppress messages. So remove opterr=0 in the few places where it wasn't really useful. When an error in options is encountered, we should not print a lengthy help() and overwhelm the user, when we know precisely what is wrong with the commandline. In addition, since help() prints to stdout, it should not be used except when requested with -h or --help. Also, simplify things here and there. --- CODING_STYLE | 5 ++ src/activate/activate.c | 12 ++-- src/analyze/analyze.c | 11 +--- src/ask-password/ask-password.c | 22 ++++--- src/binfmt/binfmt.c | 15 ++--- src/boot/bootctl.c | 33 +++++------ src/bootchart/bootchart.c | 32 ++++++----- src/bus-proxyd/bus-proxyd.c | 3 +- src/cgls/cgls.c | 15 ++--- src/cgtop/cgtop.c | 15 ++--- src/core/main.c | 10 ++-- src/core/shutdown.c | 9 +-- src/delta/delta.c | 12 ++-- src/detect-virt/detect-virt.c | 18 +++--- src/escape/escape.c | 15 ++--- src/firstboot/firstboot.c | 15 ++--- src/hostname/hostnamectl.c | 15 ++--- src/journal-remote/journal-gatewayd.c | 8 +-- src/journal-remote/journal-remote.c | 3 +- src/journal/cat.c | 15 ++--- src/journal/coredumpctl.c | 46 +++++++-------- src/journal/journalctl.c | 10 ++-- src/libsystemd/sd-bus/busctl.c | 8 +-- src/locale/localectl.c | 15 ++--- src/login/inhibit.c | 15 ++--- src/login/loginctl.c | 15 ++--- src/machine-id-setup/machine-id-setup-main.c | 11 ++-- src/machine/machinectl.c | 11 ++-- src/modules-load/modules-load.c | 11 ++-- src/network/networkd-wait-online.c | 15 ++--- src/notify/notify.c | 11 ++-- src/nspawn/nspawn.c | 11 ++-- src/path/path.c | 27 ++++----- src/readahead/readahead.c | 30 +++++----- src/resolve-host/resolve-host.c | 3 +- src/run/run.c | 11 ++-- src/sleep/sleep.c | 13 ++--- src/socket-proxy/socket-proxyd.c | 16 ++---- src/sysctl/sysctl.c | 15 ++--- src/systemctl/systemctl.c | 57 +++++++------------ src/sysusers/sysusers.c | 15 ++--- src/test/test-libudev.c | 22 ++++--- src/timedate/timedatectl.c | 11 ++-- src/tmpfiles/tmpfiles.c | 11 ++-- .../tty-ask-password-agent.c | 13 ++--- src/udev/udevadm.c | 23 ++++---- 46 files changed, 303 insertions(+), 426 deletions(-) diff --git a/CODING_STYLE b/CODING_STYLE index e22c1edb12..ca3b5183f9 100644 --- a/CODING_STYLE +++ b/CODING_STYLE @@ -167,3 +167,8 @@ caching for any thread that is not the main thread. Use is_main_thread() to detect whether the calling thread is the main thread. + +- Option parsing: + - Do not print full help() on error, be specific about the error. + - Do not print messages to stdout on error. + - Do not POSIX_ME_HARDER unless necessary, i.e. avoid "+" in option string. diff --git a/src/activate/activate.c b/src/activate/activate.c index c3309a8485..8942773866 100644 --- a/src/activate/activate.c +++ b/src/activate/activate.c @@ -279,7 +279,7 @@ static int install_chld_handler(void) { return r; } -static int help(void) { +static void help(void) { printf("%s [OPTIONS...]\n\n" "Listen on sockets and launch child on connection.\n\n" "Options:\n" @@ -290,10 +290,7 @@ static int help(void) { " --version Print version string and exit\n" "\n" "Note: file descriptors from sd_listen_fds() will be passed through.\n" - , program_invocation_short_name - ); - - return 0; + , program_invocation_short_name); } static int parse_argv(int argc, char *argv[]) { @@ -319,7 +316,8 @@ static int parse_argv(int argc, char *argv[]) { while ((c = getopt_long(argc, argv, "+hl:aE:", options, NULL)) >= 0) switch(c) { case 'h': - return help(); + help(); + return 0; case ARG_VERSION: puts(PACKAGE_STRING); @@ -354,7 +352,7 @@ static int parse_argv(int argc, char *argv[]) { } if (optind == argc) { - log_error("Usage: %s [OPTION...] PROGRAM [OPTION...]", + log_error("%s: command to execute is missing.", program_invocation_short_name); return -EINVAL; } diff --git a/src/analyze/analyze.c b/src/analyze/analyze.c index 888f6b7a66..d0bf01468a 100644 --- a/src/analyze/analyze.c +++ b/src/analyze/analyze.c @@ -1255,10 +1255,7 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - opterr = 0; - - while ((c = getopt_long(argc, argv, "hH:M:", options, NULL)) >= 0) { - + while ((c = getopt_long(argc, argv, "hH:M:", options, NULL)) >= 0) switch (c) { case 'h': @@ -1323,17 +1320,11 @@ static int parse_argv(int argc, char *argv[]) { break; case '?': - log_error("Unknown option %s.", argv[optind-1]); - return -EINVAL; - - case ':': - log_error("Missing argument to %s.", argv[optind-1]); return -EINVAL; default: assert_not_reached("Unhandled option code."); } - } return 1; /* work to do */ } diff --git a/src/ask-password/ask-password.c b/src/ask-password/ask-password.c index 4d5690c2c0..5c37cffc22 100644 --- a/src/ask-password/ask-password.c +++ b/src/ask-password/ask-password.c @@ -50,8 +50,7 @@ static usec_t arg_timeout = DEFAULT_TIMEOUT_USEC; static bool arg_accept_cached = false; static bool arg_multiple = false; -static int help(void) { - +static void help(void) { printf("%s [OPTIONS...] MESSAGE\n\n" "Query the user for a system passphrase, via the TTY or an UI agent.\n\n" " -h --help Show this help\n" @@ -60,10 +59,8 @@ static int help(void) { " --no-tty Ask question via agent even on TTY\n" " --accept-cached Accept cached passwords\n" " --multiple List multiple passwords if available\n" - " --id=ID Query identifier (e.g. cryptsetup:/dev/sda5)\n", - program_invocation_short_name); - - return 0; + " --id=ID Query identifier (e.g. cryptsetup:/dev/sda5)\n" + , program_invocation_short_name); } static int parse_argv(int argc, char *argv[]) { @@ -93,12 +90,13 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) switch (c) { case 'h': - return help(); + help(); + return 0; case ARG_ICON: arg_icon = optarg; @@ -133,10 +131,9 @@ static int parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } - if (optind != argc-1) { - help(); + if (optind != argc - 1) { + log_error("%s: required argument missing.", program_invocation_short_name); return -EINVAL; } @@ -151,7 +148,8 @@ int main(int argc, char *argv[]) { log_parse_environment(); log_open(); - if ((r = parse_argv(argc, argv)) <= 0) + r = parse_argv(argc, argv); + if (r <= 0) goto finish; if (arg_timeout > 0) diff --git a/src/binfmt/binfmt.c b/src/binfmt/binfmt.c index 9fc5d4e4a4..c1c152239b 100644 --- a/src/binfmt/binfmt.c +++ b/src/binfmt/binfmt.c @@ -122,15 +122,12 @@ static int apply_file(const char *path, bool ignore_enoent) { return r; } -static int help(void) { - +static void help(void) { printf("%s [OPTIONS...] [CONFIGURATION FILE...]\n\n" "Registers binary formats.\n\n" " -h --help Show this help\n" - " --version Show package version\n", - program_invocation_short_name); - - return 0; + " --version Show package version\n" + , program_invocation_short_name); } static int parse_argv(int argc, char *argv[]) { @@ -150,12 +147,13 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) switch (c) { case 'h': - return help(); + help(); + return 0; case ARG_VERSION: puts(PACKAGE_STRING); @@ -168,7 +166,6 @@ static int parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } return 1; } diff --git a/src/boot/bootctl.c b/src/boot/bootctl.c index 359e273fd9..51b51c4254 100644 --- a/src/boot/bootctl.c +++ b/src/boot/bootctl.c @@ -32,17 +32,14 @@ #include "util.h" #include "utf8.h" -static int help(void) { - +static void help(void) { printf("%s [OPTIONS...] COMMAND ...\n\n" "Query or change firmware and boot manager settings.\n\n" " -h --help Show this help\n" " --version Show package version\n" "Commands:\n" - " status Show current boot settings\n", - program_invocation_short_name); - - return 0; + " status Show current boot settings\n" + , program_invocation_short_name); } static int parse_argv(int argc, char *argv[]) { @@ -51,8 +48,8 @@ static int parse_argv(int argc, char *argv[]) { }; static const struct option options[] = { - { "help", no_argument, NULL, 'h' }, - { "version", no_argument, NULL, ARG_VERSION }, + { "help", no_argument, NULL, 'h' }, + { "version", no_argument, NULL, ARG_VERSION }, {} }; @@ -61,12 +58,13 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "+h", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) switch (c) { case 'h': - return help(); + help(); + return 0; case ARG_VERSION: puts(PACKAGE_STRING); @@ -79,7 +77,6 @@ static int parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } return 1; } @@ -268,21 +265,17 @@ static int bootctl_main(int argc, char *argv[]) { } int main(int argc, char *argv[]) { - int r, retval = EXIT_FAILURE; + int r; log_parse_environment(); log_open(); r = parse_argv(argc, argv); - if (r < 0) + if (r <= 0) goto finish; - else if (r == 0) { - retval = EXIT_SUCCESS; - goto finish; - } r = bootctl_main(argc, argv); - retval = r < 0 ? EXIT_FAILURE : r; -finish: - return retval; + + finish: + return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS; } diff --git a/src/bootchart/bootchart.c b/src/bootchart/bootchart.c index 5683025b19..c0e176da9b 100644 --- a/src/bootchart/bootchart.c +++ b/src/bootchart/bootchart.c @@ -163,7 +163,7 @@ static void help(void) { DEFAULT_INIT); } -static int parse_args(int argc, char *argv[]) { +static int parse_argv(int argc, char *argv[]) { static const struct option options[] = { {"rel", no_argument, NULL, 'r'}, {"freq", required_argument, NULL, 'f'}, @@ -180,12 +180,14 @@ static int parse_args(int argc, char *argv[]) { {"entropy", no_argument, NULL, 'e'}, {} }; - int c; + int c, r; - while ((c = getopt_long(argc, argv, "erpf:n:o:i:FCchx:y:", options, NULL)) >= 0) { - int r; + if (getpid() == 1) + opterr = 0; + while ((c = getopt_long(argc, argv, "erpf:n:o:i:FCchx:y:", options, NULL)) >= 0) switch (c) { + case 'r': arg_relative = true; break; @@ -238,18 +240,22 @@ static int parse_args(int argc, char *argv[]) { break; case 'h': help(); - exit (EXIT_SUCCESS); + return 0; + case '?': + if (getpid() != 1) + return -EINVAL; + else + return 0; default: - break; + assert_not_reached("Unhandled option code."); } - } - if (arg_hz <= 0.0) { - fprintf(stderr, "Error: Frequency needs to be > 0\n"); + if (arg_hz <= 0) { + log_error("Frequency needs to be > 0"); return -EINVAL; } - return 0; + return 1; } static void do_journal_append(char *file) { @@ -314,9 +320,9 @@ int main(int argc, char *argv[]) { parse_conf(); - r = parse_args(argc, argv); - if (r < 0) - return EXIT_FAILURE; + r = parse_argv(argc, argv); + if (r <= 0) + return r == 0 ? EXIT_SUCCESS : EXIT_FAILURE; /* * If the kernel executed us through init=/usr/lib/systemd/systemd-bootchart, then diff --git a/src/bus-proxyd/bus-proxyd.c b/src/bus-proxyd/bus-proxyd.c index 1f17fe8c13..e5713d6af9 100644 --- a/src/bus-proxyd/bus-proxyd.c +++ b/src/bus-proxyd/bus-proxyd.c @@ -93,7 +93,7 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) switch (c) { @@ -156,7 +156,6 @@ static int parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } /* If the first command line argument is only "x" characters * we'll write who we are talking to into it, so that "ps" is diff --git a/src/cgls/cgls.c b/src/cgls/cgls.c index 052ac8ffca..6e9bd232a9 100644 --- a/src/cgls/cgls.c +++ b/src/cgls/cgls.c @@ -46,8 +46,7 @@ static bool arg_all = false; static int arg_full = -1; static char* arg_machine = NULL; -static int help(void) { - +static void help(void) { printf("%s [OPTIONS...] [CGROUP...]\n\n" "Recursively show control group contents.\n\n" " -h --help Show this help\n" @@ -56,10 +55,8 @@ static int help(void) { " -a --all Show all groups, including empty\n" " -l --full Do not ellipsize output\n" " -k Include kernel threads in output\n" - " -M --machine Show container\n", - program_invocation_short_name); - - return 0; + " -M --machine Show container\n" + , program_invocation_short_name); } static int parse_argv(int argc, char *argv[]) { @@ -84,12 +81,13 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 1); assert(argv); - while ((c = getopt_long(argc, argv, "hkalM:", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "hkalM:", options, NULL)) >= 0) switch (c) { case 'h': - return help(); + help(); + return 0; case ARG_VERSION: puts(PACKAGE_STRING); @@ -122,7 +120,6 @@ static int parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } return 1; } diff --git a/src/cgtop/cgtop.c b/src/cgtop/cgtop.c index fd0023b0a8..509fe4cdc8 100644 --- a/src/cgtop/cgtop.c +++ b/src/cgtop/cgtop.c @@ -548,8 +548,7 @@ static int display(Hashmap *a) { return 0; } -static int help(void) { - +static void help(void) { printf("%s [OPTIONS...]\n\n" "Show top control groups by their resource usage.\n\n" " -h --help Show this help\n" @@ -563,10 +562,8 @@ static int help(void) { " -d --delay=DELAY Delay between updates\n" " -n --iterations=N Run for N iterations before exiting\n" " -b --batch Run in batch mode, accepting no input\n" - " --depth=DEPTH Maximum traversal depth (default: %u)\n", - program_invocation_short_name, arg_depth); - - return 0; + " --depth=DEPTH Maximum traversal depth (default: %u)\n" + , program_invocation_short_name, arg_depth); } static int parse_argv(int argc, char *argv[]) { @@ -594,12 +591,13 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 1); assert(argv); - while ((c = getopt_long(argc, argv, "hptcmin:bd:", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "hptcmin:bd:", options, NULL)) >= 0) switch (c) { case 'h': - return help(); + help(); + return 0; case ARG_VERSION: puts(PACKAGE_STRING); @@ -674,7 +672,6 @@ static int parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } if (optind < argc) { log_error("Too many arguments."); diff --git a/src/core/main.c b/src/core/main.c index e9909ded5b..d2104cb551 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -952,13 +952,13 @@ static int parse_argv(int argc, char *argv[]) { * parse_proc_cmdline_word() or ignore. */ case '?': - default: - if (getpid() != 1) { - log_error("Unknown option code %c", c); + if (getpid() != 1) return -EINVAL; - } + else + return 0; - break; + default: + assert_not_reached("Unhandled option code."); } if (optind < argc && getpid() != 1) { diff --git a/src/core/shutdown.c b/src/core/shutdown.c index fde3ce9c27..1abc140e7d 100644 --- a/src/core/shutdown.c +++ b/src/core/shutdown.c @@ -74,9 +74,7 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 1); assert(argv); - opterr = 0; - - while ((c = getopt_long(argc, argv, ":", options, NULL)) >= 0) + while ((c = getopt_long(argc, argv, "", options, NULL)) >= 0) switch (c) { case ARG_LOG_LEVEL: @@ -115,11 +113,6 @@ static int parse_argv(int argc, char *argv[]) { break; case '?': - log_error("Unknown option %s.", argv[optind-1]); - return -EINVAL; - - case ':': - log_error("Missing argument to %s.", argv[optind-1]); return -EINVAL; default: diff --git a/src/delta/delta.c b/src/delta/delta.c index dd7523d473..cd8bd35716 100644 --- a/src/delta/delta.c +++ b/src/delta/delta.c @@ -473,18 +473,15 @@ static int process_suffix_chop(const char *arg) { return -EINVAL; } -static int help(void) { - +static void help(void) { printf("%s [OPTIONS...] [SUFFIX...]\n\n" "Find overridden configuration files.\n\n" " -h --help Show this help\n" " --version Show package version\n" " --no-pager Do not pipe output into a pager\n" " --diff[=1|0] Show a diff when overridden files differ\n" - " -t --type=LIST... Only display a selected set of override types\n", - program_invocation_short_name); - - return 0; + " -t --type=LIST... Only display a selected set of override types\n" + , program_invocation_short_name); } static int parse_flags(const char *flag_str, int flags) { @@ -534,7 +531,7 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 1); assert(argv); - while ((c = getopt_long(argc, argv, "ht:", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "ht:", options, NULL)) >= 0) switch (c) { @@ -585,7 +582,6 @@ static int parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } return 1; } diff --git a/src/detect-virt/detect-virt.c b/src/detect-virt/detect-virt.c index 8cf8dcfabc..ff5bee56f9 100644 --- a/src/detect-virt/detect-virt.c +++ b/src/detect-virt/detect-virt.c @@ -36,18 +36,15 @@ static enum { ONLY_CONTAINER } arg_mode = ANY_VIRTUALIZATION; -static int help(void) { - +static void help(void) { printf("%s [OPTIONS...]\n\n" "Detect execution in a virtualized environment.\n\n" " -h --help Show this help\n" " --version Show package version\n" " -c --container Only detect whether we are run in a container\n" " -v --vm Only detect whether we are run in a VM\n" - " -q --quiet Don't output anything, just set return value\n", - program_invocation_short_name); - - return 0; + " -q --quiet Don't output anything, just set return value\n" + , program_invocation_short_name); } static int parse_argv(int argc, char *argv[]) { @@ -70,12 +67,13 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "hqcv", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "hqcv", options, NULL)) >= 0) switch (c) { case 'h': - return help(); + help(); + return 0; case ARG_VERSION: puts(PACKAGE_STRING); @@ -100,10 +98,10 @@ static int parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } if (optind < argc) { - help(); + log_error("%s takes no arguments.", + program_invocation_short_name); return -EINVAL; } diff --git a/src/escape/escape.c b/src/escape/escape.c index ba2fb4789f..f2a0721861 100644 --- a/src/escape/escape.c +++ b/src/escape/escape.c @@ -37,8 +37,7 @@ static const char *arg_suffix = NULL; static const char *arg_template = NULL; static bool arg_path = false; -static int help(void) { - +static void help(void) { printf("%s [OPTIONS...] [NAME...]\n\n" "Show system and user paths.\n\n" " -h --help Show this help\n" @@ -47,10 +46,8 @@ static int help(void) { " --template=TEMPLATE Insert strings as instance into template\n" " -u --unescape Unescape strings\n" " -m --mangle Mangle strings\n" - " -p --path When escaping/unescaping assume the string is a path\n", - program_invocation_short_name); - - return 0; + " -p --path When escaping/unescaping assume the string is a path\n" + , program_invocation_short_name); } static int parse_argv(int argc, char *argv[]) { @@ -77,12 +74,13 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "hump", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "hump", options, NULL)) >= 0) switch (c) { case 'h': - return help(); + help(); + return 0; case ARG_VERSION: puts(PACKAGE_STRING); @@ -127,7 +125,6 @@ static int parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } if (optind >= argc) { log_error("Not enough arguments."); diff --git a/src/firstboot/firstboot.c b/src/firstboot/firstboot.c index 2c08ad481b..fd73adbac8 100644 --- a/src/firstboot/firstboot.c +++ b/src/firstboot/firstboot.c @@ -647,8 +647,7 @@ static int process_root_password(void) { return 0; } -static int help(void) { - +static void help(void) { printf("%s [OPTIONS...]\n\n" "Configures basic settings of the system.\n\n" " -h --help Show this help\n" @@ -670,10 +669,8 @@ static int help(void) { " --copy-timezone Copy timezone from host\n" " --copy-root-password Copy root password from host\n" " --copy Copy locale, timezone, root password\n" - " --setup-machine-id Generate a new random machine ID\n", - program_invocation_short_name); - - return 0; + " --setup-machine-id Generate a new random machine ID\n" + , program_invocation_short_name); } static int parse_argv(int argc, char *argv[]) { @@ -729,12 +726,13 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) switch (c) { case 'h': - return help(); + help(); + return 0; case ARG_VERSION: puts(PACKAGE_STRING); @@ -887,7 +885,6 @@ static int parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } return 1; } diff --git a/src/hostname/hostnamectl.c b/src/hostname/hostnamectl.c index 7e6922b0a0..69da54f1f3 100644 --- a/src/hostname/hostnamectl.c +++ b/src/hostname/hostnamectl.c @@ -321,8 +321,7 @@ static int set_deployment(sd_bus *bus, char **args, unsigned n) { return set_simple_string(bus, "SetDeployment", args[1]); } -static int help(void) { - +static void help(void) { printf("%s [OPTIONS...] COMMAND ...\n\n" "Query or change system hostname.\n\n" " -h --help Show this help\n" @@ -338,10 +337,8 @@ static int help(void) { " set-hostname NAME Set system hostname\n" " set-icon-name NAME Set icon name for host\n" " set-chassis NAME Set chassis type for host\n" - " set-deployment NAME Set deployment environment for host\n", - program_invocation_short_name); - - return 0; + " set-deployment NAME Set deployment environment for host\n" + , program_invocation_short_name); } static int parse_argv(int argc, char *argv[]) { @@ -371,12 +368,13 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "hH:M:", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "hH:M:", options, NULL)) >= 0) switch (c) { case 'h': - return help(); + help(); + return 0; case ARG_VERSION: puts(PACKAGE_STRING); @@ -415,7 +413,6 @@ static int parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } return 1; } diff --git a/src/journal-remote/journal-gatewayd.c b/src/journal-remote/journal-gatewayd.c index 6cfe22957a..db81fe3ca3 100644 --- a/src/journal-remote/journal-gatewayd.c +++ b/src/journal-remote/journal-gatewayd.c @@ -857,8 +857,7 @@ static int request_handler( return mhd_respond(connection, MHD_HTTP_NOT_FOUND, "Not found.\n"); } -static int help(void) { - +static void help(void) { printf("%s [OPTIONS...] ...\n\n" "HTTP server for journal events.\n\n" " -h --help Show this help\n" @@ -867,8 +866,6 @@ static int help(void) { " --key=KEY.PEM Server key in PEM format\n" " --trust=CERT.PEM Certificat authority certificate in PEM format\n", program_invocation_short_name); - - return 0; } static int parse_argv(int argc, char *argv[]) { @@ -898,7 +895,8 @@ static int parse_argv(int argc, char *argv[]) { switch(c) { case 'h': - return help(); + help(); + return 0; case ARG_VERSION: puts(PACKAGE_STRING); diff --git a/src/journal-remote/journal-remote.c b/src/journal-remote/journal-remote.c index 1df178691a..c8e3c235ac 100644 --- a/src/journal-remote/journal-remote.c +++ b/src/journal-remote/journal-remote.c @@ -1370,8 +1370,7 @@ static int parse_argv(int argc, char *argv[]) { return -EINVAL; default: - log_error("Unknown option code %c", c); - return -EINVAL; + assert_not_reached("Unknown option code."); } if (optind < argc) diff --git a/src/journal/cat.c b/src/journal/cat.c index a525bcf3e8..627c0624a5 100644 --- a/src/journal/cat.c +++ b/src/journal/cat.c @@ -36,18 +36,15 @@ static char *arg_identifier = NULL; static int arg_priority = LOG_INFO; static bool arg_level_prefix = true; -static int help(void) { - +static void help(void) { printf("%s [OPTIONS...] {COMMAND} ...\n\n" "Execute process with stdout/stderr connected to the journal.\n\n" " -h --help Show this help\n" " --version Show package version\n" " -t --identifier=STRING Set syslog identifier\n" " -p --priority=PRIORITY Set priority value (0..7)\n" - " --level-prefix=BOOL Control whether level prefix shall be parsed\n", - program_invocation_short_name); - - return 0; + " --level-prefix=BOOL Control whether level prefix shall be parsed\n" + , program_invocation_short_name); } static int parse_argv(int argc, char *argv[]) { @@ -71,12 +68,13 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "+ht:p:", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "+ht:p:", options, NULL)) >= 0) switch (c) { case 'h': - return help(); + help(); + return 0; case ARG_VERSION: puts(PACKAGE_STRING); @@ -120,7 +118,6 @@ static int parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } return 1; } diff --git a/src/journal/coredumpctl.c b/src/journal/coredumpctl.c index 2bc9021022..f5cf85a765 100644 --- a/src/journal/coredumpctl.c +++ b/src/journal/coredumpctl.c @@ -81,29 +81,6 @@ static Set *new_matches(void) { return set; } -static int help(void) { - - printf("%s [OPTIONS...]\n\n" - "List or retrieve coredumps from the journal.\n\n" - "Flags:\n" - " -h --help Show this help\n" - " --version Print version string\n" - " --no-pager Do not pipe output into a pager\n" - " --no-legend Do not print the column headers.\n" - " -1 Show information about most recent entry only\n" - " -F --field=FIELD List all values a certain field takes\n" - " -o --output=FILE Write output to FILE\n\n" - - "Commands:\n" - " list [MATCHES...] List available coredumps (default)\n" - " info [MATCHES...] Show detailed information about one or more coredumps\n" - " dump [MATCHES...] Print first matching coredump to stdout\n" - " gdb [MATCHES...] Start gdb for the first matching coredump\n" - , program_invocation_short_name); - - return 0; -} - static int add_match(Set *set, const char *match) { int r = -ENOMEM; unsigned pid; @@ -144,6 +121,26 @@ fail: return r; } +static void help(void) { + printf("%s [OPTIONS...]\n\n" + "List or retrieve coredumps from the journal.\n\n" + "Flags:\n" + " -h --help Show this help\n" + " --version Print version string\n" + " --no-pager Do not pipe output into a pager\n" + " --no-legend Do not print the column headers.\n" + " -1 Show information about most recent entry only\n" + " -F --field=FIELD List all values a certain field takes\n" + " -o --output=FILE Write output to FILE\n\n" + + "Commands:\n" + " list [MATCHES...] List available coredumps (default)\n" + " info [MATCHES...] Show detailed information about one or more coredumps\n" + " dump [MATCHES...] Print first matching coredump to stdout\n" + " gdb [MATCHES...] Start gdb for the first matching coredump\n" + , program_invocation_short_name); +} + static int parse_argv(int argc, char *argv[], Set *matches) { enum { ARG_VERSION = 0x100, @@ -171,7 +168,8 @@ static int parse_argv(int argc, char *argv[], Set *matches) { case 'h': arg_action = ACTION_NONE; - return help(); + help(); + return 0; case ARG_VERSION: arg_action = ACTION_NONE; diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c index 52fd8beb22..5c4a71d618 100644 --- a/src/journal/journalctl.c +++ b/src/journal/journalctl.c @@ -160,7 +160,7 @@ static int parse_boot_descriptor(const char *x, sd_id128_t *boot_id, int *offset return 0; } -static int help(void) { +static void help(void) { pager_open_if_enabled(); @@ -218,8 +218,6 @@ static int help(void) { " --verify Verify journal file consistency\n" #endif , program_invocation_short_name); - - return 0; } static int parse_argv(int argc, char *argv[]) { @@ -306,12 +304,13 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "hefo:aln::qmb::kD:p:c:u:F:xrM:", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "hefo:aln::qmb::kD:p:c:u:F:xrM:", options, NULL)) >= 0) switch (c) { case 'h': - return help(); + help(); + return 0; case ARG_VERSION: puts(PACKAGE_STRING); @@ -633,7 +632,6 @@ static int parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } if (arg_follow && !arg_no_tail && arg_lines < 0) arg_lines = 10; diff --git a/src/libsystemd/sd-bus/busctl.c b/src/libsystemd/sd-bus/busctl.c index 4545047011..b6839c13e7 100644 --- a/src/libsystemd/sd-bus/busctl.c +++ b/src/libsystemd/sd-bus/busctl.c @@ -320,7 +320,6 @@ static int status(sd_bus *bus, char *argv[]) { } static int help(void) { - printf("%s [OPTIONS...] {COMMAND} ...\n\n" "Introspect the bus.\n\n" " -h --help Show this help\n" @@ -341,8 +340,8 @@ static int help(void) { " list List bus names\n" " monitor [SERVICE...] Show bus traffic\n" " status NAME Show name status\n" - " help Show this help\n", - program_invocation_short_name); + " help Show this help\n" + , program_invocation_short_name); return 0; } @@ -386,7 +385,7 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "hH:M:", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "hH:M:", options, NULL)) >= 0) switch (c) { @@ -455,7 +454,6 @@ static int parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } if (!arg_unique && !arg_acquired && !arg_activatable) arg_unique = arg_acquired = arg_activatable = true; diff --git a/src/locale/localectl.c b/src/locale/localectl.c index 8acc212033..69d50076aa 100644 --- a/src/locale/localectl.c +++ b/src/locale/localectl.c @@ -440,8 +440,7 @@ static int list_x11_keymaps(sd_bus *bus, char **args, unsigned n) { return 0; } -static int help(void) { - +static void help(void) { printf("%s [OPTIONS...] COMMAND ...\n\n" "Query or change system locale and keyboard settings.\n\n" " -h --help Show this help\n" @@ -463,10 +462,8 @@ static int help(void) { " list-x11-keymap-layouts Show known X11 keyboard mapping layouts\n" " list-x11-keymap-variants [LAYOUT]\n" " Show known X11 keyboard mapping variants\n" - " list-x11-keymap-options Show known X11 keyboard mapping options\n", - program_invocation_short_name); - - return 0; + " list-x11-keymap-options Show known X11 keyboard mapping options\n" + , program_invocation_short_name); } static int parse_argv(int argc, char *argv[]) { @@ -494,12 +491,13 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "hH:M:", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "hH:M:", options, NULL)) >= 0) switch (c) { case 'h': - return help(); + help(); + return 0; case ARG_VERSION: puts(PACKAGE_STRING); @@ -534,7 +532,6 @@ static int parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } return 1; } diff --git a/src/login/inhibit.c b/src/login/inhibit.c index 24e8fb04bd..02b6b25751 100644 --- a/src/login/inhibit.c +++ b/src/login/inhibit.c @@ -122,8 +122,7 @@ static int print_inhibitors(sd_bus *bus, sd_bus_error *error) { return 0; } -static int help(void) { - +static void help(void) { printf("%s [OPTIONS...] {COMMAND} ...\n\n" "Execute a process while inhibiting shutdown/sleep/idle.\n\n" " -h --help Show this help\n" @@ -135,10 +134,8 @@ static int help(void) { " --who=STRING A descriptive string who is inhibiting\n" " --why=STRING A descriptive string why is being inhibited\n" " --mode=MODE One of block or delay\n" - " --list List active inhibitors\n", - program_invocation_short_name); - - return 0; + " --list List active inhibitors\n" + , program_invocation_short_name); } static int parse_argv(int argc, char *argv[]) { @@ -168,12 +165,13 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "+h", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "+h", options, NULL)) >= 0) switch (c) { case 'h': - return help(); + help(); + return 0; case ARG_VERSION: puts(PACKAGE_STRING); @@ -206,7 +204,6 @@ static int parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } if (arg_action == ACTION_INHIBIT && argc == 1) arg_action = ACTION_LIST; diff --git a/src/login/loginctl.c b/src/login/loginctl.c index ebe9c1f16c..1773276b95 100644 --- a/src/login/loginctl.c +++ b/src/login/loginctl.c @@ -1047,8 +1047,7 @@ static int terminate_seat(sd_bus *bus, char **args, unsigned n) { return 0; } -static int help(void) { - +static void help(void) { printf("%s [OPTIONS...] {COMMAND} ...\n\n" "Send control commands to or query the login manager.\n\n" " -h --help Show this help\n" @@ -1086,10 +1085,8 @@ static int help(void) { " show-seat NAME... Show properties of one or more seats\n" " attach NAME DEVICE... Attach one or more devices to a seat\n" " flush-devices Flush all device associations\n" - " terminate-seat NAME... Terminate all sessions on one or more seats\n", - program_invocation_short_name); - - return 0; + " terminate-seat NAME... Terminate all sessions on one or more seats\n" + , program_invocation_short_name); } static int parse_argv(int argc, char *argv[]) { @@ -1123,12 +1120,13 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "hp:als:H:M:", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "hp:als:H:M:", options, NULL)) >= 0) switch (c) { case 'h': - return help(); + help(); + return 0; case ARG_VERSION: puts(PACKAGE_STRING); @@ -1195,7 +1193,6 @@ static int parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } return 1; } diff --git a/src/machine-id-setup/machine-id-setup-main.c b/src/machine-id-setup/machine-id-setup-main.c index 1c933ce600..85bbfc4299 100644 --- a/src/machine-id-setup/machine-id-setup-main.c +++ b/src/machine-id-setup/machine-id-setup-main.c @@ -31,16 +31,13 @@ static const char *arg_root = ""; -static int help(void) { - +static void help(void) { printf("%s [OPTIONS...]\n\n" "Initialize /etc/machine-id from a random source.\n\n" " -h --help Show this help\n" " --version Show package version\n" " --root=ROOT Filesystem root\n", program_invocation_short_name); - - return 0; } static int parse_argv(int argc, char *argv[]) { @@ -62,12 +59,13 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "hqcv", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "hqcv", options, NULL)) >= 0) switch (c) { case 'h': - return help(); + help(); + return 0; case ARG_VERSION: puts(PACKAGE_STRING); @@ -84,7 +82,6 @@ static int parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } if (optind < argc) { log_error("Extraneous arguments"); diff --git a/src/machine/machinectl.c b/src/machine/machinectl.c index 574c988e82..02d5d301c0 100644 --- a/src/machine/machinectl.c +++ b/src/machine/machinectl.c @@ -779,8 +779,7 @@ static int login_machine(sd_bus *bus, char **args, unsigned n) { return 0; } -static int help(void) { - +static void help(void) { printf("%s [OPTIONS...] {COMMAND} ...\n\n" "Send control commands to or query the virtual machine and container registration manager.\n\n" " -h --help Show this help\n" @@ -804,8 +803,6 @@ static int help(void) { " kill NAME... Send signal to processes of a VM/container\n" " terminate NAME... Terminate one or more VMs/containers\n", program_invocation_short_name); - - return 0; } static int parse_argv(int argc, char *argv[]) { @@ -837,12 +834,13 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "hp:als:H:M:", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "hp:als:H:M:", options, NULL)) >= 0) switch (c) { case 'h': - return help(); + help(); + return 0; case ARG_VERSION: puts(PACKAGE_STRING); @@ -904,7 +902,6 @@ static int parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } return 1; } diff --git a/src/modules-load/modules-load.c b/src/modules-load/modules-load.c index ecb84da6d7..c77b092a62 100644 --- a/src/modules-load/modules-load.c +++ b/src/modules-load/modules-load.c @@ -181,15 +181,12 @@ static int apply_file(struct kmod_ctx *ctx, const char *path, bool ignore_enoent return r; } -static int help(void) { - +static void help(void) { printf("%s [OPTIONS...] [CONFIGURATION FILE...]\n\n" "Loads statically configured kernel modules.\n\n" " -h --help Show this help\n" " --version Show package version\n", program_invocation_short_name); - - return 0; } static int parse_argv(int argc, char *argv[]) { @@ -209,12 +206,13 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) switch (c) { case 'h': - return help(); + help(); + return 0; case ARG_VERSION: puts(PACKAGE_STRING); @@ -227,7 +225,6 @@ static int parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } return 1; } diff --git a/src/network/networkd-wait-online.c b/src/network/networkd-wait-online.c index d588935e93..6c2fdd1b2c 100644 --- a/src/network/networkd-wait-online.c +++ b/src/network/networkd-wait-online.c @@ -30,17 +30,14 @@ static bool arg_quiet = false; static char **arg_interfaces = NULL; -static int help(void) { - +static void help(void) { printf("%s [OPTIONS...]\n\n" "Block until network is configured.\n\n" " -h --help Show this help\n" " --version Print version string\n" " -q --quiet Do not show status information\n" - " -i --interface=INTERFACE Block until at least these interfaces have appeared\n", - program_invocation_short_name); - - return 0; + " -i --interface=INTERFACE Block until at least these interfaces have appeared\n" + , program_invocation_short_name); } static int parse_argv(int argc, char *argv[]) { @@ -62,12 +59,13 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "+hq", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "+hq", options, NULL)) >= 0) switch (c) { case 'h': - return help(); + help(); + return 0; case 'q': arg_quiet = true; @@ -90,7 +88,6 @@ static int parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } return 1; } diff --git a/src/notify/notify.c b/src/notify/notify.c index f463c4dd86..2148ae0dfe 100644 --- a/src/notify/notify.c +++ b/src/notify/notify.c @@ -42,8 +42,7 @@ static const char *arg_status = NULL; static bool arg_booted = false; static const char *arg_readahead = NULL; -static int help(void) { - +static void help(void) { printf("%s [OPTIONS...] [VARIABLE=VALUE...]\n\n" "Notify the init system about service status updates.\n\n" " -h --help Show this help\n" @@ -54,8 +53,6 @@ static int help(void) { " --booted Returns 0 if the system was booted up with systemd, non-zero otherwise\n" " --readahead=ACTION Controls read-ahead operations\n", program_invocation_short_name); - - return 0; } static int parse_argv(int argc, char *argv[]) { @@ -85,12 +82,13 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) switch (c) { case 'h': - return help(); + help(); + return 0; case ARG_VERSION: puts(PACKAGE_STRING); @@ -131,7 +129,6 @@ static int parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } if (optind >= argc && !arg_ready && diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c index b118c739e8..76e86b7e05 100644 --- a/src/nspawn/nspawn.c +++ b/src/nspawn/nspawn.c @@ -166,8 +166,7 @@ static unsigned long arg_personality = 0xffffffffLU; static const char *arg_image = NULL; static Volatile arg_volatile = VOLATILE_NO; -static int help(void) { - +static void help(void) { printf("%s [OPTIONS...] [PATH] [ARGUMENTS...]\n\n" "Spawn a minimal namespace container for debugging, testing and building.\n\n" " -h --help Show this help\n" @@ -216,8 +215,6 @@ static int help(void) { " the service unit nspawn is running in\n" " --volatile[=MODE] Run the system in volatile mode\n", program_invocation_short_name); - - return 0; } static int parse_argv(int argc, char *argv[]) { @@ -285,12 +282,13 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "+hD:u:bL:M:jS:Z:qi:", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "+hD:u:bL:M:jS:Z:qi:", options, NULL)) >= 0) switch (c) { case 'h': - return help(); + help(); + return 0; case ARG_VERSION: puts(PACKAGE_STRING); @@ -593,7 +591,6 @@ static int parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } if (arg_share_system) arg_register = false; diff --git a/src/path/path.c b/src/path/path.c index c2936e0bca..347921a07e 100644 --- a/src/path/path.c +++ b/src/path/path.c @@ -77,18 +77,6 @@ static const char* const path_table[_SD_PATH_MAX] = { [SD_PATH_SEARCH_CONFIGURATION] = "search-configuration", }; -static int help(void) { - - printf("%s [OPTIONS...] [NAME...]\n\n" - "Show system and user paths.\n\n" - " -h --help Show this help\n" - " --version Show package version\n" - " --suffix=SUFFIX Suffix to append to paths\n", - program_invocation_short_name); - - return 0; -} - static int list_homes(void) { uint64_t i = 0; int r = 0; @@ -135,6 +123,15 @@ static int print_home(const char *n) { return -ENOTSUP; } +static void help(void) { + printf("%s [OPTIONS...] [NAME...]\n\n" + "Show system and user paths.\n\n" + " -h --help Show this help\n" + " --version Show package version\n" + " --suffix=SUFFIX Suffix to append to paths\n", + program_invocation_short_name); +} + static int parse_argv(int argc, char *argv[]) { enum { @@ -154,12 +151,13 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) switch (c) { case 'h': - return help(); + help(); + return 0; case ARG_VERSION: puts(PACKAGE_STRING); @@ -176,7 +174,6 @@ static int parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } return 1; } diff --git a/src/readahead/readahead.c b/src/readahead/readahead.c index 73cf538055..35176e9379 100644 --- a/src/readahead/readahead.c +++ b/src/readahead/readahead.c @@ -36,31 +36,26 @@ unsigned arg_files_max = 16*1024; off_t arg_file_size_max = READAHEAD_FILE_SIZE_MAX; usec_t arg_timeout = 2*USEC_PER_MINUTE; -static int help(void) { - - printf("%s [OPTIONS...] collect [DIRECTORY]\n\n" +static void help(void) { + printf("%1$s [OPTIONS...] collect [DIRECTORY]\n\n" "Collect read-ahead data on early boot.\n\n" " -h --help Show this help\n" " --version Show package version\n" " --files-max=INT Maximum number of files to read ahead\n" " --file-size-max=BYTES Maximum size of files to read ahead\n" - " --timeout=USEC Maximum time to spend collecting data\n\n\n", - program_invocation_short_name); - - printf("%s [OPTIONS...] replay [DIRECTORY]\n\n" + " --timeout=USEC Maximum time to spend collecting data\n" + "\n\n" + "%1$s [OPTIONS...] replay [DIRECTORY]\n\n" "Replay collected read-ahead data on early boot.\n\n" " -h --help Show this help\n" " --version Show package version\n" - " --file-size-max=BYTES Maximum size of files to read ahead\n\n\n", - program_invocation_short_name); - - printf("%s [OPTIONS...] analyze [PACK FILE]\n\n" + " --file-size-max=BYTES Maximum size of files to read ahead\n" + "\n\n" + "%1$s [OPTIONS...] analyze [PACK-FILE]\n\n" "Analyze collected read-ahead data.\n\n" " -h --help Show this help\n" " --version Show package version\n", program_invocation_short_name); - - return 0; } static int parse_argv(int argc, char *argv[]) { @@ -86,12 +81,13 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) switch (c) { case 'h': - return help(); + help(); + return 0; case ARG_VERSION: puts(PACKAGE_STRING); @@ -131,11 +127,11 @@ static int parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } if (optind != argc-1 && optind != argc-2) { - help(); + log_error("%s: wrong number of arguments.", + program_invocation_short_name); return -EINVAL; } diff --git a/src/resolve-host/resolve-host.c b/src/resolve-host/resolve-host.c index 80ce9cb237..987b43a0cb 100644 --- a/src/resolve-host/resolve-host.c +++ b/src/resolve-host/resolve-host.c @@ -448,7 +448,7 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "h46i:t:c:", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "h46i:t:c:", options, NULL)) >= 0) switch(c) { case 'h': @@ -514,7 +514,6 @@ static int parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } if (arg_type == 0 && arg_class != 0) { log_error("--class= may only be used in conjunction with --type="); diff --git a/src/run/run.c b/src/run/run.c index b9be1455c4..f8f0ea2832 100644 --- a/src/run/run.c +++ b/src/run/run.c @@ -48,8 +48,7 @@ static bool arg_nice_set = false; static char **arg_environment = NULL; static char **arg_property = NULL; -static int help(void) { - +static void help(void) { printf("%s [OPTIONS...] COMMAND [ARGS...]\n\n" "Run the specified command in a transient scope or service unit.\n\n" " -h --help Show this help\n" @@ -70,8 +69,6 @@ static int help(void) { " --nice=NICE Nice level\n" " --setenv=NAME=VALUE Set environment\n", program_invocation_short_name); - - return 0; } static int parse_argv(int argc, char *argv[]) { @@ -119,12 +116,13 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "+hrH:M:p:", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "+hrH:M:p:", options, NULL)) >= 0) switch (c) { case 'h': - return help(); + help(); + return 0; case ARG_VERSION: puts(PACKAGE_STRING); @@ -215,7 +213,6 @@ static int parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } if (optind >= argc) { log_error("Command line to execute required."); diff --git a/src/sleep/sleep.c b/src/sleep/sleep.c index 5adbea5956..ca00eea4ab 100644 --- a/src/sleep/sleep.c +++ b/src/sleep/sleep.c @@ -134,8 +134,7 @@ static int execute(char **modes, char **states) { return r; } -static int help(void) { - +static void help(void) { printf("%s COMMAND\n\n" "Suspend the system, hibernate the system, or both.\n\n" "Commands:\n" @@ -144,10 +143,7 @@ static int help(void) { " suspend Suspend the system\n" " hibernate Hibernate the system\n" " hybrid-sleep Both hibernate and suspend the system\n" - , program_invocation_short_name - ); - - return 0; + , program_invocation_short_name); } static int parse_argv(int argc, char *argv[]) { @@ -166,10 +162,11 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "+h", options, NULL)) >= 0) + while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) switch(c) { case 'h': - return help(); + help(); + return 0; /* done */ case ARG_VERSION: puts(PACKAGE_STRING); diff --git a/src/socket-proxy/socket-proxyd.c b/src/socket-proxy/socket-proxyd.c index b791305dc5..f6e6672cdf 100644 --- a/src/socket-proxy/socket-proxyd.c +++ b/src/socket-proxy/socket-proxyd.c @@ -589,17 +589,13 @@ static int add_listen_socket(Context *context, int fd) { return 0; } -static int help(void) { - - printf("%s [HOST:PORT]\n" - "%s [SOCKET]\n\n" +static void help(void) { + printf("%1$s [HOST:PORT]\n" + "%1$s [SOCKET]\n\n" "Bidirectionally proxy local sockets to another (possibly remote) socket.\n\n" " -h --help Show this help\n" " --version Show package version\n", - program_invocation_short_name, program_invocation_short_name); - - return 0; } static int parse_argv(int argc, char *argv[]) { @@ -620,12 +616,13 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) switch (c) { case 'h': - return help(); + help(); + return 0; case ARG_VERSION: puts(PACKAGE_STRING); @@ -638,7 +635,6 @@ static int parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } if (optind >= argc) { log_error("Not enough parameters."); diff --git a/src/sysctl/sysctl.c b/src/sysctl/sysctl.c index 06defa5b7c..8ce9870432 100644 --- a/src/sysctl/sysctl.c +++ b/src/sysctl/sysctl.c @@ -214,16 +214,13 @@ static int parse_file(Hashmap *sysctl_options, const char *path, bool ignore_eno return r; } -static int help(void) { - +static void help(void) { printf("%s [OPTIONS...] [CONFIGURATION FILE...]\n\n" "Applies kernel sysctl settings.\n\n" " -h --help Show this help\n" " --version Show package version\n" - " --prefix=PATH Only apply rules that apply to paths with the specified prefix\n", - program_invocation_short_name); - - return 0; + " --prefix=PATH Only apply rules that apply to paths with the specified prefix\n" + , program_invocation_short_name); } static int parse_argv(int argc, char *argv[]) { @@ -245,12 +242,13 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) switch (c) { case 'h': - return help(); + help(); + return 0; case ARG_VERSION: puts(PACKAGE_STRING); @@ -276,7 +274,6 @@ static int parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } return 1; } diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c index 8ec0db2b2d..daf7e31de9 100644 --- a/src/systemctl/systemctl.c +++ b/src/systemctl/systemctl.c @@ -5432,7 +5432,7 @@ static int is_system_running(sd_bus *bus, char **args) { return streq(state, "running") ? EXIT_SUCCESS : EXIT_FAILURE; } -static int systemctl_help(void) { +static void systemctl_help(void) { pager_open_if_enabled(); @@ -5557,12 +5557,9 @@ static int systemctl_help(void) { " hibernate Hibernate the system\n" " hybrid-sleep Hibernate and suspend the system\n", program_invocation_short_name); - - return 0; } -static int halt_help(void) { - +static void halt_help(void) { printf("%s [OPTIONS...]%s\n\n" "%s the system.\n\n" " --help Show this help\n" @@ -5578,12 +5575,9 @@ static int halt_help(void) { arg_action == ACTION_REBOOT ? "Reboot" : arg_action == ACTION_POWEROFF ? "Power off" : "Halt"); - - return 0; } -static int shutdown_help(void) { - +static void shutdown_help(void) { printf("%s [OPTIONS...] [TIME] [WALL...]\n\n" "Shut down the system.\n\n" " --help Show this help\n" @@ -5595,12 +5589,9 @@ static int shutdown_help(void) { " --no-wall Don't send wall message before halt/power-off/reboot\n" " -c Cancel a pending shutdown\n", program_invocation_short_name); - - return 0; } -static int telinit_help(void) { - +static void telinit_help(void) { printf("%s [OPTIONS...] {COMMAND}\n\n" "Send control commands to the init daemon.\n\n" " --help Show this help\n" @@ -5613,18 +5604,13 @@ static int telinit_help(void) { " q, Q Reload init daemon configuration\n" " u, U Reexecute init daemon\n", program_invocation_short_name); - - return 0; } -static int runlevel_help(void) { - +static void runlevel_help(void) { printf("%s [OPTIONS...]\n\n" "Prints the previous and current runlevel of the init system.\n\n" " --help Show this help\n", program_invocation_short_name); - - return 0; } static void help_types(void) { @@ -5719,12 +5705,13 @@ static int systemctl_parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "ht:p:alqfs:H:M:n:o:ir", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "ht:p:alqfs:H:M:n:o:ir", options, NULL)) >= 0) switch (c) { case 'h': - return systemctl_help(); + systemctl_help(); + return 0; case ARG_VERSION: puts(PACKAGE_STRING); @@ -5992,7 +5979,6 @@ static int systemctl_parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } if (arg_transport != BUS_TRANSPORT_LOCAL && arg_scope != UNIT_FILE_SYSTEM) { log_error("Cannot access user instance remotely."); @@ -6032,11 +6018,12 @@ static int halt_parse_argv(int argc, char *argv[]) { if (runlevel == '0' || runlevel == '6') arg_force = 2; - while ((c = getopt_long(argc, argv, "pfwdnih", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "pfwdnih", options, NULL)) >= 0) switch (c) { case ARG_HELP: - return halt_help(); + halt_help(); + return 0; case ARG_HALT: arg_action = ACTION_HALT; @@ -6079,7 +6066,6 @@ static int halt_parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } if (arg_action == ACTION_REBOOT && (argc == optind || argc == optind + 1)) { r = update_reboot_param_file(argc == optind + 1 ? argv[optind] : NULL); @@ -6164,11 +6150,12 @@ static int shutdown_parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "HPrhkt:afFc", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "HPrhkt:afFc", options, NULL)) >= 0) switch (c) { case ARG_HELP: - return shutdown_help(); + shutdown_help(); + return 0; case 'H': arg_action = ACTION_HALT; @@ -6217,7 +6204,6 @@ static int shutdown_parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } if (argc > optind && arg_action != ACTION_CANCEL_SHUTDOWN) { r = parse_time_spec(argv[optind], &arg_when); @@ -6278,11 +6264,12 @@ static int telinit_parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "", options, NULL)) >= 0) switch (c) { case ARG_HELP: - return telinit_help(); + telinit_help(); + return 0; case ARG_NO_WALL: arg_no_wall = true; @@ -6294,10 +6281,10 @@ static int telinit_parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } if (optind >= argc) { - telinit_help(); + log_error("%s: required argument missing.", + program_invocation_short_name); return -EINVAL; } @@ -6343,11 +6330,12 @@ static int runlevel_parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "", options, NULL)) >= 0) switch (c) { case ARG_HELP: - return runlevel_help(); + runlevel_help(); + return 0; case '?': return -EINVAL; @@ -6355,7 +6343,6 @@ static int runlevel_parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } if (optind < argc) { log_error("Too many arguments."); diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c index b7c1609242..19568adf7a 100644 --- a/src/sysusers/sysusers.c +++ b/src/sysusers/sysusers.c @@ -1413,16 +1413,13 @@ static void free_database(Hashmap *by_name, Hashmap *by_id) { hashmap_free(by_id); } -static int help(void) { - +static void help(void) { printf("%s [OPTIONS...] [CONFIGURATION FILE...]\n\n" "Creates system user accounts.\n\n" " -h --help Show this help\n" " --version Show package version\n" - " --root=PATH Operate on an alternate filesystem root\n", - program_invocation_short_name); - - return 0; + " --root=PATH Operate on an alternate filesystem root\n" + , program_invocation_short_name); } static int parse_argv(int argc, char *argv[]) { @@ -1444,12 +1441,13 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) switch (c) { case 'h': - return help(); + help(); + return 0; case ARG_VERSION: puts(PACKAGE_STRING); @@ -1471,7 +1469,6 @@ static int parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } return 1; } diff --git a/src/test/test-libudev.c b/src/test/test-libudev.c index f5c8bc768d..912b61396a 100644 --- a/src/test/test-libudev.c +++ b/src/test/test-libudev.c @@ -1,3 +1,4 @@ +/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ /*** This file is part of systemd. @@ -423,6 +424,7 @@ int main(int argc, char *argv[]) { const char *syspath = "/devices/virtual/mem/null"; const char *subsystem = NULL; char path[1024]; + int c; udev = udev_new(); printf("context: %p\n", udev); @@ -433,34 +435,38 @@ int main(int argc, char *argv[]) { udev_set_log_fn(udev, log_fn); printf("set log: %p\n", log_fn); - for (;;) { - int option; - option = getopt_long(argc, argv, "+p:s:dhV", options, NULL); - if (option == -1) - break; + while ((c = getopt_long(argc, argv, "p:s:dhV", options, NULL)) >= 0) + switch (c) { - switch (option) { case 'p': syspath = optarg; break; + case 's': subsystem = optarg; break; + case 'd': if (udev_get_log_priority(udev) < LOG_INFO) udev_set_log_priority(udev, LOG_INFO); break; + case 'h': printf("--debug --syspath= --subsystem= --help\n"); goto out; + case 'V': printf("%s\n", VERSION); goto out; - default: + + case '?': goto out; + + default: + assert_not_reached("Unhandled option code."); } - } + /* add sys path if needed */ if (!startswith(syspath, "/sys")) { diff --git a/src/timedate/timedatectl.c b/src/timedate/timedatectl.c index 53123154db..36c3f3cfcd 100644 --- a/src/timedate/timedatectl.c +++ b/src/timedate/timedatectl.c @@ -374,8 +374,7 @@ static int list_timezones(sd_bus *bus, char **args, unsigned n) { return 0; } -static int help(void) { - +static void help(void) { printf("%s [OPTIONS...] COMMAND ...\n\n" "Query or change system time and date settings.\n\n" " -h --help Show this help message\n" @@ -393,8 +392,6 @@ static int help(void) { " set-local-rtc BOOL Control whether RTC is in local time\n" " set-ntp BOOL Control whether NTP is enabled\n", program_invocation_short_name); - - return 0; } static int parse_argv(int argc, char *argv[]) { @@ -422,12 +419,13 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "hH:M:", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "hH:M:", options, NULL)) >= 0) switch (c) { case 'h': - return help(); + help(); + return 0; case ARG_VERSION: puts(PACKAGE_STRING); @@ -462,7 +460,6 @@ static int parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } return 1; } diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c index 68cfa55ce9..79fd0b72e7 100644 --- a/src/tmpfiles/tmpfiles.c +++ b/src/tmpfiles/tmpfiles.c @@ -1407,8 +1407,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) { return 0; } -static int help(void) { - +static void help(void) { printf("%s [OPTIONS...] [CONFIGURATION FILE...]\n\n" "Creates, deletes and cleans up volatile and temporary files and directories.\n\n" " -h --help Show this help\n" @@ -1421,8 +1420,6 @@ static int help(void) { " --exclude-prefix=PATH Ignore rules that apply to paths with the specified prefix\n" " --root=PATH Operate on an alternate filesystem root\n", program_invocation_short_name); - - return 0; } static int parse_argv(int argc, char *argv[]) { @@ -1456,12 +1453,13 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) switch (c) { case 'h': - return help(); + help(); + return 0; case ARG_VERSION: puts(PACKAGE_STRING); @@ -1509,7 +1507,6 @@ static int parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } if (!arg_clean && !arg_create && !arg_remove) { log_error("You need to specify at least one of --clean, --create or --remove."); diff --git a/src/tty-ask-password-agent/tty-ask-password-agent.c b/src/tty-ask-password-agent/tty-ask-password-agent.c index 94ae5670f7..528b899c08 100644 --- a/src/tty-ask-password-agent/tty-ask-password-agent.c +++ b/src/tty-ask-password-agent/tty-ask-password-agent.c @@ -588,8 +588,7 @@ finish: return r; } -static int help(void) { - +static void help(void) { printf("%s [OPTIONS...]\n\n" "Process system password requests.\n\n" " -h --help Show this help\n" @@ -601,8 +600,6 @@ static int help(void) { " --plymouth Ask question with Plymouth instead of on TTY\n" " --console Ask question on /dev/console instead of current TTY\n", program_invocation_short_name); - - return 0; } static int parse_argv(int argc, char *argv[]) { @@ -634,12 +631,13 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) switch (c) { case 'h': - return help(); + help(); + return 0; case ARG_VERSION: puts(PACKAGE_STRING); @@ -676,10 +674,9 @@ static int parse_argv(int argc, char *argv[]) { default: assert_not_reached("Unhandled option"); } - } if (optind != argc) { - help(); + log_error("%s takes no arguments.", program_invocation_short_name); return -EINVAL; } diff --git a/src/udev/udevadm.c b/src/udev/udevadm.c index 1c06c1aacd..2c11550467 100644 --- a/src/udev/udevadm.c +++ b/src/udev/udevadm.c @@ -1,3 +1,4 @@ +/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ /* * Copyright (C) 2007-2012 Kay Sievers * @@ -89,7 +90,7 @@ int main(int argc, char *argv[]) { }; const char *command; unsigned int i; - int rc = 1; + int rc = 1, c; udev = udev_new(); if (udev == NULL) @@ -100,32 +101,30 @@ int main(int argc, char *argv[]) { udev_set_log_fn(udev, udev_main_log); label_init("/dev"); - for (;;) { - int option; + while ((c = getopt_long(argc, argv, "+dhV", options, NULL)) >= 0) + switch (c) { - option = getopt_long(argc, argv, "+dhV", options, NULL); - if (option == -1) - break; - - switch (option) { case 'd': log_set_max_level(LOG_DEBUG); udev_set_log_priority(udev, LOG_DEBUG); break; + case 'h': rc = adm_help(udev, argc, argv); goto out; + case 'V': rc = adm_version(udev, argc, argv); goto out; + default: goto out; } - } + command = argv[optind]; if (command != NULL) - for (i = 0; i < ELEMENTSOF(udevadm_cmds); i++) { + for (i = 0; i < ELEMENTSOF(udevadm_cmds); i++) if (streq(udevadm_cmds[i]->name, command)) { argc -= optind; argv += optind; @@ -134,10 +133,8 @@ int main(int argc, char *argv[]) { rc = run_command(udev, udevadm_cmds[i], argc, argv); goto out; } - } - fprintf(stderr, "missing or unknown command\n\n"); - adm_help(udev, argc, argv); + fprintf(stderr, "%s: missing or unknown command", program_invocation_short_name); rc = 2; out: label_finish();