summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDoug Ledford <dledford@redhat.com>2007-07-09 01:59:59 +0200
committerNeil Brown <neilb@suse.de>2007-07-09 01:59:59 +0200
commit024768c465668a23db794b000e6e0f476beeb0af (patch)
treeb5664a5184945c870a24188bed8311864a6cda02
parentMark some files FD_CLOEXEC to protect sendmail from them. (diff)
downloadmdadm-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 9423db32..201651eb 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 069c6d6d..e96ce68a 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 2ecd9fc1..ac7d4b47 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[],