Allow 'gzip -d' and 'bzip2 -d' without gunzip or bunzip2
Idea copied from the "ip" applet. Signed-off-by: Kang-Che Sung <explorer09@gmail.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
fb87d93d1e
commit
b130f9f758
@ -12,9 +12,9 @@
|
|||||||
//kbuild:lib-$(CONFIG_LZOPCAT) += bbunzip.o
|
//kbuild:lib-$(CONFIG_LZOPCAT) += bbunzip.o
|
||||||
//kbuild:lib-$(CONFIG_UNLZOP) += bbunzip.o
|
//kbuild:lib-$(CONFIG_UNLZOP) += bbunzip.o
|
||||||
/* bzip2_main() too: */
|
/* bzip2_main() too: */
|
||||||
//kbuild:lib-$(CONFIG_BZIP2) += bbunzip.o
|
//kbuild:lib-$(CONFIG_FEATURE_BZIP2_DECOMPRESS) += bbunzip.o
|
||||||
/* gzip_main() too: */
|
/* gzip_main() too: */
|
||||||
//kbuild:lib-$(CONFIG_GZIP) += bbunzip.o
|
//kbuild:lib-$(CONFIG_FEATURE_GZIP_DECOMPRESS) += bbunzip.o
|
||||||
|
|
||||||
/* Note: must be kept in sync with archival/lzop.c */
|
/* Note: must be kept in sync with archival/lzop.c */
|
||||||
enum {
|
enum {
|
||||||
@ -197,7 +197,7 @@ int FAST_FUNC bbunpack(char **argv,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if ENABLE_UNCOMPRESS \
|
#if ENABLE_UNCOMPRESS \
|
||||||
|| ENABLE_BUNZIP2 || ENABLE_BZCAT \
|
|| ENABLE_FEATURE_BZIP2_DECOMPRESS \
|
||||||
|| ENABLE_UNLZMA || ENABLE_LZCAT || ENABLE_LZMA \
|
|| ENABLE_UNLZMA || ENABLE_LZCAT || ENABLE_LZMA \
|
||||||
|| ENABLE_UNXZ || ENABLE_XZCAT || ENABLE_XZ
|
|| ENABLE_UNXZ || ENABLE_XZCAT || ENABLE_XZ
|
||||||
static
|
static
|
||||||
@ -295,6 +295,7 @@ int uncompress_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
//config:config GUNZIP
|
//config:config GUNZIP
|
||||||
//config: bool "gunzip"
|
//config: bool "gunzip"
|
||||||
//config: default y
|
//config: default y
|
||||||
|
//config: select FEATURE_GZIP_DECOMPRESS
|
||||||
//config: help
|
//config: help
|
||||||
//config: gunzip is used to decompress archives created by gzip.
|
//config: gunzip is used to decompress archives created by gzip.
|
||||||
//config: You can use the `-t' option to test the integrity of
|
//config: You can use the `-t' option to test the integrity of
|
||||||
@ -303,6 +304,7 @@ int uncompress_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
//config:config ZCAT
|
//config:config ZCAT
|
||||||
//config: bool "zcat"
|
//config: bool "zcat"
|
||||||
//config: default y
|
//config: default y
|
||||||
|
//config: select FEATURE_GZIP_DECOMPRESS
|
||||||
//config: help
|
//config: help
|
||||||
//config: Alias to "gunzip -c".
|
//config: Alias to "gunzip -c".
|
||||||
//config:
|
//config:
|
||||||
@ -315,9 +317,7 @@ int uncompress_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
|
|
||||||
//applet:IF_GUNZIP(APPLET(gunzip, BB_DIR_BIN, BB_SUID_DROP))
|
//applet:IF_GUNZIP(APPLET(gunzip, BB_DIR_BIN, BB_SUID_DROP))
|
||||||
//applet:IF_ZCAT(APPLET_ODDNAME(zcat, gunzip, BB_DIR_BIN, BB_SUID_DROP, zcat))
|
//applet:IF_ZCAT(APPLET_ODDNAME(zcat, gunzip, BB_DIR_BIN, BB_SUID_DROP, zcat))
|
||||||
//kbuild:lib-$(CONFIG_GUNZIP) += bbunzip.o
|
#if ENABLE_FEATURE_GZIP_DECOMPRESS
|
||||||
//kbuild:lib-$(CONFIG_ZCAT) += bbunzip.o
|
|
||||||
#if ENABLE_GUNZIP || ENABLE_ZCAT
|
|
||||||
static
|
static
|
||||||
char* FAST_FUNC make_new_name_gunzip(char *filename, const char *expected_ext UNUSED_PARAM)
|
char* FAST_FUNC make_new_name_gunzip(char *filename, const char *expected_ext UNUSED_PARAM)
|
||||||
{
|
{
|
||||||
@ -385,7 +385,7 @@ int gunzip_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
|
|
||||||
return bbunpack(argv, unpack_gz_stream, make_new_name_gunzip, /*unused:*/ NULL);
|
return bbunpack(argv, unpack_gz_stream, make_new_name_gunzip, /*unused:*/ NULL);
|
||||||
}
|
}
|
||||||
#endif
|
#endif /* FEATURE_GZIP_DECOMPRESS */
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -408,6 +408,7 @@ int gunzip_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
//config:config BUNZIP2
|
//config:config BUNZIP2
|
||||||
//config: bool "bunzip2"
|
//config: bool "bunzip2"
|
||||||
//config: default y
|
//config: default y
|
||||||
|
//config: select FEATURE_BZIP2_DECOMPRESS
|
||||||
//config: help
|
//config: help
|
||||||
//config: bunzip2 is a compression utility using the Burrows-Wheeler block
|
//config: bunzip2 is a compression utility using the Burrows-Wheeler block
|
||||||
//config: sorting text compression algorithm, and Huffman coding. Compression
|
//config: sorting text compression algorithm, and Huffman coding. Compression
|
||||||
@ -421,14 +422,13 @@ int gunzip_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
//config:config BZCAT
|
//config:config BZCAT
|
||||||
//config: bool "bzcat"
|
//config: bool "bzcat"
|
||||||
//config: default y
|
//config: default y
|
||||||
|
//config: select FEATURE_BZIP2_DECOMPRESS
|
||||||
//config: help
|
//config: help
|
||||||
//config: Alias to "bunzip2 -c".
|
//config: Alias to "bunzip2 -c".
|
||||||
|
|
||||||
//applet:IF_BUNZIP2(APPLET(bunzip2, BB_DIR_USR_BIN, BB_SUID_DROP))
|
//applet:IF_BUNZIP2(APPLET(bunzip2, BB_DIR_USR_BIN, BB_SUID_DROP))
|
||||||
//applet:IF_BZCAT(APPLET_ODDNAME(bzcat, bunzip2, BB_DIR_USR_BIN, BB_SUID_DROP, bzcat))
|
//applet:IF_BZCAT(APPLET_ODDNAME(bzcat, bunzip2, BB_DIR_USR_BIN, BB_SUID_DROP, bzcat))
|
||||||
//kbuild:lib-$(CONFIG_BUNZIP2) += bbunzip.o
|
#if ENABLE_FEATURE_BZIP2_DECOMPRESS
|
||||||
//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, char **argv) MAIN_EXTERNALLY_VISIBLE;
|
||||||
int bunzip2_main(int argc UNUSED_PARAM, char **argv)
|
int bunzip2_main(int argc UNUSED_PARAM, char **argv)
|
||||||
{
|
{
|
||||||
|
@ -19,6 +19,15 @@
|
|||||||
//config:
|
//config:
|
||||||
//config: Unless you have a specific application which requires bzip2, you
|
//config: Unless you have a specific application which requires bzip2, you
|
||||||
//config: should probably say N here.
|
//config: should probably say N here.
|
||||||
|
//config:
|
||||||
|
//config:config FEATURE_BZIP2_DECOMPRESS
|
||||||
|
//config: bool "Enable decompression"
|
||||||
|
//config: default y
|
||||||
|
//config: depends on BZIP2 || BUNZIP2 || BZCAT
|
||||||
|
//config: help
|
||||||
|
//config: Enable -d (--decompress) and -t (--test) options for bzip2.
|
||||||
|
//config: This will be automatically selected if bunzip2 or bzcat is
|
||||||
|
//config: enabled.
|
||||||
|
|
||||||
//applet:IF_BZIP2(APPLET(bzip2, BB_DIR_USR_BIN, BB_SUID_DROP))
|
//applet:IF_BZIP2(APPLET(bzip2, BB_DIR_USR_BIN, BB_SUID_DROP))
|
||||||
//kbuild:lib-$(CONFIG_BZIP2) += bzip2.o
|
//kbuild:lib-$(CONFIG_BZIP2) += bzip2.o
|
||||||
@ -28,7 +37,10 @@
|
|||||||
//usage:#define bzip2_full_usage "\n\n"
|
//usage:#define bzip2_full_usage "\n\n"
|
||||||
//usage: "Compress FILEs (or stdin) with bzip2 algorithm\n"
|
//usage: "Compress FILEs (or stdin) with bzip2 algorithm\n"
|
||||||
//usage: "\n -1..9 Compression level"
|
//usage: "\n -1..9 Compression level"
|
||||||
|
//usage: IF_FEATURE_BZIP2_DECOMPRESS(
|
||||||
//usage: "\n -d Decompress"
|
//usage: "\n -d Decompress"
|
||||||
|
//usage: "\n -t Test file integrity"
|
||||||
|
//usage: )
|
||||||
//usage: "\n -c Write to stdout"
|
//usage: "\n -c Write to stdout"
|
||||||
//usage: "\n -f Force"
|
//usage: "\n -f Force"
|
||||||
|
|
||||||
@ -184,8 +196,8 @@ int bzip2_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
|
|
||||||
opt_complementary = "s2"; /* -s means -2 (compatibility) */
|
opt_complementary = "s2"; /* -s means -2 (compatibility) */
|
||||||
/* Must match bbunzip's constants OPT_STDOUT, OPT_FORCE! */
|
/* Must match bbunzip's constants OPT_STDOUT, OPT_FORCE! */
|
||||||
opt = getopt32(argv, "cfv" IF_BUNZIP2("dt") "123456789qzs");
|
opt = getopt32(argv, "cfv" IF_FEATURE_BZIP2_DECOMPRESS("dt") "123456789qzs");
|
||||||
#if ENABLE_BUNZIP2 /* bunzip2_main may not be visible... */
|
#if ENABLE_FEATURE_BZIP2_DECOMPRESS /* bunzip2_main may not be visible... */
|
||||||
if (opt & 0x18) // -d and/or -t
|
if (opt & 0x18) // -d and/or -t
|
||||||
return bunzip2_main(argc, argv);
|
return bunzip2_main(argc, argv);
|
||||||
opt >>= 5;
|
opt >>= 5;
|
||||||
|
@ -72,19 +72,29 @@ aa: 85.1% -- replaced with aa.gz
|
|||||||
//config: is 6. If levels 1-3 are specified, 4 is used.
|
//config: is 6. If levels 1-3 are specified, 4 is used.
|
||||||
//config: If this option is not selected, -N options are ignored and -9
|
//config: If this option is not selected, -N options are ignored and -9
|
||||||
//config: is used.
|
//config: is used.
|
||||||
|
//config:
|
||||||
|
//config:config FEATURE_GZIP_DECOMPRESS
|
||||||
|
//config: bool "Enable decompression"
|
||||||
|
//config: default y
|
||||||
|
//config: depends on GZIP || GUNZIP || ZCAT
|
||||||
|
//config: help
|
||||||
|
//config: Enable -d (--decompress) and -t (--test) options for gzip.
|
||||||
|
//config: This will be automatically selected if gunzip or zcat is
|
||||||
|
//config: enabled.
|
||||||
|
|
||||||
//applet:IF_GZIP(APPLET(gzip, BB_DIR_BIN, BB_SUID_DROP))
|
//applet:IF_GZIP(APPLET(gzip, BB_DIR_BIN, BB_SUID_DROP))
|
||||||
//kbuild:lib-$(CONFIG_GZIP) += gzip.o
|
//kbuild:lib-$(CONFIG_GZIP) += gzip.o
|
||||||
|
|
||||||
//usage:#define gzip_trivial_usage
|
//usage:#define gzip_trivial_usage
|
||||||
//usage: "[-cf" IF_GUNZIP("d") IF_FEATURE_GZIP_LEVELS("123456789") "] [FILE]..."
|
//usage: "[-cf" IF_FEATURE_GZIP_DECOMPRESS("dt") IF_FEATURE_GZIP_LEVELS("123456789") "] [FILE]..."
|
||||||
//usage:#define gzip_full_usage "\n\n"
|
//usage:#define gzip_full_usage "\n\n"
|
||||||
//usage: "Compress FILEs (or stdin)\n"
|
//usage: "Compress FILEs (or stdin)\n"
|
||||||
//usage: IF_FEATURE_GZIP_LEVELS(
|
//usage: IF_FEATURE_GZIP_LEVELS(
|
||||||
//usage: "\n -1..9 Compression level"
|
//usage: "\n -1..9 Compression level"
|
||||||
//usage: )
|
//usage: )
|
||||||
//usage: IF_GUNZIP(
|
//usage: IF_FEATURE_GZIP_DECOMPRESS(
|
||||||
//usage: "\n -d Decompress"
|
//usage: "\n -d Decompress"
|
||||||
|
//usage: "\n -t Test file integrity"
|
||||||
//usage: )
|
//usage: )
|
||||||
//usage: "\n -c Write to stdout"
|
//usage: "\n -c Write to stdout"
|
||||||
//usage: "\n -f Force"
|
//usage: "\n -f Force"
|
||||||
@ -2154,7 +2164,7 @@ static const char gzip_longopts[] ALIGN1 =
|
|||||||
"to-stdout\0" No_argument "c"
|
"to-stdout\0" No_argument "c"
|
||||||
"force\0" No_argument "f"
|
"force\0" No_argument "f"
|
||||||
"verbose\0" No_argument "v"
|
"verbose\0" No_argument "v"
|
||||||
#if ENABLE_GUNZIP
|
#if ENABLE_FEATURE_GZIP_DECOMPRESS
|
||||||
"decompress\0" No_argument "d"
|
"decompress\0" No_argument "d"
|
||||||
"uncompress\0" No_argument "d"
|
"uncompress\0" No_argument "d"
|
||||||
"test\0" No_argument "t"
|
"test\0" No_argument "t"
|
||||||
@ -2181,7 +2191,7 @@ static const char gzip_longopts[] ALIGN1 =
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
int gzip_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
|
int gzip_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
|
||||||
#if ENABLE_GUNZIP
|
#if ENABLE_FEATURE_GZIP_DECOMPRESS
|
||||||
int gzip_main(int argc, char **argv)
|
int gzip_main(int argc, char **argv)
|
||||||
#else
|
#else
|
||||||
int gzip_main(int argc UNUSED_PARAM, char **argv)
|
int gzip_main(int argc UNUSED_PARAM, char **argv)
|
||||||
@ -2211,13 +2221,13 @@ int gzip_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
applet_long_options = gzip_longopts;
|
applet_long_options = gzip_longopts;
|
||||||
#endif
|
#endif
|
||||||
/* Must match bbunzip's constants OPT_STDOUT, OPT_FORCE! */
|
/* Must match bbunzip's constants OPT_STDOUT, OPT_FORCE! */
|
||||||
opt = getopt32(argv, "cfv" IF_GUNZIP("dt") "qn123456789");
|
opt = getopt32(argv, "cfv" IF_FEATURE_GZIP_DECOMPRESS("dt") "qn123456789");
|
||||||
#if ENABLE_GUNZIP /* gunzip_main may not be visible... */
|
#if ENABLE_FEATURE_GZIP_DECOMPRESS /* gunzip_main may not be visible... */
|
||||||
if (opt & 0x18) // -d and/or -t
|
if (opt & 0x18) // -d and/or -t
|
||||||
return gunzip_main(argc, argv);
|
return gunzip_main(argc, argv);
|
||||||
#endif
|
#endif
|
||||||
#ifdef ENABLE_FEATURE_GZIP_LEVELS
|
#ifdef ENABLE_FEATURE_GZIP_LEVELS
|
||||||
opt >>= ENABLE_GUNZIP ? 7 : 5; /* drop cfv[dt]qn bits */
|
opt >>= ENABLE_FEATURE_GZIP_DECOMPRESS ? 7 : 5; /* drop cfv[dt]qn bits */
|
||||||
if (opt == 0)
|
if (opt == 0)
|
||||||
opt = 1 << 6; /* default: 6 */
|
opt = 1 << 6; /* default: 6 */
|
||||||
opt = ffs(opt >> 4); /* Maps -1..-4 to [0], -5 to [1] ... -9 to [5] */
|
opt = ffs(opt >> 4); /* Maps -1..-4 to [0], -5 to [1] ... -9 to [5] */
|
||||||
|
Loading…
Reference in New Issue
Block a user