summaryrefslogtreecommitdiffstats
path: root/misc-utils/whereis.c
diff options
context:
space:
mode:
authorRuediger Meier2017-06-21 22:17:36 +0200
committerRuediger Meier2017-06-22 21:34:58 +0200
commit5aaa966dcd907bef0fcebabf8be06178cc7e5dce (patch)
treee85d30f1b582a02a6b6c940aa4ea2c8755b64e87 /misc-utils/whereis.c
parentlogin: add --help and --version (diff)
downloadkernel-qcow2-util-linux-5aaa966dcd907bef0fcebabf8be06178cc7e5dce.tar.gz
kernel-qcow2-util-linux-5aaa966dcd907bef0fcebabf8be06178cc7e5dce.tar.xz
kernel-qcow2-util-linux-5aaa966dcd907bef0fcebabf8be06178cc7e5dce.zip
whereis: add --help and --version
We can use errtryhelp() now and never print usage to stderr. One may improve all these "bad usage" messages. Signed-off-by: Ruediger Meier <ruediger.meier@ga-group.nl>
Diffstat (limited to 'misc-utils/whereis.c')
-rw-r--r--misc-utils/whereis.c48
1 files changed, 35 insertions, 13 deletions
diff --git a/misc-utils/whereis.c b/misc-utils/whereis.c
index b5b35f5f5..897a7a213 100644
--- a/misc-utils/whereis.c
+++ b/misc-utils/whereis.c
@@ -183,8 +183,10 @@ static const char *whereis_type_to_name(int type)
}
}
-static void __attribute__((__noreturn__)) usage(FILE *out)
+static void __attribute__((__noreturn__)) usage(void)
{
+ FILE *out = stdout;
+
fputs(USAGE_HEADER, out);
fprintf(out, _(" %s [options] [-BMS <dir>... -f] <name>\n"), program_invocation_short_name);
@@ -201,9 +203,12 @@ static void __attribute__((__noreturn__)) usage(FILE *out)
fputs(_(" -f terminate <dirs> argument list\n"), out);
fputs(_(" -u search for unusual entries\n"), out);
fputs(_(" -l output effective lookup paths\n"), out);
- fprintf(out, USAGE_MAN_TAIL("whereis(1)"));
- exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS);
+ fputs(USAGE_SEPARATOR, out);
+ fputs(USAGE_HELP, out);
+ fputs(USAGE_VERSION, out);
+ fprintf(out, USAGE_MAN_TAIL("whereis(1)"));
+ exit(EXIT_SUCCESS);
}
static void dirlist_add_dir(struct wh_dirlist **ls0, int type, const char *dir)
@@ -502,8 +507,18 @@ int main(int argc, char **argv)
textdomain(PACKAGE);
atexit(close_stdout);
- if (argc == 1)
- usage(stderr);
+ if (argc <= 1) {
+ warnx(_("not enough arguments"));
+ errtryhelp(EXIT_FAILURE);
+ } else {
+ /* first arg may be one of our standard longopts */
+ if (!strcmp(argv[1], "--help"))
+ usage();
+ if (!strcmp(argv[1], "--version")) {
+ printf(UTIL_LINUX_VERSION);
+ exit(EXIT_SUCCESS);
+ }
+ }
whereis_init_debug();
@@ -547,8 +562,10 @@ int main(int argc, char **argv)
opt_f_missing = 0;
break;
case 'B':
- if (*(arg + 1))
- usage(stderr);
+ if (*(arg + 1)) {
+ warnx(_("bad usage"));
+ errtryhelp(EXIT_FAILURE);
+ }
i++;
free_dirlist(&ls, BIN_DIR);
construct_dirlist_from_argv(
@@ -556,8 +573,10 @@ int main(int argc, char **argv)
opt_f_missing = 1;
break;
case 'M':
- if (*(arg + 1))
- usage(stderr);
+ if (*(arg + 1)) {
+ warnx(_("bad usage"));
+ errtryhelp(EXIT_FAILURE);
+ }
i++;
free_dirlist(&ls, MAN_DIR);
construct_dirlist_from_argv(
@@ -565,8 +584,10 @@ int main(int argc, char **argv)
opt_f_missing = 1;
break;
case 'S':
- if (*(arg + 1))
- usage(stderr);
+ if (*(arg + 1)) {
+ warnx(_("bad usage"));
+ errtryhelp(EXIT_FAILURE);
+ }
i++;
free_dirlist(&ls, SRC_DIR);
construct_dirlist_from_argv(
@@ -604,9 +625,10 @@ int main(int argc, char **argv)
printf(UTIL_LINUX_VERSION);
return EXIT_SUCCESS;
case 'h':
- usage(stdout);
+ usage();
default:
- usage(stderr);
+ warnx(_("bad usage"));
+ errtryhelp(EXIT_FAILURE);
}
if (arg_i < i) /* moved to the next argv[] item */