diff options
author | Doug Ledford <dledford@redhat.com> | 2007-07-09 01:59:59 +0200 |
---|---|---|
committer | Neil Brown <neilb@suse.de> | 2007-07-09 01:59:59 +0200 |
commit | 024768c465668a23db794b000e6e0f476beeb0af (patch) | |
tree | b5664a5184945c870a24188bed8311864a6cda02 | |
parent | Mark some files FD_CLOEXEC to protect sendmail from them. (diff) | |
download | mdadm-024768c465668a23db794b000e6e0f476beeb0af.tar.xz mdadm-024768c465668a23db794b000e6e0f476beeb0af.zip |
Fix parsing of "-a" in various contexts.
From: Doug Ledford <dledford@redhat.com>
This one fixes a bug where once manage mode is set, the -a short option
is no longer parsed correctly (true of grow mode as well). This happens
because when you switch the short opts to the bitmap_auto version, it
specifies that the argument must follow a, yet the loop expects to get
an undecorated option and parse it as the disk dev instead of trying to
parse optarg. So, create a new short opt array that is used for manage
and grow that doesn't list a as having an argument.
-rw-r--r-- | ReadMe.c | 2 | ||||
-rw-r--r-- | mdadm.c | 8 | ||||
-rw-r--r-- | mdadm.h | 1 |
3 files changed, 8 insertions, 3 deletions
@@ -87,6 +87,8 @@ char Version[] = Name " - v2.6.2 - 21st May 2007\n"; */ char short_options[]="-ABCDEFGIQhVXWvqbc:i:l:p:m:n:x:u:c:d:z:U:sarfRSow1tye:"; +char short_bitmap_options[]= + "-ABCDEFGIQhVXWvqb:c:i:l:p:m:n:x:u:c:d:z:U:sarfRSow1tye:"; char short_bitmap_auto_options[]= "-ABCDEFGIQhVXWvqb:c:i:l:p:m:n:x:u:c:d:z:U:sa:rfRSow1tye:"; @@ -180,7 +180,7 @@ int main(int argc, char *argv[]) switch(opt) { case '@': /* just incase they say --manage */ newmode = MANAGE; - shortopt = short_bitmap_auto_options; + shortopt = short_bitmap_options; break; case 'a': case 'r': @@ -188,7 +188,7 @@ int main(int argc, char *argv[]) case ReAdd: /* re-add */ if (!mode) { newmode = MANAGE; - shortopt = short_bitmap_auto_options; + shortopt = short_bitmap_options; } break; @@ -196,7 +196,9 @@ int main(int argc, char *argv[]) case 'B': newmode = BUILD; shortopt = short_bitmap_auto_options; break; case 'C': newmode = CREATE; shortopt = short_bitmap_auto_options; break; case 'F': newmode = MONITOR;break; - case 'G': newmode = GROW; shortopt = short_bitmap_auto_options; break; + case 'G': newmode = GROW; + shortopt = short_bitmap_options; + break; case 'I': newmode = INCREMENTAL; break; case AutoDetect: newmode = AUTODETECT; break; @@ -155,6 +155,7 @@ enum mode { }; extern char short_options[]; +extern char short_bitmap_options[]; extern char short_bitmap_auto_options[]; extern struct option long_options[]; extern char Version[], Usage[], Help[], OptionHelp[], |