[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