From eb49460b74f42e23bf284c4ccf92f4b6da2c582d Mon Sep 17 00:00:00 2001 From: Luca Berra Date: Sat, 27 Feb 2010 16:07:04 +0100 Subject: fix mdmon option parsing running mdmon --takeover --all resulted in a segfault. Also allow "--all" to be longer so that e.g. md_d127 can successfully over-write it in the argument list visible to 'ps'. Signed-off-by: Luca Berra Signed-off-by: NeilBrown --- mdmon.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'mdmon.c') diff --git a/mdmon.c b/mdmon.c index 8e62a68b..a3da7954 100644 --- a/mdmon.c +++ b/mdmon.c @@ -247,7 +247,7 @@ static int do_fork(void) void usage(void) { - fprintf(stderr, "Usage: mdmon /device/name/for/container [target_dir]\n"); + fprintf(stderr, "Usage: mdmon [--all] [--takeover] CONTAINER\n"); exit(2); } @@ -264,19 +264,23 @@ int main(int argc, char *argv[]) int takeover = 0; for (arg = 1; arg < argc; arg++) { - if (strcmp(argv[arg], "--all") == 0 || - strcmp(argv[arg], "/proc/mdstat") == 0) + if (strncmp(argv[arg], "--all",5) == 0 || + strcmp(argv[arg], "/proc/mdstat") == 0) { + container_name = argv[arg]; all = 1; - else if (strcmp(argv[arg], "--takeover") == 0) + } else if (strcmp(argv[arg], "--takeover") == 0) takeover = 1; else if (container_name == NULL) container_name = argv[arg]; else usage(); } + if (container_name == NULL) + usage(); if (all) { struct mdstat_ent *mdstat, *e; + int container_len = strlen(container_name); /* launch an mdmon instance for each container found */ mdstat = mdstat_read(0, 0); @@ -287,8 +291,8 @@ int main(int argc, char *argv[]) /* update cmdline so this mdmon instance can be * distinguished from others in a call to ps(1) */ - if (strlen(devname) <= strlen(container_name)) { - memset(container_name, 0, strlen(container_name)); + if (strlen(devname) <= container_len) { + memset(container_name, 0, container_len); sprintf(container_name, "%s", devname); } status |= mdmon(devname, e->devnum, 1, -- cgit v1.2.3