From a3c29314f1d93e367a204bddf93c2e355a3bd070 Mon Sep 17 00:00:00 2001 From: Ruediger Meier Date: Sun, 18 Jun 2017 15:19:39 +0200 Subject: [PATCH 1/7] tools: add checkusage.sh Just some simple generic tests for our UL commands, regarding options --help, --version and --unknownopt. The script looks still a bit weired but could be polished to be used in tests/. It would be the first time testing at least "something" for *all* built binaries (currently 109! commands). For the record here are the current candidates with possible problems: $ make checkusage agetty: --unknownopt, stderr too long: 45 blockdev: --unknownopt, stderr too long: 28 flock: --help, no stdout flock: --help, non-empty stderr getopt: --help, returns error kill: --unknownopt, stderr too short: 1 lsipc: --unknownopt, stderr too long: 77 pg: --unknownopt, stderr too long: 23 renice: --unknownopt, stderr too long: 18 rtcwake: --unknownopt, non-empty stdout rtcwake: --unknownopt, stderr too long: 21 sulogin: --unknownopt, stderr too long: 17 write: --unknownopt, stderr too long: 12 Signed-off-by: Ruediger Meier --- Makefile.am | 6 +- tools/checkusage.sh | 145 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 150 insertions(+), 1 deletion(-) create mode 100755 tools/checkusage.sh diff --git a/Makefile.am b/Makefile.am index 28a9d04e8..325d1f4fa 100644 --- a/Makefile.am +++ b/Makefile.am @@ -183,11 +183,15 @@ checkdecl: checkcompletion: @ $(top_srcdir)/tools/checkcompletion.sh $(top_srcdir) +checkusage: + @ $(top_srcdir)/tools/checkusage.sh \ + $(bin_PROGRAMS) $(sbin_PROGRAMS) \ + $(usrbin_exec_PROGRAMS) $(usrsbin_exec_PROGRAMS) + DISTCHECK_CONFIGURE_FLAGS = \ --disable-use-tty-group \ --disable-silent-rules \ --enable-all-programs \ - --disable-makeinstall-chown \ --enable-static-programs \ --enable-gtk-doc \ --with-python \ diff --git a/tools/checkusage.sh b/tools/checkusage.sh new file mode 100755 index 000000000..68bf57154 --- /dev/null +++ b/tools/checkusage.sh @@ -0,0 +1,145 @@ +#!/bin/bash + +## This script is potentially dangerous! Don't run it on +## arbitrary commands. + +export LC_ALL=C + +if [ "$#" -lt 1 ]; then + echo "usage: $0 program..." >&2 + echo " or try 'make checkusage' to check all built programs" >&2 + exit 1 +fi + +builddir="." +cmds=$(echo $@ | tr ' ' '\n' | sort) + +## Set alternative options for --help, --version +## or --unknownopt. "x" means "not implemented". +## +## Examples: +## alt_whereis__help="-h" # in past whereis(1) had no longopt for --help +## alt_more__help="x" # more(1) had neither --help nor -h + +alt_fsck__unknownopt="-Tunknown" # no title (-T) and pass -unknown to fsck.foo + +function exec_option { + local cmdb=$1 + local cmd=$2 + opt=$3 + + local alt="alt_${cmdb}${opt}" + alt=${alt//-/_} + alt=${alt//./_} + alt=$(eval printf -- \"\$${alt}\") + if test -n "$alt"; then + if test "$alt" = "x"; then + return 1 + fi + opt=$alt + fi + + out=$("$cmd" "$opt" 2>/dev/null) + err=$("$cmd" "$opt" 2>&1 >/dev/null) + ret=$? + + # hardcoded ... nologin should always return false + if test "$cmdb" = "nologin" && + test "$opt" = "--help" -o "$opt" = "--version"; then + if test "$ret" = "0"; then + echo "$cmdb, $opt, should return false" + fi + ret=0 + fi + + return 0 +} + + +function check_help { + local cb=$1 + local c=$2 + + if ! exec_option "$cb" "$c" --help; then + return 1 + fi + + if test $ret != 0; then + echo "$cb: $opt, returns error" + else + if test -z "$out"; then + echo "$cb: $opt, no stdout" + fi + if test -n "$err"; then + echo "$cb: $opt, non-empty stderr" + fi + fi + return 0 +} + +function check_version { + local cb=$1 + local c=$2 + + if ! exec_option "$cb" "$c" --version; then + return 1 + fi + + if test $ret != 0; then + echo "$cb: $opt, returns error" + else + if test -z "$out"; then + echo "$cb: $opt, no stdout" + fi + if test -n "$err"; then + echo "$cb: $opt, non-empty stderr" + fi + fi +} + +function check_unknownopt { + local cb=$1 + local c=$2 + local nohelp=$3 + + if ! exec_option "$cb" "$c" --unknownopt; then + return 1 + fi + + if test $ret = 0; then + echo "$cb: $opt, returns no error" + fi + if test -n "$out"; then + echo "$cb: $opt, non-empty stdout" + fi + if test -z "$err"; then + echo "$cb: $opt, no stderr" + elif test -z "$nohelp" -o "$nohelp" != "yes"; then + out_len=$(echo "$out" | wc -l) + err_len=$(echo "$err" | wc -l) + if test "$err_len" -gt 2; then + # hardcoded ignore ... mkfs sends options to mkfs.ext2 + if test "$cb" != "mkfs" -a "$cb" != "fsck"; then + echo "$cb: $opt, stderr too long: $err_len" + fi + elif test "$err_len" -lt 2; then + echo "$cb: $opt, stderr too short: $err_len" + fi + fi +} + +for cb in $cmds; do + c="$builddir/$cb" + if ! type "$c" &>/dev/null; then + echo "$cb: does not exist" + continue + fi + + nohelp="no" + if ! check_help "$cb" "$c"; then + nohelp="yes" + fi + check_version "$cb" "$c" + check_unknownopt "$cb" "$c" "$nohelp" +done + From 6d7bee26bc4f5586b073f9b539453a7499403ea7 Mon Sep 17 00:00:00 2001 From: Ruediger Meier Date: Mon, 19 Jun 2017 00:02:44 +0200 Subject: [PATCH 2/7] flock, getopt: write --help to stdout and return 0 ... and use errtryhelp() instead of usage(). Note in past "getopt --help" returned 2. But it is otherwise documented and was just a mistake IMO. See the unreachable exit(0) which was removed here: d1d03b54 Signed-off-by: Ruediger Meier --- misc-utils/getopt.c | 46 ++++++++--------- sys-utils/flock.c | 50 ++++++++++--------- tests/expected/getopt/options-compatible | 2 +- .../getopt/options-invalid_getopt_option | 2 +- .../options-invocation_without_parameters | 2 +- tests/expected/getopt/options-no-arguments | 2 +- 6 files changed, 52 insertions(+), 52 deletions(-) diff --git a/misc-utils/getopt.c b/misc-utils/getopt.c index af4cf386a..87d088ed5 100644 --- a/misc-utils/getopt.c +++ b/misc-utils/getopt.c @@ -243,9 +243,7 @@ static void __attribute__ ((__noreturn__)) parse_error(const char *message) { if (message) warnx("%s", message); - fprintf(stderr, _("Try `%s --help' for more information.\n"), - program_invocation_short_name); - exit(PARAMETER_EXIT_CODE); + errtryhelp(PARAMETER_EXIT_CODE); } @@ -325,33 +323,33 @@ static shell_t shell_type(const char *new_shell) parse_error(_("unknown shell after -s or --shell argument")); } -static void __attribute__ ((__noreturn__)) print_help(void) +static void __attribute__((__noreturn__)) usage(void) { - fputs(USAGE_HEADER, stderr); - fprintf(stderr, _( + fputs(USAGE_HEADER, stdout); + printf(_( " %1$s \n" " %1$s [options] [--] \n" " %1$s [options] -o|--options [options] [--] \n"), program_invocation_short_name); - fputs(USAGE_SEPARATOR, stderr); - fputs(_("Parse command options.\n"), stderr); + fputs(USAGE_SEPARATOR, stdout); + fputs(_("Parse command options.\n"), stdout); - fputs(USAGE_OPTIONS, stderr); - fputs(_(" -a, --alternative allow long options starting with single -\n"), stderr); - fputs(_(" -l, --longoptions the long options to be recognized\n"), stderr); - fputs(_(" -n, --name the name under which errors are reported\n"), stderr); - fputs(_(" -o, --options the short options to be recognized\n"), stderr); - fputs(_(" -q, --quiet disable error reporting by getopt(3)\n"), stderr); - fputs(_(" -Q, --quiet-output no normal output\n"), stderr); - fputs(_(" -s, --shell set quoting conventions to those of \n"), stderr); - fputs(_(" -T, --test test for getopt(1) version\n"), stderr); - fputs(_(" -u, --unquoted do not quote the output\n"), stderr); - fputs(USAGE_SEPARATOR, stderr); - fputs(USAGE_HELP, stderr); - fputs(USAGE_VERSION, stderr); - fprintf(stderr, USAGE_MAN_TAIL("getopt(1)")); - exit(PARAMETER_EXIT_CODE); + fputs(USAGE_OPTIONS, stdout); + fputs(_(" -a, --alternative allow long options starting with single -\n"), stdout); + fputs(_(" -l, --longoptions the long options to be recognized\n"), stdout); + fputs(_(" -n, --name the name under which errors are reported\n"), stdout); + fputs(_(" -o, --options the short options to be recognized\n"), stdout); + fputs(_(" -q, --quiet disable error reporting by getopt(3)\n"), stdout); + fputs(_(" -Q, --quiet-output no normal output\n"), stdout); + fputs(_(" -s, --shell set quoting conventions to those of \n"), stdout); + fputs(_(" -T, --test test for getopt(1) version\n"), stdout); + fputs(_(" -u, --unquoted do not quote the output\n"), stdout); + fputs(USAGE_SEPARATOR, stdout); + fputs(USAGE_HELP, stdout); + fputs(USAGE_VERSION, stdout); + printf(USAGE_MAN_TAIL("getopt(1)")); + exit(EXIT_SUCCESS); } int main(int argc, char *argv[]) @@ -417,7 +415,7 @@ int main(int argc, char *argv[]) getopt_long_fp = getopt_long_only; break; case 'h': - print_help(); + usage(); case 'o': free(ctl.optstr); ctl.optstr = xstrdup(optarg); diff --git a/sys-utils/flock.c b/sys-utils/flock.c index 003a12618..5abe2def5 100644 --- a/sys-utils/flock.c +++ b/sys-utils/flock.c @@ -46,34 +46,34 @@ #include "monotonic.h" #include "timer.h" -static void __attribute__((__noreturn__)) usage(int ex) +static void __attribute__((__noreturn__)) usage(void) { - fprintf(stderr, USAGE_HEADER); - fprintf(stderr, + fputs(USAGE_HEADER, stdout); + printf( _(" %1$s [options] | [...]\n" " %1$s [options] | -c \n" " %1$s [options] \n"), program_invocation_short_name); - fputs(USAGE_SEPARATOR, stderr); - fputs(_("Manage file locks from shell scripts.\n"), stderr); + fputs(USAGE_SEPARATOR, stdout); + fputs(_("Manage file locks from shell scripts.\n"), stdout); - fputs(USAGE_OPTIONS, stderr); - fputs(_( " -s, --shared get a shared lock\n"), stderr); - fputs(_( " -x, --exclusive get an exclusive lock (default)\n"), stderr); - fputs(_( " -u, --unlock remove a lock\n"), stderr); - fputs(_( " -n, --nonblock fail rather than wait\n"), stderr); - fputs(_( " -w, --timeout wait for a limited amount of time\n"), stderr); - fputs(_( " -E, --conflict-exit-code exit code after conflict or timeout\n"), stderr); - fputs(_( " -o, --close close file descriptor before running command\n"), stderr); - fputs(_( " -c, --command run a single command string through the shell\n"), stderr); - fputs(_( " -F, --no-fork execute command without forking\n"), stderr); - fputs(_( " --verbose increase verbosity\n"), stderr); - fprintf(stderr, USAGE_SEPARATOR); - fprintf(stderr, USAGE_HELP); - fprintf(stderr, USAGE_VERSION); - fprintf(stderr, USAGE_MAN_TAIL("flock(1)")); - exit(ex); + fputs(USAGE_OPTIONS, stdout); + fputs(_( " -s, --shared get a shared lock\n"), stdout); + fputs(_( " -x, --exclusive get an exclusive lock (default)\n"), stdout); + fputs(_( " -u, --unlock remove a lock\n"), stdout); + fputs(_( " -n, --nonblock fail rather than wait\n"), stdout); + fputs(_( " -w, --timeout wait for a limited amount of time\n"), stdout); + fputs(_( " -E, --conflict-exit-code exit code after conflict or timeout\n"), stdout); + fputs(_( " -o, --close close file descriptor before running command\n"), stdout); + fputs(_( " -c, --command run a single command string through the shell\n"), stdout); + fputs(_( " -F, --no-fork execute command without forking\n"), stdout); + fputs(_( " --verbose increase verbosity\n"), stdout); + fputs(USAGE_SEPARATOR, stdout); + fputs(USAGE_HELP, stdout); + fputs(USAGE_VERSION, stdout); + printf(USAGE_MAN_TAIL("flock(1)")); + exit(EXIT_SUCCESS); } static sig_atomic_t timeout_expired = 0; @@ -172,8 +172,10 @@ int main(int argc, char *argv[]) strutils_set_exitcode(EX_USAGE); - if (argc < 2) - usage(EX_USAGE); + if (argc < 2) { + warnx(_("not enough arguments")); + errtryhelp(EX_USAGE); + } memset(&timeout, 0, sizeof timeout); @@ -217,7 +219,7 @@ int main(int argc, char *argv[]) printf(UTIL_LINUX_VERSION); exit(EX_OK); case 'h': - usage(0); + usage(); default: errtryhelp(EX_USAGE); } diff --git a/tests/expected/getopt/options-compatible b/tests/expected/getopt/options-compatible index 585de608a..66e42a7b5 100644 --- a/tests/expected/getopt/options-compatible +++ b/tests/expected/getopt/options-compatible @@ -1,5 +1,5 @@ getopt: missing optstring argument -Try `getopt --help' for more information. +Try 'getopt --help' for more information. exit value: 2 -- exit value: 0 diff --git a/tests/expected/getopt/options-invalid_getopt_option b/tests/expected/getopt/options-invalid_getopt_option index 531cc9828..b3577e027 100644 --- a/tests/expected/getopt/options-invalid_getopt_option +++ b/tests/expected/getopt/options-invalid_getopt_option @@ -1,3 +1,3 @@ getopt: invalid option -- 'b' -Try `getopt --help' for more information. +Try 'getopt --help' for more information. exit value: 2 diff --git a/tests/expected/getopt/options-invocation_without_parameters b/tests/expected/getopt/options-invocation_without_parameters index 08b3ed5cf..f1ecc1610 100644 --- a/tests/expected/getopt/options-invocation_without_parameters +++ b/tests/expected/getopt/options-invocation_without_parameters @@ -1,3 +1,3 @@ getopt: missing optstring argument -Try `getopt --help' for more information. +Try 'getopt --help' for more information. exit value: 2 diff --git a/tests/expected/getopt/options-no-arguments b/tests/expected/getopt/options-no-arguments index 08b3ed5cf..f1ecc1610 100644 --- a/tests/expected/getopt/options-no-arguments +++ b/tests/expected/getopt/options-no-arguments @@ -1,3 +1,3 @@ getopt: missing optstring argument -Try `getopt --help' for more information. +Try 'getopt --help' for more information. exit value: 2 From 9325dbfd2018b2a3b510617f4aa13777fbbe23c3 Mon Sep 17 00:00:00 2001 From: Ruediger Meier Date: Mon, 19 Jun 2017 09:24:10 +0200 Subject: [PATCH 3/7] misc: cleanup and fix --unknownopt issues Fixed checkusage.sh warnings: rtcwake: --unknownopt, non-empty stdout rtcwake: --unknownopt, stderr too long: 21 blockdev: --unknownopt, stderr too long: 28 lsipc: --unknownopt, stderr too long: 77 pg: --unknownopt, stderr too long: 23 renice: --unknownopt, stderr too long: 18 sulogin: --unknownopt, stderr too long: 17 write: --unknownopt, stderr too long: 12 Signed-off-by: Ruediger Meier --- disk-utils/blockdev.c | 27 +++++++++++++++++---------- login-utils/sulogin.c | 8 ++++---- sys-utils/lsipc.c | 9 +++++---- sys-utils/renice.c | 20 ++++++++++++-------- sys-utils/rtcwake.c | 17 ++++++++--------- term-utils/agetty.c | 16 +++++++++------- term-utils/write.c | 10 +++++----- text-utils/pg.c | 13 +++++++------ 8 files changed, 67 insertions(+), 53 deletions(-) diff --git a/disk-utils/blockdev.c b/disk-utils/blockdev.c index 2f6681ce2..4760e021b 100644 --- a/disk-utils/blockdev.c +++ b/disk-utils/blockdev.c @@ -178,9 +178,11 @@ static const struct bdc bdcms[] = } }; -static void __attribute__ ((__noreturn__)) usage(FILE * out) +static void __attribute__((__noreturn__)) usage(void) { + FILE * out = stdout; size_t i; + fprintf(out, _("\nUsage:\n" " %1$s -V\n" " %1$s --report [devices]\n" @@ -197,8 +199,9 @@ static void __attribute__ ((__noreturn__)) usage(FILE * out) fprintf(out, " %-25s %s\n", bdcms[i].name, _(bdcms[i].help)); } - fputc('\n', out); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + + fprintf(out, USAGE_MAN_TAIL("blockdev(1)")); + exit(EXIT_SUCCESS); } static int find_cmd(char *s) @@ -225,8 +228,10 @@ int main(int argc, char **argv) textdomain(PACKAGE); atexit(close_stdout); - if (argc < 2) - usage(stderr); + if (argc < 2) { + warnx(_("not enough arguments")); + errtryhelp(EXIT_FAILURE); + } /* -V not together with commands */ if (!strcmp(argv[1], "-V") || !strcmp(argv[1], "--version")) { @@ -234,7 +239,7 @@ int main(int argc, char **argv) return EXIT_SUCCESS; } if (!strcmp(argv[1], "-h") || !strcmp(argv[1], "--help")) - usage(stdout); + usage(); /* --report not together with other commands */ if (!strcmp(argv[1], "--report")) { @@ -267,8 +272,10 @@ int main(int argc, char **argv) break; } - if (d >= argc) - usage(stderr); + if (d >= argc) { + warnx(_("no device specified")); + errtryhelp(EXIT_FAILURE); + } for (k = d; k < argc; k++) { fd = open(argv[k], O_RDONLY, 0); @@ -315,7 +322,7 @@ static void do_commands(int fd, char **argv, int d) j = find_cmd(argv[i]); if (j == -1) { warnx(_("Unknown command: %s"), argv[i]); - usage(stderr); + errtryhelp(EXIT_FAILURE); } switch (bdcms[j].argtype) { @@ -332,7 +339,7 @@ static void do_commands(int fd, char **argv, int d) if (i == d - 1) { warnx(_("%s requires an argument"), bdcms[j].name); - usage(stderr); + errtryhelp(EXIT_FAILURE); } iarg = atoi(argv[++i]); } else diff --git a/login-utils/sulogin.c b/login-utils/sulogin.c index 72bba623a..ac6a15c38 100644 --- a/login-utils/sulogin.c +++ b/login-utils/sulogin.c @@ -795,8 +795,9 @@ static void sushell(struct passwd *pwd) warn(_("failed to execute %s"), "/bin/sh"); } -static void usage(FILE *out) +static void usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _( " %s [options] [tty device]\n"), program_invocation_short_name); @@ -872,11 +873,10 @@ int main(int argc, char **argv) printf(UTIL_LINUX_VERSION); return EXIT_SUCCESS; case 'h': - usage(stdout); + usage(); return EXIT_SUCCESS; default: - usage(stderr); - /* Do not exit! */ + /* Do not exit! getopt prints a warning. */ break; } } diff --git a/sys-utils/lsipc.c b/sys-utils/lsipc.c index 3e7586b32..8ac50d67a 100644 --- a/sys-utils/lsipc.c +++ b/sys-utils/lsipc.c @@ -269,8 +269,9 @@ static int parse_time_mode(const char *s) errx(EXIT_FAILURE, _("unknown time format: %s"), s); } -static void __attribute__ ((__noreturn__)) usage(FILE * out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; size_t i; fputs(USAGE_HEADER, out); @@ -327,7 +328,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE * out) fprintf(out, " %14s %s\n", coldescs[i].name, _(coldescs[i].help)); fprintf(out, USAGE_MAN_TAIL("lsipc(1)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } static struct libscols_table *new_table(struct lsipc_control *ctl) @@ -1223,12 +1224,12 @@ int main(int argc, char *argv[]) show_creat = 1; break; case 'h': - usage(stdout); + usage(); case 'V': printf(UTIL_LINUX_VERSION); return EXIT_SUCCESS; default: - usage(stderr); + errtryhelp(EXIT_FAILURE); } } diff --git a/sys-utils/renice.c b/sys-utils/renice.c index bc6e3c849..a88f590fb 100644 --- a/sys-utils/renice.c +++ b/sys-utils/renice.c @@ -54,8 +54,9 @@ static const char *idtype[] = { [PRIO_USER] = N_("user ID"), }; -static void __attribute__((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %1$s [-n] [-p|--pid] ...\n" @@ -75,7 +76,7 @@ static void __attribute__((__noreturn__)) usage(FILE *out) fputs(USAGE_HELP, out); fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("renice(1)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } static int getprio(const int which, const int who, int *prio) @@ -127,7 +128,7 @@ int main(int argc, char **argv) if (argc == 1) { if (strcmp(*argv, "-h") == 0 || strcmp(*argv, "--help") == 0) - usage(stdout); + usage(); if (strcmp(*argv, "-v") == 0 || strcmp(*argv, "-V") == 0 || @@ -142,13 +143,16 @@ int main(int argc, char **argv) argv++; } - if (argc < 2) - usage(stderr); + if (argc < 2) { + warnx(_("not enough arguments")); + errtryhelp(EXIT_FAILURE); + } prio = strtol(*argv, &endptr, 10); - if (*endptr) - usage(stderr); - + if (*endptr) { + warnx(_("invalid priorty '%s'"), *argv); + errtryhelp(EXIT_FAILURE); + } argc--; argv++; diff --git a/sys-utils/rtcwake.c b/sys-utils/rtcwake.c index de0ac4d85..86c009536 100644 --- a/sys-utils/rtcwake.c +++ b/sys-utils/rtcwake.c @@ -88,8 +88,9 @@ struct rtcwake_control { dryrun:1; /* do not set alarm, suspend system, etc */ }; -static void __attribute__((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s [options]\n"), program_invocation_short_name); @@ -113,13 +114,11 @@ static void __attribute__((__noreturn__)) usage(FILE *out) fputs(_(" -u, --utc RTC uses UTC\n"), out); fputs(_(" -v, --verbose verbose messages\n"), out); - printf(USAGE_SEPARATOR); - printf(USAGE_HELP); - printf(USAGE_VERSION); - + fputs(USAGE_SEPARATOR, out); + fputs(USAGE_HELP, out); + fputs(USAGE_VERSION, out); printf(USAGE_MAN_TAIL("rtcwake(8)")); - - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } static int is_wakeup_enabled(const char *devname) @@ -496,9 +495,9 @@ int main(int argc, char **argv) printf(UTIL_LINUX_VERSION); exit(EXIT_SUCCESS); case 'h': - usage(stdout); + usage(); default: - usage(stderr); + errtryhelp(EXIT_FAILURE); } } diff --git a/term-utils/agetty.c b/term-utils/agetty.c index 5b910011c..869513b22 100644 --- a/term-utils/agetty.c +++ b/term-utils/agetty.c @@ -308,7 +308,7 @@ static void termio_final(struct options *op, struct termios *tp, struct chardata *cp); static int caps_lock(char *s); static speed_t bcode(char *s); -static void usage(FILE * out) __attribute__((__noreturn__)); +static void usage(void) __attribute__((__noreturn__)); static void log_err(const char *, ...) __attribute__((__noreturn__)) __attribute__((__format__(printf, 1, 2))); static void log_warn (const char *, ...) @@ -785,9 +785,9 @@ static void parse_args(int argc, char **argv, struct options *op) printf(UTIL_LINUX_VERSION); exit(EXIT_SUCCESS); case HELP_OPTION: - usage(stdout); + usage(); default: - usage(stderr); + errtryhelp(EXIT_FAILURE); } } @@ -795,7 +795,7 @@ static void parse_args(int argc, char **argv, struct options *op) if (argc < optind + 1) { log_warn(_("not enough arguments")); - usage(stderr); + warn(_("not enough arguments")); } /* Accept "tty", "baudrate tty", and "tty baudrate". */ @@ -803,8 +803,8 @@ static void parse_args(int argc, char **argv, struct options *op) /* Assume BSD style speed. */ parse_speeds(op, argv[optind++]); if (argc < optind + 1) { + log_warn(_("not enough arguments")); warn(_("not enough arguments")); - usage(stderr); } op->tty = argv[optind++]; } else { @@ -2066,8 +2066,10 @@ static speed_t bcode(char *s) return 0; } -static void __attribute__ ((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; + fputs(USAGE_HEADER, out); fprintf(out, _(" %1$s [options] [,...] []\n" " %1$s [options] ,... []\n"), program_invocation_short_name); @@ -2112,7 +2114,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE *out) fputs(_(" --version output version information and exit\n"), out); fprintf(out, USAGE_MAN_TAIL("agetty(8)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } /* diff --git a/term-utils/write.c b/term-utils/write.c index 13d4745f9..a7b51809f 100644 --- a/term-utils/write.c +++ b/term-utils/write.c @@ -79,8 +79,9 @@ struct write_control { const char *dst_tty_name; }; -static void __attribute__((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s [options] []\n"), @@ -92,9 +93,8 @@ static void __attribute__((__noreturn__)) usage(FILE *out) fputs(USAGE_OPTIONS, out); fputs(USAGE_HELP, out); fputs(USAGE_VERSION, out); - fprintf(out, USAGE_MAN_TAIL("write(1)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } /* @@ -317,9 +317,9 @@ int main(int argc, char **argv) printf(UTIL_LINUX_VERSION); return EXIT_SUCCESS; case 'h': - usage(stdout); + usage(); default: - usage(stderr); + errtryhelp(EXIT_FAILURE); } if (get_terminal_name(&ctl.src_tty_path, &ctl.src_tty_name, NULL) == 0) { diff --git a/text-utils/pg.c b/text-utils/pg.c index 50fd3c379..ce5898dc3 100644 --- a/text-utils/pg.c +++ b/text-utils/pg.c @@ -223,8 +223,9 @@ static void __attribute__((__noreturn__)) quit(int status) } /* Usage message and similar routines. */ -static void __attribute__((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s [options] [+line] [+/pattern/] [files]\n"), @@ -250,19 +251,19 @@ static void __attribute__((__noreturn__)) usage(FILE *out) fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("pg(1)")); - quit(out == stderr ? 2 : 0); + exit(0); } static void __attribute__((__noreturn__)) needarg(const char *s) { warnx(_("option requires an argument -- %s"), s); - usage(stderr); + errtryhelp(2); } static void __attribute__((__noreturn__)) invopt(const char *s) { warnx(_("illegal option -- %s"), s); - usage(stderr); + errtryhelp(2); } #ifdef HAVE_WIDECHAR @@ -1567,7 +1568,7 @@ int main(int argc, char **argv) argc--; if (!strcmp(argv[arg], "--help")) { - usage(stdout); + usage(); } if (!strcmp(argv[arg], "--version")) { @@ -1623,7 +1624,7 @@ int main(int argc, char **argv) sflag = 1; break; case 'h': - usage(stdout); + usage(); case 'V': printf(UTIL_LINUX_VERSION); return EXIT_SUCCESS; From 5118d1be2ade514079f5506bafdf028389ff362e Mon Sep 17 00:00:00 2001 From: Ruediger Meier Date: Mon, 19 Jun 2017 20:51:50 +0200 Subject: [PATCH 4/7] misc: never use usage(ERROR) We are using better/shorter error messages and somtimes also errtryhelp(). Here we fix all cases where the usage function took an int argument for exit_code. Signed-off-by: Ruediger Meier --- disk-utils/fsck.cramfs.c | 16 ++++++++-------- disk-utils/raw.c | 31 ++++++++++++++++++------------- login-utils/su-common.c | 12 +++++++----- misc-utils/findfs.c | 14 ++++++++------ misc-utils/namei.c | 10 +++++----- schedutils/chrt.c | 14 ++++++++------ sys-utils/ldattach.c | 18 ++++++++++-------- 7 files changed, 64 insertions(+), 51 deletions(-) diff --git a/disk-utils/fsck.cramfs.c b/disk-utils/fsck.cramfs.c index 1dba95eb5..ff056c869 100644 --- a/disk-utils/fsck.cramfs.c +++ b/disk-utils/fsck.cramfs.c @@ -102,11 +102,9 @@ static char *outbuffer; static size_t blksize = 0; - -/* Input status of 0 to print help and exit without an error. */ -static void __attribute__((__noreturn__)) usage(int status) +static void __attribute__((__noreturn__)) usage(void) { - FILE *out = status ? stderr : stdout; + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, @@ -126,7 +124,7 @@ static void __attribute__((__noreturn__)) usage(int status) fputs(USAGE_VERSION, out); fputs(USAGE_SEPARATOR, out); - exit(status); + exit(FSCK_EX_OK); } static int get_superblock_endianness(uint32_t magic) @@ -669,7 +667,7 @@ int main(int argc, char **argv) case 'y': break; case 'h': - usage(FSCK_EX_OK); + usage(); break; case 'V': printf(UTIL_LINUX_VERSION); @@ -689,8 +687,10 @@ int main(int argc, char **argv) errtryhelp(FSCK_EX_USAGE); } - if ((argc - optind) != 1) - usage(FSCK_EX_USAGE); + if ((argc - optind) != 1){ + warnx(_("bad usage")); + errtryhelp(FSCK_EX_USAGE); + } filename = argv[optind]; test_super(&start, &length); diff --git a/disk-utils/raw.c b/disk-utils/raw.c index 395e36703..c881d86ee 100644 --- a/disk-utils/raw.c +++ b/disk-utils/raw.c @@ -42,10 +42,9 @@ void open_raw_ctl(void); static int query(int minor_raw, const char *raw_name, int quiet); static int bind(int minor_raw, int block_major, int block_minor); -static void __attribute__ ((__noreturn__)) usage(int err) +static void __attribute__((__noreturn__)) usage(void) { - FILE *out = err == EXIT_SUCCESS ? stdout : stderr; - + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %1$s %2$srawN \n" @@ -63,7 +62,7 @@ static void __attribute__ ((__noreturn__)) usage(int err) fputs(USAGE_HELP, out); fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("raw(8)")); - exit(err); + exit(EXIT_SUCCESS); } static long strtol_octal_or_err(const char *str, const char *errmesg) @@ -124,7 +123,7 @@ int main(int argc, char *argv[]) printf(UTIL_LINUX_VERSION); return EXIT_SUCCESS; case 'h': - usage(EXIT_SUCCESS); + usage(); default: errtryhelp(EXIT_FAILURE); } @@ -135,8 +134,10 @@ int main(int argc, char *argv[]) open_raw_ctl(); if (do_query_all) { - if (optind < argc) - usage(EXIT_FAILURE); + if (optind < argc) { + warnx(_("bad usage")); + errtryhelp(EXIT_FAILURE); + } for (i = 1; i < RAW_NR_MINORS; i++) query(i, NULL, 1); exit(EXIT_SUCCESS); @@ -146,8 +147,10 @@ int main(int argc, char *argv[]) * It's a bind or a single query. Either way we need a raw device. */ - if (optind >= argc) - usage(EXIT_FAILURE); + if (optind >= argc) { + warnx(_("bad usage")); + errtryhelp(EXIT_FAILURE); + } raw_name = argv[optind++]; /* @@ -156,9 +159,10 @@ int main(int argc, char *argv[]) * causes udev to *remove* /dev/rawctl */ rc = sscanf(raw_name, _PATH_RAWDEVDIR "raw%d", &raw_minor); - if (rc != 1) - usage(EXIT_FAILURE); - + if (rc != 1) { + warnx(_("bad usage")); + errtryhelp(EXIT_FAILURE); + } if (raw_minor == 0) errx(EXIT_RAW_ACCESS, _("Device '%s' is the control raw device " @@ -197,7 +201,8 @@ int main(int argc, char *argv[]) break; default: - usage(EXIT_FAILURE); + warnx(_("bad usage")); + errtryhelp(EXIT_FAILURE); } return bind(raw_minor, block_major, block_minor); diff --git a/login-utils/su-common.c b/login-utils/su-common.c index 032d62f9f..d7b0a93dd 100644 --- a/login-utils/su-common.c +++ b/login-utils/su-common.c @@ -672,7 +672,7 @@ restricted_shell (const char * const shell) } static void __attribute__((__noreturn__)) -usage (const int status) +usage(void) { if (su_mode == RUNUSER_MODE) { fputs(USAGE_HEADER, stdout); @@ -712,7 +712,7 @@ usage (const int status) fputs(USAGE_HELP, stdout); fputs(USAGE_VERSION, stdout); printf(USAGE_MAN_TAIL(su_mode == SU_MODE ? "su(1)" : "runuser(1)")); - exit (status); + exit(EXIT_SUCCESS); } static @@ -851,13 +851,15 @@ su_main (int argc, char **argv, int mode) break; case 'u': - if (su_mode != RUNUSER_MODE) - usage (EXIT_FAILURE); + if (su_mode != RUNUSER_MODE) { + warnx(_("invalid option -- 'u'")); + errtryhelp(EXIT_FAILURE); + } runuser_user = optarg; break; case 'h': - usage(0); + usage(); case 'V': printf(UTIL_LINUX_VERSION); diff --git a/misc-utils/findfs.c b/misc-utils/findfs.c index 7d2d803dd..c01dc1d53 100644 --- a/misc-utils/findfs.c +++ b/misc-utils/findfs.c @@ -22,9 +22,9 @@ #define FINDFS_NOT_FOUND 1 /* label or uuid cannot be found */ #define FINDFS_USAGE_ERROR 2 /* user did something unexpected */ -static void __attribute__((__noreturn__)) usage(int rc) +static void __attribute__((__noreturn__)) usage(void) { - FILE *out = rc ? stderr : stdout; + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s [options] {LABEL,UUID,PARTUUID,PARTLABEL}=\n"), program_invocation_short_name); @@ -36,7 +36,7 @@ static void __attribute__((__noreturn__)) usage(int rc) fputs(USAGE_HELP, out); fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("findfs(8)")); - exit(rc); + exit(FINDFS_SUCCESS); } int main(int argc, char **argv) @@ -54,10 +54,12 @@ int main(int argc, char **argv) textdomain(PACKAGE); atexit(close_stdout); - if (argc != 2) + if (argc != 2) { /* we return '2' for backward compatibility * with version from e2fsprogs */ - usage(FINDFS_USAGE_ERROR); + warnx(_("bad usage")); + errtryhelp(FINDFS_USAGE_ERROR); + } while ((c = getopt_long(argc, argv, "Vh", longopts, NULL)) != -1) switch (c) { @@ -65,7 +67,7 @@ int main(int argc, char **argv) printf(UTIL_LINUX_VERSION); return FINDFS_SUCCESS; case 'h': - usage(FINDFS_SUCCESS); + usage(); default: errtryhelp(FINDFS_USAGE_ERROR); } diff --git a/misc-utils/namei.c b/misc-utils/namei.c index 0b0a0579c..dcaf5d2eb 100644 --- a/misc-utils/namei.c +++ b/misc-utils/namei.c @@ -320,10 +320,10 @@ print_namei(struct namei *nm, char *path) return 0; } -static void usage(int rc) +static void __attribute__((__noreturn__)) usage(void) { const char *p = program_invocation_short_name; - FILE *out = rc == EXIT_FAILURE ? stderr : stdout; + FILE *out = stdout; if (!*p) p = "namei"; @@ -346,7 +346,7 @@ static void usage(int rc) " -v, --vertical vertical align of modes and owners\n"), out); fprintf(out, USAGE_MAN_TAIL("namei(1)")); - exit(rc); + exit(EXIT_SUCCESS); } static const struct option longopts[] = @@ -376,7 +376,7 @@ main(int argc, char **argv) while ((c = getopt_long(argc, argv, "hVlmnovx", longopts, NULL)) != -1) { switch(c) { case 'h': - usage(EXIT_SUCCESS); + usage(); break; case 'V': printf(UTIL_LINUX_VERSION); @@ -406,7 +406,7 @@ main(int argc, char **argv) if (optind == argc) { warnx(_("pathname argument is missing")); - usage(EXIT_FAILURE); + errtryhelp(EXIT_FAILURE); } ucache = new_idcache(); diff --git a/schedutils/chrt.c b/schedutils/chrt.c index b52aec137..d1abbe14e 100644 --- a/schedutils/chrt.c +++ b/schedutils/chrt.c @@ -128,9 +128,9 @@ struct chrt_ctl { verbose : 1; /* verbose output */ }; -static void __attribute__((__noreturn__)) show_usage(int rc) +static void __attribute__((__noreturn__)) usage(void) { - FILE *out = rc == EXIT_SUCCESS ? stdout : stderr; + FILE *out = stdout; fputs(_("Show or change the real-time scheduling attributes of a process.\n"), out); fputs(USAGE_SEPARATOR, out); @@ -169,7 +169,7 @@ static void __attribute__((__noreturn__)) show_usage(int rc) fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("chrt(1)")); - exit(rc); + exit(EXIT_SUCCESS); } static const char *get_policy_name(int policy) @@ -494,15 +494,17 @@ int main(int argc, char **argv) printf(UTIL_LINUX_VERSION); return EXIT_SUCCESS; case 'h': - show_usage(EXIT_SUCCESS); + usage(); default: errtryhelp(EXIT_FAILURE); } } if (((ctl->pid > -1) && argc - optind < 1) || - ((ctl->pid == -1) && argc - optind < 2)) - show_usage(EXIT_FAILURE); + ((ctl->pid == -1) && argc - optind < 2)) { + warnx(_("bad usage")); + errtryhelp(EXIT_FAILURE); +} if ((ctl->pid > -1) && (ctl->verbose || argc - optind == 1)) { show_sched_info(ctl); diff --git a/sys-utils/ldattach.c b/sys-utils/ldattach.c index 5d6dc0ba0..9a3915b1c 100644 --- a/sys-utils/ldattach.c +++ b/sys-utils/ldattach.c @@ -188,9 +188,9 @@ static int parse_iflag(char *str, int *set_iflag, int *clr_iflag) } -static void __attribute__ ((__noreturn__)) usage(int exitcode) +static void __attribute__((__noreturn__)) usage(void) { - FILE *out = exitcode == EXIT_SUCCESS ? stdout : stderr; + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s [options] \n"), program_invocation_short_name); @@ -224,7 +224,7 @@ static void __attribute__ ((__noreturn__)) usage(int exitcode) print_table(out, ld_iflags); fprintf(out, USAGE_MAN_TAIL("ldattach(8)")); - exit(exitcode); + exit(EXIT_SUCCESS); } static int my_cfsetspeed(struct termios *ts, int speed) @@ -315,7 +315,8 @@ int main(int argc, char **argv) /* parse options */ if (argc == 0) - usage(EXIT_SUCCESS); + errx(EXIT_FAILURE, _("bad usage")); + while ((optc = getopt_long(argc, argv, "dhV78neo12s:i:c:p:", opttbl, NULL)) >= 0) { @@ -354,15 +355,16 @@ int main(int argc, char **argv) printf(UTIL_LINUX_VERSION); return EXIT_SUCCESS; case 'h': - usage(EXIT_SUCCESS); + usage(); default: errtryhelp(EXIT_FAILURE); } } - if (argc - optind != 2) - usage(EXIT_FAILURE); - + if (argc - optind != 2) { + warnx(_("not enough arguments")); + errtryhelp(EXIT_FAILURE); + } /* parse line discipline specification */ ldisc = lookup_table(ld_discs, argv[optind]); if (ldisc < 0) From 6e1eda6f229f87b77471ce6eb7cbf0ede7c8029e Mon Sep 17 00:00:00 2001 From: Ruediger Meier Date: Mon, 19 Jun 2017 20:52:50 +0200 Subject: [PATCH 5/7] misc: never use usage(stderr) Here we fix all cases where we have usage(FILE*) functions. Signed-off-by: Ruediger Meier --- disk-utils/addpart.c | 13 ++++++++----- disk-utils/delpart.c | 13 ++++++++----- disk-utils/fdformat.c | 13 ++++++++----- disk-utils/fdisk.c | 31 +++++++++++++++++-------------- disk-utils/fsck.minix.c | 14 ++++++++------ disk-utils/isosize.c | 13 ++++++++----- disk-utils/mkfs.bfs.c | 26 ++++++++++++++++---------- disk-utils/mkfs.c | 13 ++++++++----- disk-utils/mkfs.minix.c | 10 ++++++---- disk-utils/mkswap.c | 11 ++++++----- disk-utils/partx.c | 14 ++++++++------ disk-utils/resizepart.c | 13 ++++++++----- disk-utils/swaplabel.c | 14 ++++++++------ libsmartcols/samples/fromfile.c | 9 +++++---- login-utils/chfn.c | 13 ++++++++----- login-utils/chsh.c | 12 +++++++----- misc-utils/cal.c | 12 +++++++----- misc-utils/look.c | 12 +++++++----- misc-utils/rename.c | 9 +++++---- misc-utils/wipefs.c | 14 +++++++++----- schedutils/ionice.c | 14 ++++++++------ schedutils/taskset.c | 13 ++++++++----- sys-utils/blkdiscard.c | 9 +++++---- sys-utils/chcpu.c | 13 ++++++++----- sys-utils/chmem.c | 13 ++++++++----- sys-utils/dmesg.c | 13 ++++++++----- sys-utils/fsfreeze.c | 17 +++++++++-------- sys-utils/fstrim.c | 9 +++++---- sys-utils/ipcmk.c | 14 ++++++++------ sys-utils/ipcrm.c | 9 +++++---- sys-utils/losetup.c | 10 ++++++---- sys-utils/lscpu.c | 13 ++++++++----- sys-utils/lsmem.c | 11 +++++++---- sys-utils/mount.c | 25 ++++++++++++++++--------- sys-utils/mountpoint.c | 13 ++++++++----- sys-utils/pivot_root.c | 22 ++++++++++++---------- sys-utils/setsid.c | 13 ++++++++----- sys-utils/swapoff.c | 13 ++++++++----- sys-utils/swapon.c | 14 +++++++++----- sys-utils/switch_root.c | 19 ++++++++++++------- sys-utils/tunelp.c | 21 +++++++++++++-------- sys-utils/umount.c | 10 ++++++---- term-utils/mesg.c | 9 +++++---- term-utils/setterm.c | 14 ++++++++------ text-utils/col.c | 13 ++++++++----- 45 files changed, 371 insertions(+), 252 deletions(-) diff --git a/disk-utils/addpart.c b/disk-utils/addpart.c index f99e9bc9c..07f4ca9a1 100644 --- a/disk-utils/addpart.c +++ b/disk-utils/addpart.c @@ -8,8 +8,9 @@ #include "partx.h" #include "strutils.h" -static void __attribute__ ((__noreturn__)) usage(FILE * out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s \n"), program_invocation_short_name); @@ -21,7 +22,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE * out) fputs(USAGE_HELP, out); fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("addpart(8)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } int main(int argc, char **argv) @@ -44,13 +45,15 @@ int main(int argc, char **argv) printf(UTIL_LINUX_VERSION); return EXIT_SUCCESS; case 'h': - usage(stdout); + usage(); default: errtryhelp(EXIT_FAILURE); } - if (argc != 5) - usage(stderr); + if (argc != 5) { + warnx(_("not enough arguments")); + errtryhelp(EXIT_FAILURE); + } if ((fd = open(argv[1], O_RDONLY)) < 0) err(EXIT_FAILURE, _("cannot open %s"), argv[1]); diff --git a/disk-utils/delpart.c b/disk-utils/delpart.c index 1f82b58e9..7f347c886 100644 --- a/disk-utils/delpart.c +++ b/disk-utils/delpart.c @@ -8,8 +8,9 @@ #include "partx.h" #include "strutils.h" -static void __attribute__ ((__noreturn__)) usage(FILE * out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s \n"), program_invocation_short_name); @@ -21,7 +22,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE * out) fputs(USAGE_HELP, out); fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("delpart(8)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } int main(int argc, char **argv) @@ -44,13 +45,15 @@ int main(int argc, char **argv) printf(UTIL_LINUX_VERSION); return EXIT_SUCCESS; case 'h': - usage(stdout); + usage(); default: errtryhelp(EXIT_FAILURE); } - if (argc != 3) - usage(stderr); + if (argc != 3) { + warnx(_("not enough arguments")); + errtryhelp(EXIT_FAILURE); + } if ((fd = open(argv[1], O_RDONLY)) < 0) diff --git a/disk-utils/fdformat.c b/disk-utils/fdformat.c index 60d61dcf8..4b5ed5690 100644 --- a/disk-utils/fdformat.c +++ b/disk-utils/fdformat.c @@ -138,8 +138,9 @@ static void verify_disk(int ctrl, unsigned int track_from, unsigned int track_to printf(_("done\n")); } -static void __attribute__ ((__noreturn__)) usage(FILE * out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s [options] \n"), program_invocation_short_name); @@ -159,7 +160,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE * out) fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("fdformat(8)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } int main(int argc, char **argv) @@ -207,7 +208,7 @@ int main(int argc, char **argv) printf(UTIL_LINUX_VERSION); exit(EXIT_SUCCESS); case 'h': - usage(stdout); + usage(); default: errtryhelp(EXIT_FAILURE); } @@ -215,8 +216,10 @@ int main(int argc, char **argv) argc -= optind; argv += optind; - if (argc < 1) - usage(stderr); + if (argc < 1) { + warnx(_("no device specified")); + errtryhelp(EXIT_FAILURE); + } if (stat(argv[0], &st) < 0) err(EXIT_FAILURE, _("stat of %s failed"), argv[0]); if (!S_ISBLK(st.st_mode)) diff --git a/disk-utils/fdisk.c b/disk-utils/fdisk.c index 832ae4959..afd968076 100644 --- a/disk-utils/fdisk.c +++ b/disk-utils/fdisk.c @@ -749,8 +749,10 @@ void follow_wipe_mode(struct fdisk_context *cxt) fdisk_get_collision(cxt)); } -static void __attribute__ ((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; + fputs(USAGE_HEADER, out); fprintf(out, @@ -789,7 +791,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE *out) list_available_columns(out); fprintf(out, USAGE_MAN_TAIL("fdisk(8)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } @@ -852,7 +854,7 @@ int main(int argc, char **argv) size_t sz = strtou32_or_err(optarg, _("invalid sector size argument")); if (sz != 512 && sz != 1024 && sz != 2048 && sz != 4096) - usage(stderr); + errx(EXIT_FAILURE, _("invalid sector size argument")); fdisk_save_user_sector_size(cxt, sz, sz); break; } @@ -879,10 +881,8 @@ int main(int argc, char **argv) fdisk_dos_enable_compatible(lb, TRUE); else if (strcmp(p, "nondos") == 0) fdisk_dos_enable_compatible(lb, FALSE); - else { - warnx(_("unknown compatibility mode '%s'"), p); - usage(stderr); - } + else + errx(EXIT_FAILURE, _("unknown compatibility mode '%s'"), p); } /* use default if no optarg specified */ break; @@ -929,7 +929,7 @@ int main(int argc, char **argv) if (optarg && *optarg == '=') optarg++; if (fdisk_set_unit(cxt, optarg) != 0) - usage(stderr); + errx(EXIT_FAILURE, _("unsupported unit")); break; case 'V': /* preferred for util-linux */ case 'v': /* for backward compatibility only */ @@ -946,7 +946,7 @@ int main(int argc, char **argv) errx(EXIT_FAILURE, _("unsupported wipe mode")); break; case 'h': - usage(stdout); + usage(); case OPT_BYTES: fdisk_set_size_unit(cxt, FDISK_SIZEUNIT_BYTES); break; @@ -985,9 +985,10 @@ int main(int argc, char **argv) case ACT_SHOWSIZE: /* deprecated */ - if (argc - optind <= 0) - usage(stderr); - + if (argc - optind <= 0) { + warnx(_("bad usage")); + errtryhelp(EXIT_FAILURE); + } for (i = optind; i < argc; i++) { uintmax_t blks = get_dev_blocks(argv[i]); @@ -999,8 +1000,10 @@ int main(int argc, char **argv) break; case ACT_FDISK: - if (argc-optind != 1) - usage(stderr); + if (argc-optind != 1) { + warnx(_("bad usage")); + errtryhelp(EXIT_FAILURE); + } /* Here starts interactive mode, use fdisk_{warn,info,..} functions */ color_scheme_enable("welcome", UL_COLOR_GREEN); diff --git a/disk-utils/fsck.minix.c b/disk-utils/fsck.minix.c index bff810ec3..13b12926c 100644 --- a/disk-utils/fsck.minix.c +++ b/disk-utils/fsck.minix.c @@ -177,7 +177,8 @@ leave(int status) { } static void __attribute__((__noreturn__)) -usage(FILE *out) { +usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s [options] \n"), program_invocation_short_name); fputs(USAGE_SEPARATOR, out); @@ -194,7 +195,7 @@ usage(FILE *out) { fputs(USAGE_HELP, out); fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("fsck.minix(8)")); - leave(out == stderr ? FSCK_EX_USAGE : FSCK_EX_OK); + exit(FSCK_EX_OK); } static void die(const char *fmt, ...) @@ -1329,7 +1330,7 @@ main(int argc, char **argv) { printf(UTIL_LINUX_VERSION); return FSCK_EX_OK; case 'h': - usage(stdout); + usage(); default: errtryhelp(FSCK_EX_USAGE); } @@ -1337,9 +1338,10 @@ main(int argc, char **argv) { argv += optind; if (0 < argc) { device_name = argv[0]; - } else - usage(stderr); - + } else { + warnx(_("no device specified")); + errtryhelp(FSCK_EX_USAGE); + } check_mount(); /* trying to check a mounted filesystem? */ if (repair && !automatic && (!isatty(STDIN_FILENO) || !isatty(STDOUT_FILENO))) die(_("need terminal for interactive repairs")); diff --git a/disk-utils/isosize.c b/disk-utils/isosize.c index b5ac56262..ed43c9d70 100644 --- a/disk-utils/isosize.c +++ b/disk-utils/isosize.c @@ -126,8 +126,9 @@ static void isosize(int argc, char *filenamep, int xflag, long divisor) close(fd); } -static void __attribute__((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s [options] \n"), @@ -144,7 +145,7 @@ static void __attribute__((__noreturn__)) usage(FILE *out) fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("isosize(8)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } int main(int argc, char **argv) @@ -179,15 +180,17 @@ int main(int argc, char **argv) printf(UTIL_LINUX_VERSION); return EXIT_SUCCESS; case 'h': - usage(stdout); + usage(); default: errtryhelp(EXIT_FAILURE); } ct = argc - optind; - if (ct <= 0) - usage(stderr); + if (ct <= 0) { + warnx(_("no device specified")); + errtryhelp(EXIT_FAILURE); + } for (j = optind; j < argc; j++) isosize(ct, argv[j], xflag, divisor); diff --git a/disk-utils/mkfs.bfs.c b/disk-utils/mkfs.bfs.c index 0bf18509e..b19afa7cd 100644 --- a/disk-utils/mkfs.bfs.c +++ b/disk-utils/mkfs.bfs.c @@ -67,8 +67,9 @@ struct bfsde { char d_name[BFS_NAMELEN]; }; -static void __attribute__ ((__noreturn__)) usage(FILE * out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fprintf(out, _("Usage: %s [options] device [block-count]\n"), program_invocation_short_name); @@ -88,7 +89,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE * out) " -h, --help display this help and exit\n\n")); fprintf(out, USAGE_MAN_TAIL("mkfs.bfs(8)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } static void __attribute__ ((__noreturn__)) print_version(void) @@ -129,9 +130,10 @@ int main(int argc, char **argv) textdomain(PACKAGE); atexit(close_stdout); - if (argc < 2) - usage(stderr); - + if (argc < 2) { + warnx(_("not enough arguments")); + errtryhelp(EXIT_FAILURE); + } if (argc == 2 && !strcmp(argv[1], "-V")) print_version(); @@ -170,14 +172,16 @@ int main(int argc, char **argv) case VERSION_OPTION: print_version(); case 'h': - usage(stdout); + usage(); default: errtryhelp(EXIT_FAILURE); } } - if (optind == argc) - usage(stderr); + if (optind == argc) { + warnx(_("no device specified")); + errtryhelp(EXIT_FAILURE); + } device = argv[optind++]; @@ -191,8 +195,10 @@ int main(int argc, char **argv) if (optind == argc - 1) user_specified_total_blocks = strtou64_or_err(argv[optind], _("invalid block-count")); - else if (optind != argc) - usage(stderr); + else if (optind != argc) { + warnx(_("bad usage")); + errtryhelp(EXIT_FAILURE); + } if (blkdev_get_sectors(fd, &total_blocks) == -1) { if (!user_specified_total_blocks) diff --git a/disk-utils/mkfs.c b/disk-utils/mkfs.c index cf1a312d9..25cc59d20 100644 --- a/disk-utils/mkfs.c +++ b/disk-utils/mkfs.c @@ -38,8 +38,9 @@ #define DEFAULT_FSTYPE "ext2" #endif -static void __attribute__ ((__noreturn__)) usage(FILE * out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s [options] [-t ] [fs-options] []\n"), program_invocation_short_name); @@ -60,7 +61,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE * out) fprintf(out, USAGE_MAN_TAIL("mkfs(8)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } static void __attribute__ ((__noreturn__)) print_version(void) @@ -106,7 +107,7 @@ int main(int argc, char **argv) fstype = optarg; break; case 'h': - usage(stdout); + usage(); case VERSION_OPTION: print_version(); default: @@ -114,8 +115,10 @@ int main(int argc, char **argv) more = 1; break; /* start of specific arguments */ } - if (optind == argc) - usage(stderr); + if (optind == argc) { + warnx(_("no device specified")); + errtryhelp(EXIT_FAILURE); + } /* If -t wasn't specified, use the default */ if (fstype == NULL) diff --git a/disk-utils/mkfs.minix.c b/disk-utils/mkfs.minix.c index 98a62668a..39e159f7a 100644 --- a/disk-utils/mkfs.minix.c +++ b/disk-utils/mkfs.minix.c @@ -131,8 +131,9 @@ static char *zone_map; #define mark_zone(x) (setbit(zone_map,(x)-get_first_zone()+1)) #define unmark_zone(x) (clrbit(zone_map,(x)-get_first_zone()+1)) -static void __attribute__((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s [options] /dev/name [blocks]\n"), program_invocation_short_name); fputs(USAGE_OPTIONS, out); @@ -147,7 +148,7 @@ static void __attribute__((__noreturn__)) usage(FILE *out) fputs(USAGE_HELP, out); fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("mkfs.minix(8)")); - exit(out == stderr ? MKFS_EX_USAGE : MKFS_EX_OK); + exit(MKFS_EX_OK); } #ifdef TEST_SCRIPT @@ -795,7 +796,7 @@ int main(int argc, char ** argv) printf(UTIL_LINUX_VERSION); return MKFS_EX_OK; case 'h': - usage(stdout); + usage(); default: errtryhelp(MKFS_EX_USAGE); } @@ -810,7 +811,8 @@ int main(int argc, char ** argv) ctl.fs_blocks = strtoul_or_err(argv[0], _("failed to parse number of blocks")); if (!ctl.device_name) { - usage(stderr); + warnx(_("no device specified")); + errtryhelp(MKFS_EX_USAGE); } check_user_instructions(&ctl); if (is_mounted(ctl.device_name)) diff --git a/disk-utils/mkswap.c b/disk-utils/mkswap.c index ff076c8ab..73e5258ed 100644 --- a/disk-utils/mkswap.c +++ b/disk-utils/mkswap.c @@ -141,8 +141,9 @@ static void set_uuid_and_label(const struct mkswap_control *ctl) } } -static void __attribute__ ((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fprintf(out, _("\nUsage:\n" " %s [options] device [size]\n"), @@ -162,7 +163,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE *out) " -V, --version output version information and exit\n" " -h, --help display this help and exit\n\n")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } static void page_bad(struct mkswap_control *ctl, unsigned int page) @@ -400,7 +401,7 @@ int main(int argc, char **argv) printf(UTIL_LINUX_VERSION); exit(EXIT_SUCCESS); case 'h': - usage(stdout); + usage(); default: errtryhelp(EXIT_FAILURE); } @@ -412,7 +413,7 @@ int main(int argc, char **argv) block_count = argv[optind++]; if (optind != argc) { warnx(_("only one device argument is currently supported")); - usage(stderr); + errtryhelp(EXIT_FAILURE); } #ifdef HAVE_LIBUUID @@ -428,7 +429,7 @@ int main(int argc, char **argv) if (!ctl.devname) { warnx(_("error: Nowhere to set up swap on?")); - usage(stderr); + errtryhelp(EXIT_FAILURE); } if (block_count) { /* this silly user specified the number of blocks explicitly */ diff --git a/disk-utils/partx.c b/disk-utils/partx.c index 93fbc9c1d..9a868cd81 100644 --- a/disk-utils/partx.c +++ b/disk-utils/partx.c @@ -743,8 +743,9 @@ static blkid_partlist get_partlist(blkid_probe pr, return ls; } -static void __attribute__((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; size_t i; fputs(USAGE_HEADER, out); @@ -781,7 +782,7 @@ static void __attribute__((__noreturn__)) usage(FILE *out) fprintf(out, USAGE_MAN_TAIL("partx(8)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } int main(int argc, char **argv) @@ -891,7 +892,7 @@ int main(int argc, char **argv) return EXIT_SUCCESS; } case 'h': - usage(stdout); + usage(); case 'V': printf(UTIL_LINUX_VERSION); return EXIT_SUCCESS; @@ -963,9 +964,10 @@ int main(int argc, char **argv) device = NULL; part_devno = 0; } - } else - usage(stderr); - + } else { + warnx(_("bad usage")); + errtryhelp(EXIT_FAILURE); + } if (device && (upper || lower)) errx(EXIT_FAILURE, _("--nr and are mutually exclusive")); diff --git a/disk-utils/resizepart.c b/disk-utils/resizepart.c index 97533e26f..a234c8079 100644 --- a/disk-utils/resizepart.c +++ b/disk-utils/resizepart.c @@ -13,8 +13,9 @@ #include "strutils.h" #include "closestream.h" -static void __attribute__ ((__noreturn__)) usage(FILE * out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s \n"), program_invocation_short_name); @@ -26,7 +27,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE * out) fputs(USAGE_HELP, out); fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("resizepart(8)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } static int get_partition_start(int fd, int partno, uint64_t *start) @@ -86,13 +87,15 @@ int main(int argc, char **argv) printf(UTIL_LINUX_VERSION); return EXIT_SUCCESS; case 'h': - usage(stdout); + usage(); default: errtryhelp(EXIT_FAILURE); } - if (argc != 4) - usage(stderr); + if (argc != 4) { + warnx(_("not enough arguments")); + errtryhelp(EXIT_FAILURE); + } wholedisk = argv[1]; partno = strtou32_or_err(argv[2], _("invalid partition number argument")); diff --git a/disk-utils/swaplabel.c b/disk-utils/swaplabel.c index 233f027d1..c8fede25e 100644 --- a/disk-utils/swaplabel.c +++ b/disk-utils/swaplabel.c @@ -111,8 +111,9 @@ err: return -1; } -static void __attribute__((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s [options] \n"), program_invocation_short_name); @@ -127,7 +128,7 @@ static void __attribute__((__noreturn__)) usage(FILE *out) fputs(USAGE_HELP, out); fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("swaplabel(8)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } int main(int argc, char *argv[]) @@ -152,7 +153,7 @@ int main(int argc, char *argv[]) while ((c = getopt_long(argc, argv, "hVL:U:", longopts, NULL)) != -1) { switch (c) { case 'h': - usage(stdout); + usage(); break; case 'V': printf(UTIL_LINUX_VERSION); @@ -172,9 +173,10 @@ int main(int argc, char *argv[]) } } - if (optind == argc) - usage(stderr); - + if (optind == argc) { + warnx(_("no device specified")); + errtryhelp(EXIT_FAILURE); + } devname = argv[optind]; pr = get_swap_prober(devname); if (pr) { diff --git a/libsmartcols/samples/fromfile.c b/libsmartcols/samples/fromfile.c index 674f01206..de0a8eac4 100644 --- a/libsmartcols/samples/fromfile.c +++ b/libsmartcols/samples/fromfile.c @@ -194,8 +194,9 @@ static void compose_tree(struct libscols_table *tb, int parent_col, int id_col) } -static void __attribute__ ((__noreturn__)) usage(FILE * out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fprintf(out, "\n %s [options] ...\n\n", program_invocation_short_name); @@ -212,7 +213,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE * out) fputs(" -h, --help this help\n", out); fputs("\n", out); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } int main(int argc, char *argv[]) @@ -298,9 +299,9 @@ int main(int argc, char *argv[]) scols_table_set_termwidth(tb, strtou32_or_err(optarg, "failed to parse terminal width")); break; case 'h': - usage(stdout); + usage(); default: - usage(stderr); + errtryhelp(EXIT_FAILURE); } } diff --git a/login-utils/chfn.c b/login-utils/chfn.c index 3a951a193..7a57e9169 100644 --- a/login-utils/chfn.c +++ b/login-utils/chfn.c @@ -89,8 +89,9 @@ struct chfn_control { /* we do not accept gecos field sizes longer than MAX_FIELD_SIZE */ #define MAX_FIELD_SIZE 256 -static void __attribute__((__noreturn__)) usage(FILE *fp) +static void __attribute__((__noreturn__)) usage(void) { + FILE *fp = stdout; fputs(USAGE_HEADER, fp); fprintf(fp, _(" %s [options] []\n"), program_invocation_short_name); @@ -106,7 +107,7 @@ static void __attribute__((__noreturn__)) usage(FILE *fp) fputs(_(" -u, --help display this help and exit\n"), fp); fputs(_(" -v, --version output version information and exit\n"), fp); fprintf(fp, USAGE_MAN_TAIL("chfn(1)")); - exit(fp == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } /* @@ -178,7 +179,7 @@ static void parse_argv(struct chfn_control *ctl, int argc, char **argv) printf(UTIL_LINUX_VERSION); exit(EXIT_SUCCESS); case 'u': - usage(stdout); + usage(); default: errtryhelp(EXIT_FAILURE); } @@ -189,8 +190,10 @@ static void parse_argv(struct chfn_control *ctl, int argc, char **argv) exit(EXIT_FAILURE); /* done parsing arguments. check for a username. */ if (optind < argc) { - if (optind + 1 < argc) - usage(stderr); + if (optind + 1 < argc) { + warnx(_("cannot handle multiple usernames")); + errtryhelp(EXIT_FAILURE); + } ctl->username = argv[optind]; } return; diff --git a/login-utils/chsh.c b/login-utils/chsh.c index 10b0bdcda..1083583b9 100644 --- a/login-utils/chsh.c +++ b/login-utils/chsh.c @@ -70,8 +70,9 @@ struct sinfo { /* global due readline completion */ static char **global_shells; -static void __attribute__((__noreturn__)) usage (FILE *fp) +static void __attribute__((__noreturn__)) usage(void) { + FILE *fp = stdout; fputs(USAGE_HEADER, fp); fprintf(fp, _(" %s [options] []\n"), program_invocation_short_name); @@ -85,7 +86,7 @@ static void __attribute__((__noreturn__)) usage (FILE *fp) fputs(_(" -u, --help display this help and exit\n"), fp); fputs(_(" -v, --version output version information and exit\n"), fp); fprintf(fp, USAGE_MAN_TAIL("chsh(1)")); - exit(fp == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } /* @@ -229,7 +230,7 @@ static void parse_argv(int argc, char **argv, struct sinfo *pinfo) exit(EXIT_SUCCESS); case 'u': /* deprecated */ case 'h': - usage(stdout); + usage(); case 'l': init_shells(); print_shells(); @@ -243,8 +244,9 @@ static void parse_argv(int argc, char **argv, struct sinfo *pinfo) } /* done parsing arguments. check for a username. */ if (optind < argc) { - if (optind + 1 < argc) - usage(stderr); + if (optind + 1 < argc) { + errx(EXIT_FAILURE, _("cannot handle multiple usernames")); + } pinfo->username = argv[optind]; } } diff --git a/misc-utils/cal.c b/misc-utils/cal.c index 86e159bfa..f73cbbf30 100644 --- a/misc-utils/cal.c +++ b/misc-utils/cal.c @@ -244,7 +244,7 @@ static int week_number(int day, int month, int32_t year, const struct cal_contro static int week_to_day(const struct cal_control *ctl); static int center_str(const char *src, char *dest, size_t dest_size, size_t width); static void center(const char *str, size_t len, int separate); -static void __attribute__((__noreturn__)) usage(FILE *out); +static void __attribute__((__noreturn__)) usage(void); int main(int argc, char **argv) { @@ -394,7 +394,7 @@ int main(int argc, char **argv) printf(UTIL_LINUX_VERSION); return EXIT_SUCCESS; case 'h': - usage(stdout); + usage(); default: errtryhelp(EXIT_FAILURE); } @@ -470,7 +470,8 @@ int main(int argc, char **argv) ctl.req.month = local_time->tm_mon + 1; break; default: - usage(stderr); + warnx(_("bad usage")); + errtryhelp(EXIT_FAILURE); } if (0 < ctl.req.week) { @@ -987,8 +988,9 @@ static void center(const char *str, size_t len, int separate) } } -static void __attribute__ ((__noreturn__)) usage(FILE * out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s [options] [[[day] month] year]\n"), program_invocation_short_name); fprintf(out, _(" %s [options] \n"), program_invocation_short_name); @@ -1017,5 +1019,5 @@ static void __attribute__ ((__noreturn__)) usage(FILE * out) fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("cal(1)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } diff --git a/misc-utils/look.c b/misc-utils/look.c index 3f785a727..a0d898db1 100644 --- a/misc-utils/look.c +++ b/misc-utils/look.c @@ -78,7 +78,7 @@ static int compare (char *, char *); static char *linear_search (char *, char *); static int look (char *, char *); static void print_from (char *, char *); -static void __attribute__ ((__noreturn__)) usage(FILE * out); +static void __attribute__((__noreturn__)) usage(void); int main(int argc, char *argv[]) @@ -126,7 +126,7 @@ main(int argc, char *argv[]) printf(UTIL_LINUX_VERSION); return EXIT_SUCCESS; case 'h': - usage(stdout); + usage(); default: errtryhelp(EXIT_FAILURE); } @@ -143,7 +143,8 @@ main(int argc, char *argv[]) string = *argv; break; default: - usage(stderr); + warnx(_("bad usage")); + errtryhelp(EXIT_FAILURE); } if (termchar != '\0' && (p = strchr(string, termchar)) != NULL) @@ -348,8 +349,9 @@ compare(char *s2, char *s2end) { return ((i > 0) ? LESS : (i < 0) ? GREATER : EQUAL); } -static void __attribute__ ((__noreturn__)) usage(FILE * out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s [options] [...]\n"), program_invocation_short_name); @@ -367,5 +369,5 @@ static void __attribute__ ((__noreturn__)) usage(FILE * out) fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("look(1)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } diff --git a/misc-utils/rename.c b/misc-utils/rename.c index 8230ac3da..48606d75e 100644 --- a/misc-utils/rename.c +++ b/misc-utils/rename.c @@ -127,8 +127,9 @@ static int do_file(char *from, char *to, char *s, int verbose, int noact, int no return ret; } -static void __attribute__ ((__noreturn__)) usage(FILE * out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s [options] ...\n"), @@ -146,7 +147,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE * out) fputs(USAGE_HELP, out); fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("rename(1)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } int main(int argc, char **argv) @@ -188,7 +189,7 @@ int main(int argc, char **argv) printf(UTIL_LINUX_VERSION); return EXIT_SUCCESS; case 'h': - usage(stdout); + usage(); default: errtryhelp(EXIT_FAILURE); } @@ -198,7 +199,7 @@ int main(int argc, char **argv) if (argc < 3) { warnx(_("not enough arguments")); - usage(stderr); + errtryhelp(EXIT_FAILURE); } from = argv[0]; diff --git a/misc-utils/wipefs.c b/misc-utils/wipefs.c index 209ed7147..0bd53253d 100644 --- a/misc-utils/wipefs.c +++ b/misc-utils/wipefs.c @@ -451,8 +451,9 @@ do_wipe(struct wipe_desc *wp, const char *devname, int flags) static void __attribute__((__noreturn__)) -usage(FILE *out) +usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s [options] \n"), program_invocation_short_name); @@ -474,7 +475,7 @@ usage(FILE *out) fprintf(out, USAGE_MAN_TAIL("wipefs(8)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } @@ -525,7 +526,7 @@ main(int argc, char **argv) flags |= WP_FL_FORCE; break; case 'h': - usage(stdout); + usage(); break; case 'n': flags |= WP_FL_NOACT; @@ -552,8 +553,11 @@ main(int argc, char **argv) } } - if (optind == argc) - usage(stderr); + if (optind == argc) { + warnx(_("no device specified")); + errtryhelp(EXIT_FAILURE); + + } if ((flags & WP_FL_BACKUP) && !((flags & WP_FL_ALL) || has_offset)) warnx(_("The --backup option is meaningless in this context")); diff --git a/schedutils/ionice.c b/schedutils/ionice.c index 1cbde8faa..9d0648bca 100644 --- a/schedutils/ionice.c +++ b/schedutils/ionice.c @@ -98,8 +98,9 @@ static void ioprio_setid(int which, int ioclass, int data, int who) err(EXIT_FAILURE, _("ioprio_set failed")); } -static void __attribute__ ((__noreturn__)) usage(FILE * out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %1$s [options] -p ...\n" " %1$s [options] -P ...\n" @@ -125,7 +126,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE * out) fprintf(out, USAGE_MAN_TAIL("ionice(1)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } int main(int argc, char **argv) @@ -201,7 +202,7 @@ int main(int argc, char **argv) printf(UTIL_LINUX_VERSION); return EXIT_SUCCESS; case 'h': - usage(stdout); + usage(); default: errtryhelp(EXIT_FAILURE); } @@ -258,9 +259,10 @@ int main(int argc, char **argv) ioprio_setid(0, ioclass, data, IOPRIO_WHO_PROCESS); execvp(argv[optind], &argv[optind]); err(EXIT_FAILURE, _("failed to execute %s"), argv[optind]); - } else - usage(stderr); - + } else { + warnx(_("bad usage")); + errtryhelp(EXIT_FAILURE); + } return EXIT_SUCCESS; } diff --git a/schedutils/taskset.c b/schedutils/taskset.c index b117b1c85..9870040e7 100644 --- a/schedutils/taskset.c +++ b/schedutils/taskset.c @@ -45,8 +45,9 @@ struct taskset { get_only:1; /* print the mask, but not modify */ }; -static void __attribute__((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fprintf(out, _("Usage: %s [options] [mask | cpu-list] [pid|cmd [args...]]\n\n"), program_invocation_short_name); @@ -78,7 +79,7 @@ static void __attribute__((__noreturn__)) usage(FILE *out) fprintf(out, USAGE_MAN_TAIL("taskset(1)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } static void print_affinity(struct taskset *ts, int isnew) @@ -176,7 +177,7 @@ int main(int argc, char **argv) printf(UTIL_LINUX_VERSION); return EXIT_SUCCESS; case 'h': - usage(stdout); + usage(); break; default: errtryhelp(EXIT_FAILURE); @@ -184,8 +185,10 @@ int main(int argc, char **argv) } if ((!pid && argc - optind < 2) - || (pid && (argc - optind < 1 || argc - optind > 2))) - usage(stderr); + || (pid && (argc - optind < 1 || argc - optind > 2))) { + warnx(_("bad usage")); + errtryhelp(EXIT_FAILURE); + } ncpus = get_max_number_of_cpus(); if (ncpus <= 0) diff --git a/sys-utils/blkdiscard.c b/sys-utils/blkdiscard.c index 7f2db58b1..e6a9dce5c 100644 --- a/sys-utils/blkdiscard.c +++ b/sys-utils/blkdiscard.c @@ -77,8 +77,9 @@ static void print_stats(int act, char *path, uint64_t stats[]) } } -static void __attribute__((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s [options] \n"), program_invocation_short_name); @@ -99,7 +100,7 @@ static void __attribute__((__noreturn__)) usage(FILE *out) fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("blkdiscard(8)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } @@ -136,7 +137,7 @@ int main(int argc, char **argv) while ((c = getopt_long(argc, argv, "hVsvo:l:p:z", longopts, NULL)) != -1) { switch(c) { case 'h': - usage(stdout); + usage(); break; case 'V': printf(UTIL_LINUX_VERSION); @@ -174,7 +175,7 @@ int main(int argc, char **argv) if (optind != argc) { warnx(_("unexpected number of arguments")); - usage(stderr); + errtryhelp(EXIT_FAILURE); } fd = open(path, O_WRONLY); diff --git a/sys-utils/chcpu.c b/sys-utils/chcpu.c index 30afa457c..c0f568073 100644 --- a/sys-utils/chcpu.c +++ b/sys-utils/chcpu.c @@ -232,8 +232,9 @@ static void cpu_parse(char *cpu_string, cpu_set_t *cpu_set, size_t setsize) errx(EXIT_FAILURE, _("failed to parse CPU list: %s"), cpu_string); } -static void __attribute__((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fprintf(out, _( "\nUsage:\n" " %s [options]\n"), program_invocation_short_name); @@ -251,7 +252,7 @@ static void __attribute__((__noreturn__)) usage(FILE *out) " -r, --rescan trigger rescan of cpus\n" " -V, --version output version information and exit\n")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } int main(int argc, char *argv[]) @@ -316,7 +317,7 @@ int main(int argc, char *argv[]) cpu_parse(argv[optind - 1], cpu_set, setsize); break; case 'h': - usage(stdout); + usage(); case 'p': if (strcmp("horizontal", argv[optind - 1]) == 0) cmd = CMD_CPU_DISPATCH_HORIZONTAL; @@ -337,8 +338,10 @@ int main(int argc, char *argv[]) } } - if ((argc == 1) || (argc != optind)) - usage(stderr); + if ((argc == 1) || (argc != optind)) { + warnx(_("bad usage")); + errtryhelp(EXIT_FAILURE); + } switch (cmd) { case CMD_CPU_ENABLE: diff --git a/sys-utils/chmem.c b/sys-utils/chmem.c index 44733bf76..7f7be6ab6 100644 --- a/sys-utils/chmem.c +++ b/sys-utils/chmem.c @@ -234,8 +234,9 @@ static void parse_parameter(struct chmem_desc *desc, char *param) errx(EXIT_FAILURE, _("Invalid range: %s"), param); } -static void __attribute__((__noreturn__)) chmem_usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s [options] [SIZE|RANGE|BLOCKRANGE]\n"), program_invocation_short_name); @@ -253,7 +254,7 @@ static void __attribute__((__noreturn__)) chmem_usage(FILE *out) fprintf(out, USAGE_MAN_TAIL("chmem(8)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } int main(int argc, char **argv) @@ -300,7 +301,7 @@ int main(int argc, char **argv) desc->use_blocks = 1; break; case 'h': - chmem_usage(stdout); + usage(); break; case 'v': desc->verbose = 1; @@ -313,8 +314,10 @@ int main(int argc, char **argv) } } - if ((argc == 1) || (argc != optind + 1) || (cmd == CMD_NONE)) - chmem_usage(stderr); + if ((argc == 1) || (argc != optind + 1) || (cmd == CMD_NONE)) { + warnx(_("bad usage")); + errtryhelp(EXIT_FAILURE); + } parse_parameter(desc, argv[optind]); diff --git a/sys-utils/dmesg.c b/sys-utils/dmesg.c index 37639ebe5..cd5da90f4 100644 --- a/sys-utils/dmesg.c +++ b/sys-utils/dmesg.c @@ -266,8 +266,9 @@ static int set_level_color(int log_level, const char *mesg, size_t mesgsz) return id >= 0 ? 0 : -1; } -static void __attribute__((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; size_t i; fputs(USAGE_HEADER, out); @@ -320,7 +321,7 @@ static void __attribute__((__noreturn__)) usage(FILE *out) _(level_names[i].help)); fputs(USAGE_SEPARATOR, out); fprintf(out, USAGE_MAN_TAIL("dmesg(1)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } /* @@ -1422,7 +1423,7 @@ int main(int argc, char *argv[]) ctl.pager = 1; break; case 'h': - usage(stdout); + usage(); break; case 'k': ctl.fltr_fac = 1; @@ -1487,8 +1488,10 @@ int main(int argc, char *argv[]) } } - if (argc != optind) - usage(stderr); + if (argc != optind) { + warnx(_("bad usage")); + errtryhelp(EXIT_FAILURE); + } if ((is_timefmt(&ctl, RELTIME) || is_timefmt(&ctl, CTIME) || diff --git a/sys-utils/fsfreeze.c b/sys-utils/fsfreeze.c index b1fa4fa8c..8b0d5d10e 100644 --- a/sys-utils/fsfreeze.c +++ b/sys-utils/fsfreeze.c @@ -33,9 +33,10 @@ enum fs_operation { UNFREEZE }; -static void __attribute__((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { - fprintf(out, USAGE_HEADER); + FILE *out = stdout; + fputs(USAGE_HEADER, out); fprintf(out, _(" %s [options] \n"), program_invocation_short_name); @@ -45,12 +46,12 @@ static void __attribute__((__noreturn__)) usage(FILE *out) fputs(USAGE_OPTIONS, out); fputs(_(" -f, --freeze freeze the filesystem\n"), out); fputs(_(" -u, --unfreeze unfreeze the filesystem\n"), out); - fprintf(out, USAGE_SEPARATOR); - fprintf(out, USAGE_HELP); - fprintf(out, USAGE_VERSION); + fputs(USAGE_SEPARATOR, out); + fputs(USAGE_HELP, out); + fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("fsfreeze(8)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } int main(int argc, char **argv) @@ -85,7 +86,7 @@ int main(int argc, char **argv) switch(c) { case 'h': - usage(stdout); + usage(); break; case 'f': action = FREEZE; @@ -109,7 +110,7 @@ int main(int argc, char **argv) if (optind != argc) { warnx(_("unexpected number of arguments")); - usage(stderr); + errtryhelp(EXIT_FAILURE); } fd = open(path, O_RDONLY); diff --git a/sys-utils/fstrim.c b/sys-utils/fstrim.c index c400a61b5..698f30a93 100644 --- a/sys-utils/fstrim.c +++ b/sys-utils/fstrim.c @@ -244,8 +244,9 @@ static int fstrim_all(struct fstrim_range *rangetpl, int verbose) return EXIT_SUCCESS; } -static void __attribute__((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s [options] \n"), program_invocation_short_name); @@ -264,7 +265,7 @@ static void __attribute__((__noreturn__)) usage(FILE *out) fputs(USAGE_HELP, out); fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("fstrim(8)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } int main(int argc, char **argv) @@ -298,7 +299,7 @@ int main(int argc, char **argv) all = 1; break; case 'h': - usage(stdout); + usage(); break; case 'V': printf(UTIL_LINUX_VERSION); @@ -332,7 +333,7 @@ int main(int argc, char **argv) if (optind != argc) { warnx(_("unexpected number of arguments")); - usage(stderr); + errtryhelp(EXIT_FAILURE); } if (all) diff --git a/sys-utils/ipcmk.c b/sys-utils/ipcmk.c index f18baf00d..c6d322cbf 100644 --- a/sys-utils/ipcmk.c +++ b/sys-utils/ipcmk.c @@ -60,8 +60,9 @@ static int create_sem(int nsems, int permission) return semget(key, nsems, permission | IPC_CREAT); } -static void __attribute__ ((__noreturn__)) usage(FILE * out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s [options]\n"), program_invocation_short_name); @@ -79,7 +80,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE * out) fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("ipcmk(1)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } int main(int argc, char **argv) @@ -121,7 +122,7 @@ int main(int argc, char **argv) permission = strtoul(optarg, NULL, 8); break; case 'h': - usage(stdout); + usage(); break; case 'V': printf(UTIL_LINUX_VERSION); @@ -131,9 +132,10 @@ int main(int argc, char **argv) } } - if(!ask_shm && !ask_msg && !ask_sem) - usage(stderr); - + if(!ask_shm && !ask_msg && !ask_sem) { + warnx(_("bad usage")); + errtryhelp(EXIT_FAILURE); + } if (ask_shm) { int shmid; if (-1 == (shmid = create_shm(size, permission))) diff --git a/sys-utils/ipcrm.c b/sys-utils/ipcrm.c index 5b71f7d81..a60919d9b 100644 --- a/sys-utils/ipcrm.c +++ b/sys-utils/ipcrm.c @@ -44,8 +44,9 @@ typedef enum type_id { static int verbose = 0; /* print the usage */ -static void __attribute__ ((__noreturn__)) usage(FILE * out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %1$s [options]\n" " %1$s shm|msg|sem ...\n"), program_invocation_short_name); @@ -68,7 +69,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE * out) fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("ipcrm(1)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } static int remove_id(int type, int iskey, int id) @@ -158,7 +159,7 @@ static int deprecated_main(int argc, char **argv) if (argc < 3) { warnx(_("not enough arguments")); - usage(stderr); + errtryhelp(EXIT_FAILURE); } if (remove_arg_list(type, argc - 2, &argv[2])) @@ -401,7 +402,7 @@ int main(int argc, char **argv) verbose = 1; break; case 'h': - usage(stdout); + usage(); case 'V': printf(UTIL_LINUX_VERSION); return EXIT_SUCCESS; diff --git a/sys-utils/losetup.c b/sys-utils/losetup.c index 9ff547edb..593d3b536 100644 --- a/sys-utils/losetup.c +++ b/sys-utils/losetup.c @@ -375,8 +375,9 @@ done: return rc; } -static void usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; size_t i; fputs(USAGE_HEADER, out); @@ -427,7 +428,7 @@ static void usage(FILE *out) fprintf(out, USAGE_MAN_TAIL("losetup(8)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } static void warn_size(const char *filename, uint64_t size) @@ -653,7 +654,7 @@ int main(int argc, char **argv) act = A_FIND_FREE; break; case 'h': - usage(stdout); + usage(); break; case 'J': json = 1; @@ -860,7 +861,8 @@ int main(int argc, char **argv) loopcxt_get_device(&lc)); break; default: - usage(stderr); + warnx(_("bad usage")); + errtryhelp(EXIT_FAILURE); break; } diff --git a/sys-utils/lscpu.c b/sys-utils/lscpu.c index 2871f7131..2504da2e0 100644 --- a/sys-utils/lscpu.c +++ b/sys-utils/lscpu.c @@ -2044,8 +2044,9 @@ print_summary(struct lscpu_desc *desc, struct lscpu_modifier *mod) scols_unref_table(tb); } -static void __attribute__((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; size_t i; fputs(USAGE_HEADER, out); @@ -2074,7 +2075,7 @@ static void __attribute__((__noreturn__)) usage(FILE *out) fprintf(out, USAGE_MAN_TAIL("lscpu(1)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } int main(int argc, char *argv[]) @@ -2130,7 +2131,7 @@ int main(int argc, char *argv[]) cpu_modifier_specified = 1; break; case 'h': - usage(stdout); + usage(); case 'J': mod->json = 1; break; @@ -2173,8 +2174,10 @@ int main(int argc, char *argv[]) return EXIT_FAILURE; } - if (argc != optind) - usage(stderr); + if (argc != optind) { + warnx(_("bad usage")); + errtryhelp(EXIT_FAILURE); + } /* set default cpu display mode if none was specified */ if (!mod->online && !mod->offline) { diff --git a/sys-utils/lsmem.c b/sys-utils/lsmem.c index 891be36f7..4efd29632 100644 --- a/sys-utils/lsmem.c +++ b/sys-utils/lsmem.c @@ -363,8 +363,9 @@ static void read_basic_info(struct lsmem *lsmem) lsmem->have_nodes = 1; } -static void __attribute__((__noreturn__)) lsmem_usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; unsigned int i; fputs(USAGE_HEADER, out); @@ -449,7 +450,7 @@ int main(int argc, char **argv) lsmem->bytes = 1; break; case 'h': - lsmem_usage(stdout); + usage(); break; case 'J': lsmem->json = 1; @@ -493,8 +494,10 @@ int main(int argc, char **argv) } } - if (argc != optind) - lsmem_usage(stderr); + if (argc != optind) { + warnx(_("bad usage")); + errtryhelp(EXIT_FAILURE); + } if (lsmem->want_table + lsmem->want_summary == 0) errx(EXIT_FAILURE, _("options --{raw,json,pairs} and --summary=only are mutually exclusive")); diff --git a/sys-utils/mount.c b/sys-utils/mount.c index ffe294e3f..b46634c7c 100644 --- a/sys-utils/mount.c +++ b/sys-utils/mount.c @@ -384,8 +384,9 @@ static int has_remount_flag(struct libmnt_context *cxt) return mflags & MS_REMOUNT; } -static void __attribute__((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _( " %1$s [-lhV]\n" @@ -460,7 +461,7 @@ static void __attribute__((__noreturn__)) usage(FILE *out) fprintf(out, USAGE_MAN_TAIL("mount(8)")); - exit(out == stderr ? MNT_EX_USAGE : MNT_EX_SUCCESS); + exit(MNT_EX_SUCCESS); } int main(int argc, char **argv) @@ -571,7 +572,7 @@ int main(int argc, char **argv) mnt_context_enable_fork(cxt, TRUE); break; case 'h': - usage(stdout); + usage(); break; case 'i': mnt_context_disable_helpers(cxt, TRUE); @@ -694,8 +695,10 @@ int main(int argc, char **argv) !mnt_context_get_target(cxt) && !argc && !all) { - if (oper || mnt_context_get_options(cxt)) - usage(stderr); + if (oper || mnt_context_get_options(cxt)) { + warnx(_("bad usage")); + errtryhelp(MNT_EX_USAGE); + } print_all(cxt, types, show_labels); goto done; } @@ -705,8 +708,10 @@ int main(int argc, char **argv) if (mnt_context_is_restricted(cxt) && types) exit_non_root("types"); - if (oper && (types || all || mnt_context_get_source(cxt))) - usage(stderr); + if (oper && (types || all || mnt_context_get_source(cxt))) { + warnx(_("bad usage")); + errtryhelp(MNT_EX_USAGE); + } if (types && (all || strchr(types, ',') || strncmp(types, "no", 2) == 0)) @@ -772,8 +777,10 @@ int main(int argc, char **argv) mnt_context_set_source(cxt, argv[0]); mnt_context_set_target(cxt, argv[1]); - } else - usage(stderr); + } else { + warnx(_("bad usage")); + errtryhelp(MNT_EX_USAGE); + } if (mnt_context_is_restricted(cxt)) sanitize_paths(cxt); diff --git a/sys-utils/mountpoint.c b/sys-utils/mountpoint.c index ab0951f9b..d07077252 100644 --- a/sys-utils/mountpoint.c +++ b/sys-utils/mountpoint.c @@ -111,8 +111,9 @@ static int print_devno(const struct mountpoint_control *ctl) return 0; } -static void __attribute__((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %1$s [-qd] /path/to/directory\n" @@ -130,7 +131,7 @@ static void __attribute__((__noreturn__)) usage(FILE *out) fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("mountpoint(1)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } int main(int argc, char **argv) @@ -167,7 +168,7 @@ int main(int argc, char **argv) ctl.dev_devno = 1; break; case 'h': - usage(stdout); + usage(); break; case 'V': printf(UTIL_LINUX_VERSION); @@ -177,8 +178,10 @@ int main(int argc, char **argv) } } - if (optind + 1 != argc) - usage(stderr); + if (optind + 1 != argc) { + warnx(_("bad usage")); + errtryhelp(EXIT_FAILURE); + } ctl.path = argv[optind]; diff --git a/sys-utils/pivot_root.c b/sys-utils/pivot_root.c index acc105621..ee6fd3c19 100644 --- a/sys-utils/pivot_root.c +++ b/sys-utils/pivot_root.c @@ -27,20 +27,21 @@ #define pivot_root(new_root,put_old) syscall(SYS_pivot_root,new_root,put_old) -static void __attribute__ ((__noreturn__)) usage(FILE * out) +static void __attribute__((__noreturn__)) usage(void) { - fprintf(out, USAGE_HEADER); + FILE *out = stdout; + fputs(USAGE_HEADER, out); fprintf(out, _(" %s [options] new_root put_old\n"), program_invocation_short_name); fputs(USAGE_SEPARATOR, out); fputs(_("Change the root filesystem.\n"), out); - fprintf(out, USAGE_OPTIONS); - fprintf(out, USAGE_HELP); - fprintf(out, USAGE_VERSION); + fputs(USAGE_OPTIONS, out); + fputs(USAGE_HELP, out); + fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("pivot_root(8)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } int main(int argc, char **argv) @@ -63,14 +64,15 @@ int main(int argc, char **argv) printf(UTIL_LINUX_VERSION); return EXIT_SUCCESS; case 'h': - usage(stdout); + usage(); default: errtryhelp(EXIT_FAILURE); } - if (argc != 3) - usage(stderr); - + if (argc != 3) { + warnx(_("bad usage")); + errtryhelp(EXIT_FAILURE); + } if (pivot_root(argv[1], argv[2]) < 0) err(EXIT_FAILURE, _("failed to change root from `%s' to `%s'"), argv[1], argv[2]); diff --git a/sys-utils/setsid.c b/sys-utils/setsid.c index ecc32ef41..891d8a6b7 100644 --- a/sys-utils/setsid.c +++ b/sys-utils/setsid.c @@ -25,8 +25,9 @@ #include "nls.h" #include "closestream.h" -static void __attribute__ ((__noreturn__)) usage(FILE * out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _( " %s [options] [arguments ...]\n"), @@ -43,7 +44,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE * out) fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("setsid(1)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } int main(int argc, char **argv) @@ -78,13 +79,15 @@ int main(int argc, char **argv) status = 1; break; case 'h': - usage(stdout); + usage(); default: errtryhelp(EXIT_FAILURE); } - if (argc - optind < 1) - usage(stderr); + if (argc - optind < 1) { + warnx(_("no command specified")); + errtryhelp(EXIT_FAILURE); + } if (getpgrp() == getpid()) { pid = fork(); diff --git a/sys-utils/swapoff.c b/sys-utils/swapoff.c index aab6dfb8d..da2e268d7 100644 --- a/sys-utils/swapoff.c +++ b/sys-utils/swapoff.c @@ -116,8 +116,9 @@ static int swapoff_by(const char *name, const char *value, int quiet) return special ? do_swapoff(special, quiet, CANONIC) : cannot_find(value); } -static void __attribute__ ((__noreturn__)) usage(FILE * out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s [options] []\n"), program_invocation_short_name); @@ -141,7 +142,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE * out) " name of file to be used\n"), out); fprintf(out, USAGE_MAN_TAIL("swapoff(8)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } static int swapoff_all(void) @@ -207,7 +208,7 @@ int main(int argc, char *argv[]) ++all; break; case 'h': /* help */ - usage(stdout); + usage(); break; case 'v': /* be chatty */ ++verbose; @@ -227,8 +228,10 @@ int main(int argc, char *argv[]) } argv += optind; - if (!all && !numof_labels() && !numof_uuids() && *argv == NULL) - usage(stderr); + if (!all && !numof_labels() && !numof_uuids() && *argv == NULL) { + warnx(_("bad usage")); + errtryhelp(EXIT_FAILURE); + } mnt_init_debug(0); mntcache = mnt_new_cache(); diff --git a/sys-utils/swapon.c b/sys-utils/swapon.c index a46633b16..5242b96f4 100644 --- a/sys-utils/swapon.c +++ b/sys-utils/swapon.c @@ -782,9 +782,11 @@ static int swapon_all(struct swapon_ctl *ctl) } -static void __attribute__ ((__noreturn__)) usage(FILE * out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; size_t i; + fputs(USAGE_HEADER, out); fprintf(out, _(" %s [options] []\n"), program_invocation_short_name); @@ -829,7 +831,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE * out) fprintf(out, " %-5s %s\n", infos[i].name, _(infos[i].help)); fprintf(out, USAGE_MAN_TAIL("swapon(8)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } int main(int argc, char *argv[]) @@ -895,7 +897,7 @@ int main(int argc, char *argv[]) ctl.all = 1; break; case 'h': /* help */ - usage(stdout); + usage(); break; case 'o': options = optarg; @@ -980,8 +982,10 @@ int main(int argc, char *argv[]) return status; } - if (ctl.props.no_fail && !ctl.all) - usage(stderr); + if (ctl.props.no_fail && !ctl.all) { + warnx(_("bad usage")); + errtryhelp(EXIT_FAILURE); + } if (ctl.all) status |= swapon_all(&ctl); diff --git a/sys-utils/switch_root.c b/sys-utils/switch_root.c index 7bd07783e..dff334253 100644 --- a/sys-utils/switch_root.c +++ b/sys-utils/switch_root.c @@ -198,8 +198,9 @@ static int switchroot(const char *newroot) return 0; } -static void __attribute__((__noreturn__)) usage(FILE *output) +static void __attribute__((__noreturn__)) usage(void) { + FILE *output = stdout; fputs(USAGE_HEADER, output); fprintf(output, _(" %s [options] \n"), program_invocation_short_name); @@ -212,7 +213,7 @@ static void __attribute__((__noreturn__)) usage(FILE *output) fputs(USAGE_VERSION, output); fprintf(output, USAGE_MAN_TAIL("switch_root(8)")); - exit(output == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } int main(int argc, char *argv[]) @@ -233,19 +234,23 @@ int main(int argc, char *argv[]) printf(UTIL_LINUX_VERSION); return EXIT_SUCCESS; case 'h': - usage(stdout); + usage(); default: errtryhelp(EXIT_FAILURE); } - if (argc < 3) - usage(stderr); + if (argc < 3) { + warnx(_("not enough arguments")); + errtryhelp(EXIT_FAILURE); + } newroot = argv[1]; init = argv[2]; initargs = &argv[2]; - if (!*newroot || !*init) - usage(stderr); + if (!*newroot || !*init) { + warnx(_("bad usage")); + errtryhelp(EXIT_FAILURE); + } if (switchroot(newroot)) errx(EXIT_FAILURE, _("failed. Sorry.")); diff --git a/sys-utils/tunelp.c b/sys-utils/tunelp.c index 2749dd1c8..99da3f3f6 100644 --- a/sys-utils/tunelp.c +++ b/sys-utils/tunelp.c @@ -87,8 +87,9 @@ struct command { struct command *next; }; -static void __attribute__((__noreturn__)) print_usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s [options] \n"), program_invocation_short_name); @@ -115,7 +116,7 @@ static void __attribute__((__noreturn__)) print_usage(FILE *out) fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("tunelp(8)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } int main(int argc, char **argv) @@ -148,8 +149,10 @@ int main(int argc, char **argv) strutils_set_exitcode(EXIT_LP_BADVAL); - if (argc < 2) - print_usage(stderr); + if (argc < 2) { + warnx(_("not enough arguments")); + errtryhelp(EXIT_FAILURE); + } cmdst = cmds = xmalloc(sizeof(struct command)); cmds->next = NULL; @@ -158,7 +161,7 @@ int main(int argc, char **argv) while ((c = getopt_long(argc, argv, "t:c:w:a:i:ho:C:sq:rT:vV", longopts, NULL)) != -1) { switch (c) { case 'h': - print_usage(stdout); + usage(); break; case 'i': cmds->op = LPSETIRQ; @@ -246,8 +249,10 @@ int main(int argc, char **argv) } } - if (optind != argc - 1) - print_usage(stderr); + if (optind != argc - 1) { + warnx(_("no device specified")); + errtryhelp(EXIT_FAILURE); + } filename = xstrdup(argv[optind]); fd = open(filename, O_WRONLY | O_NONBLOCK, 0); @@ -263,7 +268,7 @@ int main(int argc, char **argv) if (!S_ISCHR(statbuf.st_mode)) { warnx(_("%s not an lp device"), filename); - print_usage(stderr); + errtryhelp(EXIT_FAILURE); } /* Allow for binaries compiled under a new kernel to work on * the old ones The irq argument to ioctl isn't touched by diff --git a/sys-utils/umount.c b/sys-utils/umount.c index 57140a660..17d94be10 100644 --- a/sys-utils/umount.c +++ b/sys-utils/umount.c @@ -71,8 +71,9 @@ static void __attribute__((__noreturn__)) print_version(void) fputs(")\n", stdout); exit(MNT_EX_SUCCESS); } -static void __attribute__((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _( " %1$s [-hV]\n" @@ -105,7 +106,7 @@ static void __attribute__((__noreturn__)) usage(FILE *out) fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("umount(8)")); - exit(out == stderr ? MNT_EX_USAGE : MNT_EX_SUCCESS); + exit(MNT_EX_SUCCESS); } static void __attribute__((__noreturn__)) exit_non_root(const char *option) @@ -479,7 +480,7 @@ int main(int argc, char **argv) mnt_context_enable_force(cxt, TRUE); break; case 'h': - usage(stdout); + usage(); break; case 'i': mnt_context_disable_helpers(cxt, TRUE); @@ -525,7 +526,8 @@ int main(int argc, char **argv) rc = umount_all(cxt); } else if (argc < 1) { - usage(stderr); + warnx(_("bad usage")); + errtryhelp(MNT_EX_USAGE); } else if (alltargets) { while (argc--) diff --git a/term-utils/mesg.c b/term-utils/mesg.c index 43835b480..fe5218aa4 100644 --- a/term-utils/mesg.c +++ b/term-utils/mesg.c @@ -66,8 +66,9 @@ #define IS_NOT_ALLOWED 1 /* Receiving messages is not allowed. */ #define MESG_EXIT_FAILURE 2 /* An error occurred. */ -static void __attribute__ ((__noreturn__)) usage(FILE * out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); /* TRANSLATORS: this program uses for y and n rpmatch(3), * which means they can be translated. */ @@ -83,7 +84,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE * out) fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("mesg(1)")); - exit(out == stderr ? MESG_EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } int main(int argc, char *argv[]) @@ -113,7 +114,7 @@ int main(int argc, char *argv[]) printf(UTIL_LINUX_VERSION); exit(EXIT_SUCCESS); case 'h': - usage(stdout); + usage(); default: errtryhelp(EXIT_FAILURE); } @@ -159,7 +160,7 @@ int main(int argc, char *argv[]) break; case RPMATCH_INVALID: warnx(_("invalid argument: %s"), argv[0]); - usage(stderr); + errtryhelp(EXIT_FAILURE); default: abort(); } diff --git a/term-utils/setterm.c b/term-utils/setterm.c index 9f60e5693..8ab5b45d7 100644 --- a/term-utils/setterm.c +++ b/term-utils/setterm.c @@ -371,8 +371,9 @@ static int parse_bfreq(char **av, char *oa, int *oi) return strtos32_or_err(arg, _("argument error")); } -static void __attribute__((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s [options]\n"), program_invocation_short_name); @@ -420,7 +421,7 @@ static void __attribute__((__noreturn__)) usage(FILE *out) fputs(_(" --version show version information and exit\n"), out); fputs(_(" --help display this help and exit\n"), out); fprintf(out, USAGE_MAN_TAIL("setterm(1)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } static int __attribute__((__pure__)) set_opt_flag(int opt) @@ -672,7 +673,7 @@ static void parse_option(struct setterm_control *ctl, int ac, char **av) printf(UTIL_LINUX_VERSION); exit(EXIT_SUCCESS); case OPT_HELP: - usage(stdout); + usage(); default: errtryhelp(EXIT_FAILURE); } @@ -1170,9 +1171,10 @@ int main(int argc, char **argv) textdomain(PACKAGE); atexit(close_stdout); - if (argc < 2) - usage(stderr); - + if (argc < 2) { + warnx(_("bad usage")); + errtryhelp(EXIT_FAILURE); + } parse_option(&ctl, argc, argv); init_terminal(&ctl); perform_sequence(&ctl); diff --git a/text-utils/col.c b/text-utils/col.c index bac48e7e3..a473e55fb 100644 --- a/text-utils/col.c +++ b/text-utils/col.c @@ -124,8 +124,9 @@ static int pass_unknown_seqs; /* whether to pass unknown control sequences */ if (putwchar(ch) == WEOF) \ wrerr(); -static void __attribute__((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fprintf(out, _( "\nUsage:\n" " %s [options]\n"), program_invocation_short_name); @@ -149,7 +150,7 @@ static void __attribute__((__noreturn__)) usage(FILE *out) program_invocation_short_name); fprintf(out, USAGE_MAN_TAIL("col(1)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } static void __attribute__((__noreturn__)) wrerr(void) @@ -221,13 +222,15 @@ int main(int argc, char **argv) printf(UTIL_LINUX_VERSION); return EXIT_SUCCESS; case 'H': - usage(stdout); + usage(); default: errtryhelp(EXIT_FAILURE); } - if (optind != argc) - usage(stderr); + if (optind != argc) { + warnx(_("bad usage")); + errtryhelp(EXIT_FAILURE); + } adjust = cur_col = extra_lines = warned = 0; cur_line = max_line = nflushd_lines = this_line = 0; From fa2cd89aca82d14943133c76763c04ae430d5dc7 Mon Sep 17 00:00:00 2001 From: Ruediger Meier Date: Tue, 20 Jun 2017 20:30:29 +0200 Subject: [PATCH 6/7] misc: cosmetics, remove argument from usage(int) This patch is trivial and changes nothing, because we were always using usage(0). Signed-off-by: Ruediger Meier --- misc-utils/blkid.c | 8 ++++---- sys-utils/nsenter.c | 8 ++++---- sys-utils/unshare.c | 8 ++++---- text-utils/column.c | 8 ++++---- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/misc-utils/blkid.c b/misc-utils/blkid.c index 52179e5e1..f4757e8c8 100644 --- a/misc-utils/blkid.c +++ b/misc-utils/blkid.c @@ -68,9 +68,9 @@ static void print_version(FILE *out) LIBBLKID_VERSION, LIBBLKID_DATE); } -static void usage(int error) +static void __attribute__((__noreturn__)) usage(void) { - FILE *out = error ? stderr : stdout; + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _( " %s --label