fix TODO: getopt32 should reset optind to 1 itself
authorDenis Vlasenko <vda.linux@googlemail.com>
Thu, 15 Mar 2007 13:28:46 +0000 (13:28 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Thu, 15 Mar 2007 13:28:46 +0000 (13:28 -0000)
archival/gzip.c
libbb/getopt32.c

index 68f1cc87d93436b94c8a47d5c5b1e57c513692b4..6af6c1886212c91536ede1bc23bcd3c47e49995a 100644 (file)
@@ -2041,8 +2041,6 @@ int gzip_main(int argc, char **argv)
        //if (opt & 0x4) // -v
 #if ENABLE_GUNZIP /* gunzip_main may not be visible... */
        if (opt & 0x8) { // -d
-               /* FIXME: getopt32 should not depend on optind */
-               optind = 1;
                return gunzip_main(argc, argv);
        }
 #endif
index 9f5fd60bdb8b763cef06e8bf069401bb834aea7d..6cdbfd35d4a35f9926e546a547e48ab59dc81e69 100644 (file)
@@ -454,6 +454,10 @@ getopt32(int argc, char **argv, const char *applet_opts, ...)
                                spec_flgs |= FREE_FIRST_ARGV_IS_OPT;
                }
        }
+
+       /* In case getopt32 was already called, reinit some state */
+       optind = 1;
+
        /* Note: just "getopt() <= 0" will not work good for
         * "fake" short options, like this one:
         * wget $'-\203' "Test: test" http://kernel.org/
@@ -463,9 +467,9 @@ getopt32(int argc, char **argv, const char *applet_opts, ...)
                                 applet_long_options, NULL)) != -1) {
 #else
        while ((c = getopt(argc, argv, applet_opts)) != -1) {
-#endif /* ENABLE_GETOPT_LONG */
+#endif
                c &= 0xff; /* fight libc's sign extends */
-loop_arg_is_opt:
+ loop_arg_is_opt:
                for (on_off = complementary; on_off->opt != c; on_off++) {
                        /* c==0 if long opt have non NULL flag */
                        if (on_off->opt == 0 && c != 0)