aboutsummaryrefslogtreecommitdiff
path: root/archival
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2007-10-14 07:51:19 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2007-10-14 07:51:19 +0000
commitb6ccd32e3f061cc776c8cd5e526874e1bbb1a558 (patch)
treef23534c049567d2aa65926632445924bddd832e1 /archival
parent6a9154b6f649341870bc06e896d2fe7235a4aef9 (diff)
downloadbusybox-b6ccd32e3f061cc776c8cd5e526874e1bbb1a558.tar.gz
bzip2: implement -1..-9 command line flags
Diffstat (limited to 'archival')
-rw-r--r--archival/bzip2.c37
1 files changed, 30 insertions, 7 deletions
diff --git a/archival/bzip2.c b/archival/bzip2.c
index bb1610eb4..e9a69c458 100644
--- a/archival/bzip2.c
+++ b/archival/bzip2.c
@@ -120,6 +120,7 @@ USE_DESKTOP(long long) int bz_write_tail(bz_stream *strm, void *wbuf)
return total;
}
+static uint8_t level;
static
USE_DESKTOP(long long) int compressStream(void)
@@ -134,7 +135,7 @@ USE_DESKTOP(long long) int compressStream(void)
iobuf = xmalloc(2 * IOBUF_SIZE);
- BZ2_bzCompressInit(strm, 9 /*blockSize100k*/);
+ BZ2_bzCompressInit(strm, level);
while (1) {
count = full_read(STDIN_FILENO, rbuf, IOBUF_SIZE);
@@ -166,17 +167,39 @@ int bzip2_main(int argc, char **argv)
{
unsigned opt;
+ /* standard bzip2 flags
+ * -d --decompress force decompression
+ * -z --compress force compression
+ * -k --keep keep (don't delete) input files
+ * -f --force overwrite existing output files
+ * -t --test test compressed file integrity
+ * -c --stdout output to standard out
+ * -q --quiet suppress noncritical error messages
+ * -v --verbose be verbose (a 2nd -v gives more)
+ * -s --small use less memory (at most 2500k)
+ * -1 .. -9 set block size to 100k .. 900k
+ * --fast alias for -1
+ * --best alias for -9
+ */
+
/* Must match bbunzip's constants OPT_STDOUT, OPT_FORCE! */
- opt = getopt32(argv, "cfv" USE_BUNZIP2("d") "q123456789" );
+ opt = getopt32(argv, "cfv" USE_BUNZIP2("d") "123456789qzs" );
#if ENABLE_BUNZIP2 /* bunzip2_main may not be visible... */
if (opt & 0x8) // -d
return bunzip2_main(argc, argv);
+ opt >>= 4;
+#else
+ opt >>= 3;
#endif
- option_mask32 &= 0x7; /* ignore -q, -0..9 */
- //if (opt & 0x1) // -c
- //if (opt & 0x2) // -f
- //if (opt & 0x4) // -v
- argv += optind;
+ opt = (uint8_t)opt; /* isolate bits for -1..-8 */
+ opt |= 0x100; /* if nothing else, assume -9 */
+ level = 1;
+ while (!(opt & 1)) {
+ level++;
+ opt >>= 1;
+ }
+ argv += optind;
+ option_mask32 &= 0x7; /* ignore all except -cfv */
return bbunpack(argv, make_new_name_bzip2, compressStream);
}