gzip: add optional support for --long-opts
authorMatheus Izvekov <mizvekov@gmail.com>
Wed, 6 Jan 2010 07:54:49 +0000 (08:54 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Wed, 6 Jan 2010 07:54:49 +0000 (08:54 +0100)
Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
archival/Config.in
archival/gzip.c

index cae7f20..17d5c41 100644 (file)
@@ -165,6 +165,13 @@ config GZIP
          gzip is used to compress files.
          It's probably the most widely used UNIX compression program.
 
+config FEATURE_GZIP_LONG_OPTIONS
+       bool "Enable long options"
+       default n
+       depends on GZIP && LONG_OPTS
+       help
+         Enable use of long options, increases size by about 106 Bytes
+
 config LZOP
        bool "lzop"
        default n
index 7150569..139eaac 100644 (file)
@@ -2043,6 +2043,23 @@ IF_DESKTOP(long long) int pack_gzip(unpack_info_t *info UNUSED_PARAM)
        return 0;
 }
 
+#if ENABLE_FEATURE_GZIP_LONG_OPTIONS
+static const char gzip_longopts[] ALIGN1 =
+       "stdout\0"              No_argument       "c"
+       "to-stdout\0"           No_argument       "c"
+       "force\0"               No_argument       "f"
+       "verbose\0"             No_argument       "v"
+#if ENABLE_GUNZIP
+       "decompress\0"          No_argument       "d"
+       "uncompress\0"          No_argument       "d"
+       "test\0"                No_argument       "t"
+#endif
+       "quiet\0"               No_argument       "q"
+       "fast\0"                No_argument       "1"
+       "best\0"                No_argument       "9"
+       ;
+#endif
+
 /*
  * Linux kernel build uses gzip -d -n. We accept and ignore it.
  * Man page says:
@@ -2066,6 +2083,9 @@ int gzip_main(int argc UNUSED_PARAM, char **argv)
 {
        unsigned opt;
 
+#if ENABLE_FEATURE_GZIP_LONG_OPTIONS
+       applet_long_options = gzip_longopts;
+#endif
        /* Must match bbunzip's constants OPT_STDOUT, OPT_FORCE! */
        opt = getopt32(argv, "cfv" IF_GUNZIP("dt") "q123456789n");
 #if ENABLE_GUNZIP /* gunzip_main may not be visible... */
@@ -2080,7 +2100,6 @@ int gzip_main(int argc UNUSED_PARAM, char **argv)
 
        SET_PTR_TO_GLOBALS((char *)xzalloc(sizeof(struct globals)+sizeof(struct globals2))
                        + sizeof(struct globals));
-       barrier();
 
        /* Allocate all global buffers (for DYN_ALLOC option) */
        ALLOC(uch, G1.l_buf, INBUFSIZ);