]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
whereis: add --help and --version
authorRuediger Meier <ruediger.meier@ga-group.nl>
Wed, 21 Jun 2017 20:17:36 +0000 (22:17 +0200)
committerRuediger Meier <ruediger.meier@ga-group.nl>
Thu, 22 Jun 2017 19:34:58 +0000 (21:34 +0200)
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>
misc-utils/whereis.1
misc-utils/whereis.c

index 6461f26291027afff5f180de27b3524de558de75..0d2cbe7e75a50e5079f56f57700d02f26fd88e40 100644 (file)
@@ -125,6 +125,12 @@ or
 .BR \-S
 is specified, the option will output the hard-coded paths
 that the command was able to find on the system.
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+Display help text and exit.
+.TP
+\fB\-V\fR, \fB\-\-version\fR
+Display version information and exit.
 .SH EXAMPLE
 To find all files in
 .I /usr/\:bin
index b5b35f5f5cfb7298bc6849f9d5f38a0f75eba7a1..897a7a2135b7775ebcef828bcca4b32f093adf91 100644 (file)
@@ -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 */