]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
mdmon: Use getopt_long() to parse command line options
authorJes Sorensen <Jes.Sorensen@redhat.com>
Wed, 25 Jan 2012 14:18:01 +0000 (15:18 +0100)
committerNeilBrown <neilb@suse.de>
Mon, 30 Jan 2012 01:11:07 +0000 (12:11 +1100)
This changes mdmon over to use getopt_long() for option parsing,
making it easier to add new options. In addition this patch introduces
a short version -t for --takeover and adds -h/--help.

Acked-by: Doug Ledford <dledford@redhat.com>
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
mdmon.c

diff --git a/mdmon.c b/mdmon.c
index b6ae0e68d390211c9e6fda3faa232822e3c43606..a65c4a425544515d3c5460767c9efe350e30a76d 100644 (file)
--- a/mdmon.c
+++ b/mdmon.c
@@ -265,7 +265,14 @@ static int do_fork(void)
 
 void usage(void)
 {
-       fprintf(stderr, "Usage: mdmon [--all] [--takeover] CONTAINER\n");
+       fprintf(stderr,
+"Usage: mdmon [options] CONTAINER\n"
+"\n"
+"Options are:\n"
+"  --help        -h   : This message\n"
+"  --all              : All devices\n"
+"  --takeover    -t   : Takeover container\n"
+);
        exit(2);
 }
 
@@ -277,25 +284,47 @@ int main(int argc, char *argv[])
        int devnum;
        char *devname;
        int status = 0;
-       int arg;
+       int opt;
        int all = 0;
        int takeover = 0;
-
-       for (arg = 1; arg < argc; arg++) {
-               if (strncmp(argv[arg], "--all",5) == 0 ||
-                   strcmp(argv[arg], "/proc/mdstat") == 0) {
-                       container_name = argv[arg];
+       static struct option options[] = {
+               {"all", 0, NULL, 'a'},
+               {"takeover", 0, NULL, 't'},
+               {"help", 0, NULL, 'h'},
+               {NULL, 0, NULL, 0}
+       };
+
+       while ((opt = getopt_long(argc, argv, "th", options, NULL)) != -1) {
+               switch (opt) {
+               case 'a':
+                       container_name = argv[optind-1];
                        all = 1;
-               } else if (strcmp(argv[arg], "--takeover") == 0)
+                       break;
+               case 't':
+                       container_name = optarg;
                        takeover = 1;
-               else if (container_name == NULL)
-                       container_name = argv[arg];
-               else
+                       break;
+               case 'h':
+               default:
                        usage();
+                       break;
+               }
        }
+
+       if (all == 0 && container_name == NULL) {
+               if (argv[optind])
+                       container_name = argv[optind];
+       }
+
        if (container_name == NULL)
                usage();
 
+       if (argc - optind > 1)
+               usage();
+
+       if (strcmp(container_name, "/proc/mdstat") == 0)
+               all = 1;
+
        if (all) {
                struct mdstat_ent *mdstat, *e;
                int container_len = strlen(container_name);