gzip: add optional support for --long-opts

Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Matheus Izvekov 2010-01-06 08:54:49 +01:00 committed by Denys Vlasenko
parent 251912443c
commit 839fd71077
2 changed files with 27 additions and 1 deletions

View File

@ -165,6 +165,13 @@ config GZIP
gzip is used to compress files. gzip is used to compress files.
It's probably the most widely used UNIX compression program. 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 config LZOP
bool "lzop" bool "lzop"
default n default n

View File

@ -2043,6 +2043,23 @@ IF_DESKTOP(long long) int pack_gzip(unpack_info_t *info UNUSED_PARAM)
return 0; 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. * Linux kernel build uses gzip -d -n. We accept and ignore it.
* Man page says: * Man page says:
@ -2066,6 +2083,9 @@ int gzip_main(int argc UNUSED_PARAM, char **argv)
{ {
unsigned opt; unsigned opt;
#if ENABLE_FEATURE_GZIP_LONG_OPTIONS
applet_long_options = gzip_longopts;
#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") "q123456789n"); opt = getopt32(argv, "cfv" IF_GUNZIP("dt") "q123456789n");
#if ENABLE_GUNZIP /* gunzip_main may not be visible... */ #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)) SET_PTR_TO_GLOBALS((char *)xzalloc(sizeof(struct globals)+sizeof(struct globals2))
+ sizeof(struct globals)); + sizeof(struct globals));
barrier();
/* Allocate all global buffers (for DYN_ALLOC option) */ /* Allocate all global buffers (for DYN_ALLOC option) */
ALLOC(uch, G1.l_buf, INBUFSIZ); ALLOC(uch, G1.l_buf, INBUFSIZ);