[git commit master] gzip: add optional support for --long-opts

Denys Vlasenko vda.linux at googlemail.com
Wed Jan 6 07:54:49 UTC 2010


commit: http://git.busybox.net/busybox/commit/?id=839fd71077d457c9e86afc56ba5cc54a0e1fcfb8
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Matheus Izvekov <mizvekov at gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 archival/Config.in |    7 +++++++
 archival/gzip.c    |   21 ++++++++++++++++++++-
 2 files changed, 27 insertions(+), 1 deletions(-)

diff --git a/archival/Config.in b/archival/Config.in
index cae7f20..17d5c41 100644
--- a/archival/Config.in
+++ b/archival/Config.in
@@ -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
diff --git a/archival/gzip.c b/archival/gzip.c
index 7150569..139eaac 100644
--- a/archival/gzip.c
+++ b/archival/gzip.c
@@ -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);
-- 
1.6.3.3



More information about the busybox-cvs mailing list