libbb/getopt32.c: clear applet_long_options and opt_complementary after use
authorDenys Vlasenko <vda.linux@googlemail.com>
Tue, 16 Mar 2010 16:57:53 +0000 (17:57 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Tue, 16 Mar 2010 16:57:53 +0000 (17:57 +0100)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
libbb/getopt32.c

index cab3eb745302868d1deb1888d2fb02cbbe1afe1e..b5f83c1273aa2df8d06f0c93ed1cb2fa23fbac50 100644 (file)
@@ -423,6 +423,10 @@ getopt32(char **argv, const char *applet_opts, ...)
                        c++;
  next_long: ;
                }
+               /* Make it unnecessary to clear applet_long_options
+                * by hand after each call to getopt32
+                */
+               applet_long_options = NULL;
        }
 #endif /* ENABLE_LONG_OPTS || ENABLE_FEATURE_GETOPT_LONG */
        for (s = (const unsigned char *)opt_complementary; s && *s; s++) {
@@ -485,15 +489,15 @@ getopt32(char **argv, const char *applet_opts, ...)
                        s++;
                }
                pair = on_off;
-               pair_switch = &(pair->switch_on);
+               pair_switch = &pair->switch_on;
                for (s++; *s && *s != ':'; s++) {
                        if (*s == '?') {
-                               pair_switch = &(pair->requires);
+                               pair_switch = &pair->requires;
                        } else if (*s == '-') {
-                               if (pair_switch == &(pair->switch_off))
-                                       pair_switch = &(pair->incongruously);
+                               if (pair_switch == &pair->switch_off)
+                                       pair_switch = &pair->incongruously;
                                else
-                                       pair_switch = &(pair->switch_off);
+                                       pair_switch = &pair->switch_off;
                        } else {
                                for (on_off = complementary; on_off->opt_char; on_off++)
                                        if (on_off->opt_char == *s) {
@@ -504,6 +508,7 @@ getopt32(char **argv, const char *applet_opts, ...)
                }
                s--;
        }
+       opt_complementary = NULL;
        va_end(p);
 
        if (spec_flgs & (FIRST_ARGV_IS_OPT | ALL_ARGV_IS_OPTS)) {