getopt32: fix "tar x" case; fix memory leak
authorDenis Vlasenko <vda.linux@googlemail.com>
Wed, 23 Apr 2008 07:22:31 +0000 (07:22 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Wed, 23 Apr 2008 07:22:31 +0000 (07:22 -0000)
libbb/getopt32.c

index 913a009b0655f655e1f47b3e70ea0253435e51d6..4b5a7d2085a9b9087e4b6096928fe7fed4b533e2 100644 (file)
@@ -494,7 +494,7 @@ getopt32(char **argv, const char *applet_opts, ...)
        va_end(p);
 
        if (spec_flgs & FIRST_ARGV_IS_OPT) {
-               if (argv[1] && argv[1][0] != '-' && argv[1][1] != '\0') {
+               if (argv[1] && argv[1][0] != '-' && argv[1][0] != '\0') {
 #if DONT_USE_PRINTF
                        char *pp = alloca(strlen(argv[1]) + 2);
                        *pp = '-';
@@ -502,8 +502,7 @@ getopt32(char **argv, const char *applet_opts, ...)
                        argv[1] = pp;
 #else
                        argv[1] = xasprintf("-%s", argv[1]);
-                       if (ENABLE_FEATURE_CLEAN_UP)
-                               spec_flgs |= FREE_FIRST_ARGV_IS_OPT;
+                       spec_flgs |= FREE_FIRST_ARGV_IS_OPT;
 #endif
                }
        }
@@ -586,10 +585,9 @@ getopt32(char **argv, const char *applet_opts, ...)
                }
        }
 
-#if ENABLE_FEATURE_CLEAN_UP
        if (spec_flgs & FREE_FIRST_ARGV_IS_OPT)
                free(argv[1]);
-#endif
+
        /* check depending requires for given options */
        for (on_off = complementary; on_off->opt_char; on_off++) {
                if (on_off->requires && (flags & on_off->switch_on) &&