summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDoug Ledford <dledford@redhat.com>2007-07-09 09:59:59 +1000
committerNeil Brown <neilb@suse.de>2007-07-09 09:59:59 +1000
commit024768c465668a23db794b000e6e0f476beeb0af (patch)
treeb5664a5184945c870a24188bed8311864a6cda02
parente4dc510628a8c2d7b92c8ed537987716175a23a2 (diff)
downloadmdadm-024768c465668a23db794b000e6e0f476beeb0af.tar.gz
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.c2
-rw-r--r--mdadm.c8
-rw-r--r--mdadm.h1
3 files changed, 8 insertions, 3 deletions
diff --git a/ReadMe.c b/ReadMe.c
index 9423db3..201651e 100644
--- a/ReadMe.c
+++ b/ReadMe.c
@@ -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:";
diff --git a/mdadm.c b/mdadm.c
index 069c6d6..e96ce68 100644
--- a/mdadm.c
+++ b/mdadm.c
@@ -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;
diff --git a/mdadm.h b/mdadm.h
index 2ecd9fc..ac7d4b4 100644
--- a/mdadm.h
+++ b/mdadm.h
@@ -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[],