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:
parent
30602f533f
commit
eb155f6de0
49
mdmon.c
49
mdmon.c
|
@ -265,7 +265,14 @@ static int do_fork(void)
|
||||||
|
|
||||||
void usage(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);
|
exit(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -277,25 +284,47 @@ int main(int argc, char *argv[])
|
||||||
int devnum;
|
int devnum;
|
||||||
char *devname;
|
char *devname;
|
||||||
int status = 0;
|
int status = 0;
|
||||||
int arg;
|
int opt;
|
||||||
int all = 0;
|
int all = 0;
|
||||||
int takeover = 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++) {
|
while ((opt = getopt_long(argc, argv, "th", options, NULL)) != -1) {
|
||||||
if (strncmp(argv[arg], "--all",5) == 0 ||
|
switch (opt) {
|
||||||
strcmp(argv[arg], "/proc/mdstat") == 0) {
|
case 'a':
|
||||||
container_name = argv[arg];
|
container_name = argv[optind-1];
|
||||||
all = 1;
|
all = 1;
|
||||||
} else if (strcmp(argv[arg], "--takeover") == 0)
|
break;
|
||||||
|
case 't':
|
||||||
|
container_name = optarg;
|
||||||
takeover = 1;
|
takeover = 1;
|
||||||
else if (container_name == NULL)
|
break;
|
||||||
container_name = argv[arg];
|
case 'h':
|
||||||
else
|
default:
|
||||||
usage();
|
usage();
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (all == 0 && container_name == NULL) {
|
||||||
|
if (argv[optind])
|
||||||
|
container_name = argv[optind];
|
||||||
|
}
|
||||||
|
|
||||||
if (container_name == NULL)
|
if (container_name == NULL)
|
||||||
usage();
|
usage();
|
||||||
|
|
||||||
|
if (argc - optind > 1)
|
||||||
|
usage();
|
||||||
|
|
||||||
|
if (strcmp(container_name, "/proc/mdstat") == 0)
|
||||||
|
all = 1;
|
||||||
|
|
||||||
if (all) {
|
if (all) {
|
||||||
struct mdstat_ent *mdstat, *e;
|
struct mdstat_ent *mdstat, *e;
|
||||||
int container_len = strlen(container_name);
|
int container_len = strlen(container_name);
|
||||||
|
|
Loading…
Reference in New Issue