]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
rev: option parsing bug fixed & long options added
authorSami Kerola <kerolasa@iki.fi>
Sat, 2 Apr 2011 16:11:09 +0000 (18:11 +0200)
committerKarel Zak <kzak@redhat.com>
Wed, 6 Apr 2011 08:48:35 +0000 (10:48 +0200)
The former getopts segment gave impression unknown options will
cause the program to exit with error and help is available with
-h. Neither work quite as designed, all unknown options made the
program to exit with success; and none of the options where
known.

The fix also has support for long options, and new --version
switch.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
text-utils/rev.c

index 76a362030b23ef045dded08850afb63dc790bf2a..6c1366d23888fd6e60aac0063822792edc5f530c 100644 (file)
@@ -56,6 +56,7 @@
 #include <string.h>
 #include <unistd.h>
 #include <signal.h>
+#include <getopt.h>
 
 #include "nls.h"
 #include "xalloc.h"
@@ -70,10 +71,14 @@ static void sig_handler(int signo)
        _exit(EXIT_SUCCESS);
 }
 
-static void __attribute__((__noreturn__)) usage(FILE *out)
+static void __attribute__ ((__noreturn__)) usage(FILE * out)
 {
-       fprintf(out, _("Usage: %s [file ...]\n"),
-                       program_invocation_short_name);
+       fprintf(out, _("Usage: %s [options] [file ...]\n"),
+               program_invocation_short_name);
+
+       fprintf(out, _("\nOptions:\n"
+                      " -V, --version   output version information and exit\n"
+                      " -h, --help      display this help and exit\n"));
 
        fprintf(out, _("\nFor more information see rev(1).\n"));
 
@@ -95,9 +100,18 @@ int main(int argc, char *argv[])
        signal(SIGINT, sig_handler);
        signal(SIGTERM, sig_handler);
 
-       while ((ch = getopt(argc, argv, "")) != -1)
+       static const struct option longopts[] = {
+               { "version",    no_argument,       0, 'V' },
+               { "help",       no_argument,       0, 'h' },
+               { NULL,         0, 0, 0 }
+       };
+
+       while ((ch = getopt_long(argc, argv, "Vh", longopts, NULL)) != -1)
                switch(ch) {
-               case '?':
+               case 'V':
+                       printf(_("%s from %s\n"), program_invocation_short_name,
+                                                 PACKAGE_STRING);
+                       exit(EXIT_SUCCESS);
                case 'h':
                        usage(stdout);
                default: