Make bzcat, lzcat, xzcat, zcat, lzopcat, unlzop individually selectable
authorDenys Vlasenko <vda.linux@googlemail.com>
Wed, 16 Nov 2016 14:45:05 +0000 (15:45 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Wed, 16 Nov 2016 14:45:05 +0000 (15:45 +0100)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
archival/Config.src
archival/bbunzip.c
archival/lzop.c

index a9afaea5b1bf82d3b7c2421545aa912ab05b78c4..5e7cfc0a4d4ab6bc67469d379cfc93572f8a8232 100644 (file)
@@ -30,7 +30,7 @@ config FEATURE_SEAMLESS_GZ
          Make tar, rpm, modprobe etc understand .gz data.
 
 config FEATURE_SEAMLESS_Z
-       bool "tar, rpm, modprobe etc understand .Z data"
+       bool "Make tar, rpm, modprobe etc understand .Z data"
        default n  # it is ancient
        help
          Make tar, rpm, modprobe etc understand .Z data.
index 07ef8617e371e6ae9ebf7ad2219b5c88a927601c..7d5402e8d83a54efdb40ac8349d0d3b780f19579 100644 (file)
@@ -291,18 +291,24 @@ int uncompress_main(int argc UNUSED_PARAM, char **argv)
 //config:        You can use the `-t' option to test the integrity of
 //config:        an archive, without decompressing it.
 //config:
+//config:config ZCAT
+//config:      bool "zcat"
+//config:      default y
+//config:      help
+//config:        Alias to "gunzip -c".
+//config:
 //config:config FEATURE_GUNZIP_LONG_OPTIONS
 //config:      bool "Enable long options"
 //config:      default y
-//config:      depends on GUNZIP && LONG_OPTS
+//config:      depends on (GUNZIP || ZCAT) && LONG_OPTS
 //config:      help
 //config:        Enable use of long options.
 
 //applet:IF_GUNZIP(APPLET(gunzip, BB_DIR_BIN, BB_SUID_DROP))
-//applet:IF_GUNZIP(APPLET_ODDNAME(zcat, gunzip, BB_DIR_BIN, BB_SUID_DROP, zcat))
-//kbuild:lib-$(CONFIG_GZIP) += bbunzip.o
+//applet:IF_ZCAT(APPLET_ODDNAME(zcat, gunzip, BB_DIR_BIN, BB_SUID_DROP, zcat))
 //kbuild:lib-$(CONFIG_GUNZIP) += bbunzip.o
-#if ENABLE_GUNZIP
+//kbuild:lib-$(CONFIG_ZCAT) += bbunzip.o
+#if ENABLE_GUNZIP || ENABLE_ZCAT
 static
 char* FAST_FUNC make_new_name_gunzip(char *filename, const char *expected_ext UNUSED_PARAM)
 {
@@ -365,7 +371,7 @@ int gunzip_main(int argc UNUSED_PARAM, char **argv)
         * Normally, "zcat" is just "gunzip -c".
         * But if seamless magic is enabled, then we are much more clever.
         */
-       if (applet_name[1] == 'c')
+       if (ENABLE_ZCAT && applet_name[1] == 'c')
                option_mask32 |= OPT_STDOUT | SEAMLESS_MAGIC;
 
        return bbunpack(argv, unpack_gz_stream, make_new_name_gunzip, /*unused:*/ NULL);
@@ -402,18 +408,24 @@ int gunzip_main(int argc UNUSED_PARAM, char **argv)
 //config:
 //config:        Unless you have a specific application which requires bunzip2, you
 //config:        should probably say N here.
+//config:
+//config:config BZCAT
+//config:      bool "bzcat"
+//config:      default y
+//config:      help
+//config:        Alias to "bunzip2 -c".
 
 //applet:IF_BUNZIP2(APPLET(bunzip2, BB_DIR_USR_BIN, BB_SUID_DROP))
-//applet:IF_BUNZIP2(APPLET_ODDNAME(bzcat, bunzip2, BB_DIR_USR_BIN, BB_SUID_DROP, bzcat))
-//kbuild:lib-$(CONFIG_BZIP2) += bbunzip.o
+//applet:IF_BZCAT(APPLET_ODDNAME(bzcat, bunzip2, BB_DIR_USR_BIN, BB_SUID_DROP, bzcat))
 //kbuild:lib-$(CONFIG_BUNZIP2) += bbunzip.o
-#if ENABLE_BUNZIP2
+//kbuild:lib-$(CONFIG_BZCAT) += bbunzip.o
+#if ENABLE_BUNZIP2 || ENABLE_BZCAT
 int bunzip2_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int bunzip2_main(int argc UNUSED_PARAM, char **argv)
 {
        getopt32(argv, "cfvqdt");
        argv += optind;
-       if (applet_name[2] == 'c') /* bzcat */
+       if (ENABLE_BZCAT && applet_name[2] == 'c') /* bzcat */
                option_mask32 |= OPT_STDOUT;
 
        return bbunpack(argv, unpack_bz2_stream, make_new_name_generic, "bz2");
@@ -481,27 +493,40 @@ int bunzip2_main(int argc UNUSED_PARAM, char **argv)
 //config:        The BusyBox unlzma applet is limited to decompression only.
 //config:        On an x86 system, this applet adds about 4K.
 //config:
-//config:config FEATURE_LZMA_FAST
-//config:      bool "Optimize unlzma for speed"
-//config:      default n
-//config:      depends on UNLZMA
+//config:config LZCAT
+//config:      bool "lzcat"
+//config:      default y
 //config:      help
-//config:        This option reduces decompression time by about 25% at the cost of
-//config:        a 1K bigger binary.
+//config:        unlzma is a compression utility using the Lempel-Ziv-Markov chain
+//config:        compression algorithm, and range coding. Compression
+//config:        is generally considerably better than that achieved by the bzip2
+//config:        compressors.
+//config:
+//config:        The BusyBox unlzma applet is limited to decompression only.
+//config:        On an x86 system, this applet adds about 4K.
 //config:
 //config:config LZMA
-//config:      bool "Provide lzma alias which supports only unpacking"
+//config:      bool "lzma -d"
 //config:      default y
-//config:      depends on UNLZMA
 //config:      help
 //config:        Enable this option if you want commands like "lzma -d" to work.
 //config:        IOW: you'll get lzma applet, but it will always require -d option.
+//config:
+//config:config FEATURE_LZMA_FAST
+//config:      bool "Optimize unlzma for speed"
+//config:      default n
+//config:      depends on UNLZMA || LZCAT || LZMA
+//config:      help
+//config:        This option reduces decompression time by about 25% at the cost of
+//config:        a 1K bigger binary.
 
 //applet:IF_UNLZMA(APPLET(unlzma, BB_DIR_USR_BIN, BB_SUID_DROP))
-//applet:IF_UNLZMA(APPLET_ODDNAME(lzcat, unlzma, BB_DIR_USR_BIN, BB_SUID_DROP, lzcat))
+//applet:IF_LZCAT(APPLET_ODDNAME(lzcat, unlzma, BB_DIR_USR_BIN, BB_SUID_DROP, lzcat))
 //applet:IF_LZMA(APPLET_ODDNAME(lzma, unlzma, BB_DIR_USR_BIN, BB_SUID_DROP, lzma))
 //kbuild:lib-$(CONFIG_UNLZMA) += bbunzip.o
-#if ENABLE_UNLZMA
+//kbuild:lib-$(CONFIG_LZCAT) += bbunzip.o
+//kbuild:lib-$(CONFIG_LZMA) += bbunzip.o
+#if ENABLE_UNLZMA || ENABLE_LZCAT || ENABLE_LZMA
 int unlzma_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int unlzma_main(int argc UNUSED_PARAM, char **argv)
 {
@@ -512,7 +537,7 @@ int unlzma_main(int argc UNUSED_PARAM, char **argv)
                bb_show_usage();
 # endif
        /* lzcat? */
-       if (applet_name[2] == 'c')
+       if (ENABLE_LZCAT && applet_name[2] == 'c')
                option_mask32 |= OPT_STDOUT;
 
        argv += optind;
@@ -527,19 +552,26 @@ int unlzma_main(int argc UNUSED_PARAM, char **argv)
 //config:      help
 //config:        unxz is a unlzma successor.
 //config:
+//config:config XZCAT
+//config:      bool "xzcat"
+//config:      default y
+//config:      help
+//config:        Alias to "unxz -c".
+//config:
 //config:config XZ
-//config:      bool "Provide xz alias which supports only unpacking"
+//config:      bool "xz -d"
 //config:      default y
-//config:      depends on UNXZ
 //config:      help
 //config:        Enable this option if you want commands like "xz -d" to work.
 //config:        IOW: you'll get xz applet, but it will always require -d option.
 
 //applet:IF_UNXZ(APPLET(unxz, BB_DIR_USR_BIN, BB_SUID_DROP))
-//applet:IF_UNXZ(APPLET_ODDNAME(xzcat, unxz, BB_DIR_USR_BIN, BB_SUID_DROP, xzcat))
+//applet:IF_XZCAT(APPLET_ODDNAME(xzcat, unxz, BB_DIR_USR_BIN, BB_SUID_DROP, xzcat))
 //applet:IF_XZ(APPLET_ODDNAME(xz, unxz, BB_DIR_USR_BIN, BB_SUID_DROP, xz))
 //kbuild:lib-$(CONFIG_UNXZ) += bbunzip.o
-#if ENABLE_UNXZ
+//kbuild:lib-$(CONFIG_XZCAT) += bbunzip.o
+//kbuild:lib-$(CONFIG_XZ) += bbunzip.o
+#if ENABLE_UNXZ || ENABLE_XZCAT || ENABLE_XZ
 int unxz_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int unxz_main(int argc UNUSED_PARAM, char **argv)
 {
@@ -550,7 +582,7 @@ int unxz_main(int argc UNUSED_PARAM, char **argv)
                bb_show_usage();
 # endif
        /* xzcat? */
-       if (applet_name[2] == 'c')
+       if (ENABLE_XZCAT && applet_name[2] == 'c')
                option_mask32 |= OPT_STDOUT;
 
        argv += optind;
index 202de4d039ce08102219a5a1014511f1914b03f9..e0e90ac6cdcb8ca31d07d37f79a3c80812aa21d9 100644 (file)
 //config:      help
 //config:        Lzop compression/decompresion.
 //config:
+//config:config UNLZOP
+//config:      bool "unlzop"
+//config:      default y
+//config:      help
+//config:        Lzop decompresion.
+//config:
+//config:config LZOPCAT
+//config:      bool "lzopcat"
+//config:      default y
+//config:      help
+//config:        Alias to "unlzop -c".
+//config:
 //config:config LZOP_COMPR_HIGH
 //config:      bool "lzop compression levels 7,8,9 (not very useful)"
 //config:      default n
-//config:      depends on LZOP
+//config:      depends on LZOP || UNLZOP || LZOPCAT
 //config:      help
 //config:        High levels (7,8,9) of lzop compression. These levels
 //config:        are actually slower than gzip at equivalent compression ratios
 //config:        and take up 3.2K of code.
 
 //applet:IF_LZOP(APPLET(lzop, BB_DIR_BIN, BB_SUID_DROP))
-//applet:IF_LZOP(APPLET_ODDNAME(lzopcat, lzop, BB_DIR_USR_BIN, BB_SUID_DROP, lzopcat))
-//applet:IF_LZOP(APPLET_ODDNAME(unlzop, lzop, BB_DIR_USR_BIN, BB_SUID_DROP, unlzop))
+//applet:IF_UNLZOP(APPLET_ODDNAME(unlzop, lzop, BB_DIR_USR_BIN, BB_SUID_DROP, unlzop))
+//applet:IF_LZOPCAT(APPLET_ODDNAME(lzopcat, lzop, BB_DIR_USR_BIN, BB_SUID_DROP, lzopcat))
 //kbuild:lib-$(CONFIG_LZOP) += lzop.o
+//kbuild:lib-$(CONFIG_UNLZOP) += lzop.o
+//kbuild:lib-$(CONFIG_LZOPCAT) += lzop.o
 
 //usage:#define lzop_trivial_usage
 //usage:       "[-cfvd123456789CF] [FILE]..."
 //usage:     "\n       -C      Also write checksum of compressed block"
 //usage:
 //usage:#define lzopcat_trivial_usage
-//usage:       "[-vCF] [FILE]..."
+//usage:       "[-vF] [FILE]..."
 //usage:#define lzopcat_full_usage "\n\n"
 //usage:       "       -v      Verbose"
-//usage:     "\n       -F      Don't store or verify checksum"
+//usage:     "\n       -F      Don't verify checksum"
 //usage:
 //usage:#define unlzop_trivial_usage
-//usage:       "[-cfvCF] [FILE]..."
+//usage:       "[-cfvF] [FILE]..."
 //usage:#define unlzop_full_usage "\n\n"
 //usage:       "       -c      Write to stdout"
 //usage:     "\n       -f      Force"
 //usage:     "\n       -v      Verbose"
-//usage:     "\n       -F      Don't store or verify checksum"
+//usage:     "\n       -F      Don't verify checksum"
 
 #include "libbb.h"
 #include "common_bufsiz.h"
@@ -1111,10 +1125,10 @@ int lzop_main(int argc UNUSED_PARAM, char **argv)
        getopt32(argv, OPTION_STRING);
        argv += optind;
        /* lzopcat? */
-       if (applet_name[4] == 'c')
+       if (ENABLE_LZOPCAT && applet_name[4] == 'c')
                option_mask32 |= (OPT_STDOUT | OPT_DECOMPRESS);
        /* unlzop? */
-       if (applet_name[4] == 'o')
+       if (ENABLE_UNLZOP && applet_name[4] == 'o')
                option_mask32 |= OPT_DECOMPRESS;
 
        global_crc32_table = crc32_filltable(NULL, 0);