libbb: nuke BB_GETOPT_ERROR, always die if there are mutually exclusive options

find_pair                                            164     180     +16
passwd_main                                         1222    1230      +8
display_speed                                         91      96      +5
msh_main                                            1335    1339      +4
qrealloc                                              38      36      -2
refresh                                             1190    1182      -8
cut_main                                             543     532     -11
sendCgi                                             1807    1794     -13
getopt32                                            1063    1045     -18
arith                                               2077    2030     -47
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 4/6 up/down: 33/-99)            Total: -66 bytes
   text    data     bss     dec     hex filename
 781548    1168   11900  794616   c1ff8 busybox_old
 781452    1168   11900  794520   c1f98 busybox_unstripped
This commit is contained in:
Denis Vlasenko
2007-07-21 13:27:44 +00:00
parent 557fb713e0
commit 091965768d
18 changed files with 28 additions and 45 deletions

View File

@@ -217,20 +217,12 @@ Special characters:
-b, -c and -f are mutally exclusive and should raise an error
if specified together. In this case you must set
opt_complementary = "b--cf:c--bf:f--bc". If two of the
mutually exclusive options are found, getopt32's
return value will have the error flag set (BB_GETOPT_ERROR) so
that we can check for it:
if (flags & BB_GETOPT_ERROR)
bb_show_usage();
mutually exclusive options are found, getopt32 will call
bb_show_usage() and die.
"x--x" Variation of the above, it means that -x option should occur
at most once.
"?" A "?" as the first char in a opt_complementary group means:
if BB_GETOPT_ERROR is detected, don't return, call bb_show_usage
and exit instead. Next char after '?' can't be a digit.
"::" A double colon after a char in opt_complementary means that the
option can occur multiple times. Each occurrence will be saved as
a llist_t element instead of char*.
@@ -476,11 +468,8 @@ getopt32(int argc, char **argv, const char *applet_opts, ...)
if (on_off->opt == 0 && c != 0)
bb_show_usage();
}
if (flags & on_off->incongruously) {
if ((spec_flgs & SHOW_USAGE_IF_ERROR))
bb_show_usage();
flags |= BB_GETOPT_ERROR;
}
if (flags & on_off->incongruously)
bb_show_usage();
trigger = on_off->switch_on & on_off->switch_off;
flags &= ~(on_off->switch_off ^ trigger);
flags |= on_off->switch_on ^ trigger;