diff options
author | Jes Sorensen <Jes.Sorensen@redhat.com> | 2012-01-25 15:18:01 +0100 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2012-01-30 02:11:07 +0100 |
commit | eb155f6de0986dc14c37dc9c4172bf0bcb8779fe (patch) | |
tree | fb340ec540d2287ab99b2e700a9548efa217966f /mdmon.c | |
parent | imsm: display fd in error trace when when store_imsm_mpb failes (diff) | |
download | mdadm-eb155f6de0986dc14c37dc9c4172bf0bcb8779fe.tar.xz mdadm-eb155f6de0986dc14c37dc9c4172bf0bcb8779fe.zip |
mdmon: Use getopt_long() to parse command line options
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>
Diffstat (limited to 'mdmon.c')
-rw-r--r-- | mdmon.c | 51 |
1 files changed, 40 insertions, 11 deletions
@@ -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); |