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>
This commit is contained in:
Jes Sorensen 2012-01-25 15:18:01 +01:00 committed by NeilBrown
parent 30602f533f
commit eb155f6de0
1 changed files with 39 additions and 10 deletions

49
mdmon.c
View File

@ -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;
static struct option options[] = {
{"all", 0, NULL, 'a'},
{"takeover", 0, NULL, 't'},
{"help", 0, NULL, 'h'},
{NULL, 0, NULL, 0}
};
for (arg = 1; arg < argc; arg++) {
if (strncmp(argv[arg], "--all",5) == 0 ||
strcmp(argv[arg], "/proc/mdstat") == 0) {
container_name = argv[arg];
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);