bzcat and bunzip -c support from Thomas Lundquist

This commit is contained in:
Glenn L McGrath 2001-11-18 14:20:25 +00:00
parent fedce06b7f
commit fff11f1ab7
3 changed files with 44 additions and 5 deletions

View File

@ -1,4 +1,5 @@
/* Modified for busybox by Glenn McGrath <bug1@optushome.com.au> */ /* 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 This file is a part of bzip2 and/or libbzip2, a program and
library for lossless, block-sorting data compression. library for lossless, block-sorting data compression.
@ -56,6 +57,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <getopt.h>
#include <busybox.h> #include <busybox.h>
//#define TRUE 1 //#define TRUE 1
@ -2316,15 +2318,38 @@ errhandler_io:
int bunzip2_main(int argc, char **argv) int bunzip2_main(int argc, char **argv)
{ {
const int bunzip_to_stdout = 1;
int flags = 0;
int opt = 0;
FILE *src_stream; FILE *src_stream;
FILE *dst_stream; FILE *dst_stream;
char *save_name; char *save_name;
char *save_name_ptr; 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(); 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, '.'); save_name_ptr = strrchr(save_name, '.');
if (save_name_ptr == NULL) { if (save_name_ptr == NULL) {
return(FALSE); return(FALSE);
@ -2333,7 +2358,12 @@ int bunzip2_main(int argc, char **argv)
error_msg("Invalid extension, expected .bz2"); error_msg("Invalid extension, expected .bz2");
} }
*save_name_ptr = '\0'; *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); uncompressStream(src_stream, dst_stream);
return(TRUE); return(TRUE);

View File

@ -68,6 +68,9 @@
APPLET(bunzip2, bunzip2_main, _BB_DIR_USR_BIN) APPLET(bunzip2, bunzip2_main, _BB_DIR_USR_BIN)
#endif #endif
APPLET_NOUSAGE("busybox", busybox_main, _BB_DIR_BIN) APPLET_NOUSAGE("busybox", busybox_main, _BB_DIR_BIN)
#ifdef CONFIG_BUNZIP2
APPLET(bzcat, bunzip2_main, _BB_DIR_USR_BIN)
#endif
#ifdef CONFIG_CAT #ifdef CONFIG_CAT
APPLET(cat, cat_main, _BB_DIR_BIN) APPLET(cat, cat_main, _BB_DIR_BIN)
#endif #endif

View File

@ -52,11 +52,17 @@
"bar" "bar"
#define bunzip2_trivial_usage \ #define bunzip2_trivial_usage \
"FILE" "[-c] FILE"
#define bunzip2_full_usage \ #define bunzip2_full_usage \
"Uncompress FILE to current directory, stripping its .bz2 extension.\n"\ "Uncompress FILE to current directory, stripping its .bz2 extension.\n"\
" -c output to stdout\n"\
" -k is assumed" " -k is assumed"
#define bzcat_trivial_usage \
"FILE"
#define bzcat_full_usage \
"Uncompress to stdout."
#define cat_trivial_usage \ #define cat_trivial_usage \
"[FILE]..." "[FILE]..."
#define cat_full_usage \ #define cat_full_usage \