bzcat and bunzip -c support from Thomas Lundquist
authorGlenn L McGrath <bug1@ihug.co.nz>
Sun, 18 Nov 2001 14:20:25 +0000 (14:20 -0000)
committerGlenn L McGrath <bug1@ihug.co.nz>
Sun, 18 Nov 2001 14:20:25 +0000 (14:20 -0000)
archival/bunzip2.c
include/applets.h
include/usage.h

index da9808e82bf9ca46d3a3a80351e220923c313c23..290681dd3272031c5c96fe91aa31aa259c4d6b90 100644 (file)
@@ -1,4 +1,5 @@
 /* Modified for busybox by Glenn McGrath <bug1@optushome.com.au> */
+/* Added support output to stdout by Thomas Lundquist <thomasez@zelow.no> */ 
 /*--
   This file is a part of bzip2 and/or libbzip2, a program and
   library for lossless, block-sorting data compression.
@@ -56,6 +57,7 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
+#include <getopt.h>
 #include <busybox.h>
 
 //#define TRUE 1
@@ -2316,15 +2318,38 @@ errhandler_io:
 
 int bunzip2_main(int argc, char **argv)
 {
+       const int bunzip_to_stdout = 1;
+       int flags = 0;
+       int opt = 0;
+
        FILE *src_stream;
        FILE *dst_stream;
        char *save_name;
        char *save_name_ptr;
-       if (argc != 2) {
+
+       /* if called as bzcat */
+       if (strcmp(applet_name, "bzcat") == 0)
+               flags |= bunzip_to_stdout;
+
+       while ((opt = getopt(argc, argv, "ch")) != -1) {
+               switch (opt) {
+               case 'c':
+                       flags |= bunzip_to_stdout;
+                       break;
+               case 'h':
+               default:
+                       show_usage(); /* exit's inside usage */
+               }
+       }
+
+       save_name = xstrdup(argv[optind]);
+               
+       if (save_name == NULL) {
                show_usage();
        }
-       src_stream = xfopen(argv[1], "r");
-       save_name = xstrdup(argv[1]);
+
+       src_stream = xfopen(argv[optind], "r");
+
        save_name_ptr = strrchr(save_name, '.');
        if (save_name_ptr == NULL) {
                return(FALSE);
@@ -2333,7 +2358,12 @@ int bunzip2_main(int argc, char **argv)
                error_msg("Invalid extension, expected .bz2");
        }
        *save_name_ptr = '\0';  
-       dst_stream = xfopen(save_name, "w");
+
+       if (flags & bunzip_to_stdout) {
+               dst_stream = stdout;
+       } else {
+               dst_stream = xfopen(save_name, "w");
+       }
        uncompressStream(src_stream, dst_stream);
 
        return(TRUE);
index ea196cb66a0cccee3a4cc4943a6dc384e23c77f2..aa112c30b52099185d47da090adea337187a6535 100644 (file)
@@ -68,6 +68,9 @@
        APPLET(bunzip2, bunzip2_main, _BB_DIR_USR_BIN)
 #endif
        APPLET_NOUSAGE("busybox", busybox_main, _BB_DIR_BIN)
+#ifdef CONFIG_BUNZIP2
+       APPLET(bzcat, bunzip2_main, _BB_DIR_USR_BIN)
+#endif
 #ifdef CONFIG_CAT
        APPLET(cat, cat_main, _BB_DIR_BIN)
 #endif
index 12d5e1ed58b68545fdc5c3630c67a744725399db..df1c18ec73129ac2052af22ebb60319f9f31b93d 100644 (file)
        "bar"
 
 #define bunzip2_trivial_usage \
-       "FILE"
+       "[-c] FILE"
 #define bunzip2_full_usage \
        "Uncompress FILE to current directory, stripping its .bz2 extension.\n"\
+       " -c output to stdout\n"\
        " -k is assumed" 
 
+#define bzcat_trivial_usage \
+       "FILE"
+#define bzcat_full_usage \
+       "Uncompress to stdout."
+
 #define cat_trivial_usage \
        "[FILE]..."
 #define cat_full_usage \