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.
This commit is contained in:
Doug Ledford 2007-07-09 09:59:59 +10:00 committed by Neil Brown
parent e4dc510628
commit 024768c465
3 changed files with 8 additions and 3 deletions

View File

@ -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:";

View File

@ -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;

View File

@ -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[],