diff options
Diffstat (limited to '')
-rw-r--r-- | libbb/getopt32.c | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/libbb/getopt32.c b/libbb/getopt32.c index 56040e150..76d29d5eb 100644 --- a/libbb/getopt32.c +++ b/libbb/getopt32.c | |||
@@ -93,7 +93,7 @@ getopt32(char **argv, const char *applet_opts, ...) | |||
93 | 93 | ||
94 | "!" If the first character in the applet_opts string is a '!', | 94 | "!" If the first character in the applet_opts string is a '!', |
95 | report bad options, missing required options, | 95 | report bad options, missing required options, |
96 | inconsistent options with all-ones return value (instead of abort. | 96 | inconsistent options with all-ones return value instead of aborting. |
97 | 97 | ||
98 | "+" If the first character in the applet_opts string is a plus, | 98 | "+" If the first character in the applet_opts string is a plus, |
99 | then option processing will stop as soon as a non-option is | 99 | then option processing will stop as soon as a non-option is |
@@ -265,7 +265,7 @@ Special characters: | |||
265 | for "long options only" cases, such as tar --exclude=PATTERN, | 265 | for "long options only" cases, such as tar --exclude=PATTERN, |
266 | wget --header=HDR cases. | 266 | wget --header=HDR cases. |
267 | 267 | ||
268 | "a?b" A "?" between an option and a group of options means that | 268 | "a?bc" A "?" between an option and a group of options means that |
269 | at least one of them is required to occur if the first option | 269 | at least one of them is required to occur if the first option |
270 | occurs in preceding command line arguments. | 270 | occurs in preceding command line arguments. |
271 | 271 | ||
@@ -348,9 +348,6 @@ vgetopt32(char **argv, const char *applet_opts, const char *applet_long_options, | |||
348 | unsigned trigger; | 348 | unsigned trigger; |
349 | int min_arg = 0; | 349 | int min_arg = 0; |
350 | int max_arg = -1; | 350 | int max_arg = -1; |
351 | int spec_flgs = 0; | ||
352 | |||
353 | #define SHOW_USAGE_IF_ERROR 1 | ||
354 | 351 | ||
355 | on_off = complementary; | 352 | on_off = complementary; |
356 | memset(on_off, 0, sizeof(complementary)); | 353 | memset(on_off, 0, sizeof(complementary)); |
@@ -449,9 +446,7 @@ vgetopt32(char **argv, const char *applet_opts, const char *applet_long_options, | |||
449 | continue; | 446 | continue; |
450 | c = s[1]; | 447 | c = s[1]; |
451 | if (*s == '?') { | 448 | if (*s == '?') { |
452 | if (c < '0' || c > '9') { | 449 | if (c >= '0' && c <= '9') { |
453 | spec_flgs |= SHOW_USAGE_IF_ERROR; | ||
454 | } else { | ||
455 | max_arg = c - '0'; | 450 | max_arg = c - '0'; |
456 | s++; | 451 | s++; |
457 | } | 452 | } |
@@ -465,8 +460,10 @@ vgetopt32(char **argv, const char *applet_opts, const char *applet_long_options, | |||
465 | continue; | 460 | continue; |
466 | } | 461 | } |
467 | if (*s == '=') { | 462 | if (*s == '=') { |
468 | min_arg = max_arg = c - '0'; | 463 | if (c >= '0' && c <= '9') { |
469 | s++; | 464 | min_arg = max_arg = c - '0'; |
465 | s++; | ||
466 | } | ||
470 | continue; | 467 | continue; |
471 | } | 468 | } |
472 | for (on_off = complementary; on_off->opt_char; on_off++) | 469 | for (on_off = complementary; on_off->opt_char; on_off++) |