[BusyBox-cvs] busybox/archival bunzip2.c,1.16,1.17
Glenn McGrath
bug1 at busybox.net
Mon Jan 5 11:49:57 UTC 2004
Update of /var/cvs/busybox/archival
In directory nail:/tmp/cvs-serv25202/archival
Modified Files:
bunzip2.c
Log Message:
Use bb_getopt_ulflags, simplify some logic, saves some bytes.
Index: bunzip2.c
===================================================================
RCS file: /var/cvs/busybox/archival/bunzip2.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -d -r1.16 -r1.17
--- bunzip2.c 29 Oct 2003 03:37:52 -0000 1.16
+++ bunzip2.c 5 Jan 2004 11:49:55 -0000 1.17
@@ -27,73 +27,62 @@
#include "busybox.h"
#include "unarchive.h"
+#define BUNZIP2_OPT_STDOUT 1
+#define BUNZIP2_OPT_FORCE 2
+
int bunzip2_main(int argc, char **argv)
{
- const int bunzip_to_stdout = 1;
- const int bunzip_force = 2;
- int flags = 0;
- int opt = 0;
+ char *compressed_name;
+ char *save_name;
+ unsigned long opt;
int status;
-
int src_fd;
int dst_fd;
- char *save_name = NULL;
- char *delete_name = NULL;
- /* if called as bzcat */
- if (strcmp(bb_applet_name, "bzcat") == 0)
- flags |= bunzip_to_stdout;
+ opt = bb_getopt_ulflags(argc, argv, "cf");
- while ((opt = getopt(argc, argv, "cfh")) != -1) {
- switch (opt) {
- case 'c':
- flags |= bunzip_to_stdout;
- break;
- case 'f':
- flags |= bunzip_force;
- break;
- case 'h':
- default:
- bb_show_usage(); /* exit's inside usage */
- }
+ /* if called as bzcat force the stdout flag */
+ if (bb_applet_name[2] == 'c') {
+ opt |= BUNZIP2_OPT_STDOUT;
}
/* Set input filename and number */
- if (argv[optind] == NULL || strcmp(argv[optind], "-") == 0) {
- flags |= bunzip_to_stdout;
- src_fd = fileno(stdin);
- } else {
+ compressed_name = argv[optind];
+ if ((compressed_name) && (compressed_name[0] != '-') && (compressed_name[1] != '\0')) {
/* Open input file */
- src_fd = bb_xopen(argv[optind], O_RDONLY);
-
- save_name = bb_xstrdup(argv[optind]);
- if (strcmp(save_name + strlen(save_name) - 4, ".bz2") != 0)
- bb_error_msg_and_die("Invalid extension");
- save_name[strlen(save_name) - 4] = '\0';
+ src_fd = bb_xopen(compressed_name, O_RDONLY);
+ } else {
+ src_fd = fileno(stdin);
+ opt |= BUNZIP2_OPT_STDOUT;
}
/* Check that the input is sane. */
- if (isatty(src_fd) && (flags & bunzip_force) == 0) {
+ if (isatty(src_fd) && (opt & BUNZIP2_OPT_FORCE) == 0) {
bb_error_msg_and_die("compressed data not read from terminal. Use -f to force it.");
}
- if (flags & bunzip_to_stdout) {
+ if (opt & BUNZIP2_OPT_STDOUT) {
dst_fd = fileno(stdout);
} else {
+ int len = strlen(compressed_name) - 4;
+ if (strcmp(compressed_name + len, ".bz2") != 0) {
+ bb_error_msg_and_die("Invalid extension");
+ }
+ save_name = bb_xstrndup(compressed_name, len);
dst_fd = bb_xopen(save_name, O_WRONLY | O_CREAT);
}
status = uncompressStream(src_fd, dst_fd);
- if(!(flags & bunzip_to_stdout)) {
+ if(!(opt & BUNZIP2_OPT_STDOUT)) {
+ char *delete_name;
if (status) {
delete_name = save_name;
} else {
- delete_name = argv[optind];
+ delete_name = compressed_name;
+ }
+ if (unlink(delete_name) < 0) {
+ bb_error_msg_and_die("Couldn't remove %s", delete_name);
}
- }
-
- if ((delete_name) && (unlink(delete_name) < 0)) {
- bb_error_msg_and_die("Couldn't remove %s", delete_name);
}
return status;
More information about the busybox-cvs
mailing list