[BusyBox-cvs] busybox/archival uncompress.c,1.2,1.3

Glenn McGrath bug1 at busybox.net
Sun Jun 22 06:59:38 UTC 2003


Update of /var/cvs/busybox/archival
In directory winder:/tmp/cvs-serv1637/archival

Modified Files:
	uncompress.c 
Log Message:
Save a few bytes by using bb_getopt_ulflags and a few other minor 
improvments


Index: uncompress.c
===================================================================
RCS file: /var/cvs/busybox/archival/uncompress.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- uncompress.c	19 Mar 2003 09:11:22 -0000	1.2
+++ uncompress.c	22 Jun 2003 06:59:34 -0000	1.3
@@ -28,89 +28,72 @@
 #include "libbb.h"
 #include "unarchive.h"
 
-int uncompress_main(int argc, char **argv)
+#define GUNZIP_TO_STDOUT	1
+#define GUNZIP_FORCE	2
+
+extern int uncompress_main(int argc, char **argv)
 {
-	const char gunzip_to_stdout = 1;
-	const char gunzip_force = 2;
-	char status = EXIT_SUCCESS;
-	char flags = 0;
-	int opt;
+	int status = EXIT_SUCCESS;
+	unsigned long flags;
 
-	while ((opt = getopt(argc, argv, "cfh")) != -1) {
-		switch (opt) {
-		case 'c':
-			flags |= gunzip_to_stdout;
-			break;
-		case 'f':
-			flags |= gunzip_force;
-			break;
-		default:
-			bb_show_usage();	/* exit's inside usage */
-		}
-	}
+	flags = bb_getopt_ulflags(argc, argv, "cf");
 
-	do {
-		struct stat stat_buf;
-		const char *old_path = argv[optind];
+	while (optind < argc) {
+		const char *compressed_file = argv[optind++];
 		const char *delete_path = NULL;
-		char *new_path = NULL;
+		char *uncompressed_file = NULL;
 		int src_fd;
 		int dst_fd;
 
-		optind++;
-
-		if (old_path == NULL || strcmp(old_path, "-") == 0) {
+		if (strcmp(compressed_file, "-") == 0) {
 			src_fd = fileno(stdin);
-			flags |= gunzip_to_stdout;
+			flags |= GUNZIP_TO_STDOUT;
 		} else {
-			src_fd = bb_xopen(old_path, O_RDONLY);
-
-			/* Get the time stamp on the input file. */
-			if (stat(old_path, &stat_buf) < 0) {
-				bb_error_msg_and_die("Couldn't stat file %s", old_path);
-			}
+			src_fd = bb_xopen(compressed_file, O_RDONLY);
 		}
 
 		/* Check that the input is sane.  */
-		if (isatty(src_fd) && ((flags & gunzip_force) == 0)) {
+		if (isatty(src_fd) && ((flags & GUNZIP_FORCE) == 0)) {
 			bb_error_msg_and_die
 				("compressed data not read from terminal.  Use -f to force it.");
 		}
 
 		/* Set output filename and number */
-		if (flags & gunzip_to_stdout) {
+		if (flags & GUNZIP_TO_STDOUT) {
 			dst_fd = fileno(stdout);
 		} else {
+			struct stat stat_buf;
 			char *extension;
 
-			new_path = bb_xstrdup(old_path);
+			uncompressed_file = bb_xstrdup(compressed_file);
 
-			extension = strrchr(new_path, '.');
+			extension = strrchr(uncompressed_file, '.');
 			if (!extension || (strcmp(extension, ".Z") != 0)) {
 				bb_error_msg_and_die("Invalid extension");
 			}
 			*extension = '\0';
 
 			/* Open output file */
-			dst_fd = bb_xopen(new_path, O_WRONLY | O_CREAT);
+			dst_fd = bb_xopen(uncompressed_file, O_WRONLY | O_CREAT);
 
 			/* Set permissions on the file */
-			chmod(new_path, stat_buf.st_mode);
+			stat(compressed_file, &stat_buf);
+			chmod(uncompressed_file, stat_buf.st_mode);
 
 			/* If unzip succeeds remove the old file */
-			delete_path = old_path;
+			delete_path = compressed_file;
 		}
 
 		/* do the decompression, and cleanup */
-		if ((bb_xread_char(src_fd) == 0x1f) && (bb_xread_char(src_fd) == 0x9d)) {
-			status = uncompress(src_fd, dst_fd);
-		} else {
+		if ((bb_xread_char(src_fd) != 0x1f) || (bb_xread_char(src_fd) != 0x9d)) {
 			bb_error_msg_and_die("Invalid magic");
 		}
 
-		if ((status != EXIT_SUCCESS) && (new_path)) {
-			/* Unzip failed, remove new path instead of old path */
-			delete_path = new_path;
+		status = uncompress(src_fd, dst_fd);
+
+		if ((status != EXIT_SUCCESS) && (uncompressed_file)) {
+			/* Unzip failed, remove the uncomressed file instead of compressed file */
+			delete_path = uncompressed_file;
 		}
 
 		if (dst_fd != fileno(stdout)) {
@@ -125,9 +108,8 @@
 			bb_error_msg_and_die("Couldn't remove %s", delete_path);
 		}
 
-		free(new_path);
-
-	} while (optind < argc);
+		free(uncompressed_file);
+	}
 
 	return status;
 }



More information about the busybox-cvs mailing list