[git commit] md5/shaNsum: make -c support a list of files

Denys Vlasenko vda.linux at googlemail.com
Sun Jul 3 23:49:59 UTC 2011


commit: http://git.busybox.net/busybox/commit/?id=e3f805ccc35be010b9476847dccc3f1d0f8011c5
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

function                                             old     new   delta
md5_sha1_sum_main                                    455     473     +18

Signed-off-by: Lauri Kasanen <curaga at operamail.com>
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 coreutils/md5_sha1_sum.c |  126 +++++++++++++++++++++-------------------------
 1 files changed, 58 insertions(+), 68 deletions(-)

diff --git a/coreutils/md5_sha1_sum.c b/coreutils/md5_sha1_sum.c
index 53fd4d1..2cb6dd4 100644
--- a/coreutils/md5_sha1_sum.c
+++ b/coreutils/md5_sha1_sum.c
@@ -7,12 +7,11 @@
  */
 
 //usage:#define md5sum_trivial_usage
-//usage:       "[FILE]..."
-//usage:	IF_FEATURE_MD5_SHA1_SUM_CHECK("\n   or: md5sum -c [-sw] [FILE]")
+//usage:	IF_FEATURE_MD5_SHA1_SUM_CHECK("[-c[sw]] ")"[FILE]..."
 //usage:#define md5sum_full_usage "\n\n"
 //usage:       "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " MD5 checksums"
 //usage:	IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n"
-//usage:     "\n	-c	Check sums against given list"
+//usage:     "\n	-c	Check sums against list in FILEs"
 //usage:     "\n	-s	Don't output anything, status code shows success"
 //usage:     "\n	-w	Warn about improperly formatted checksum lines"
 //usage:	)
@@ -28,34 +27,31 @@
 //usage:       "^D\n"
 //usage:
 //usage:#define sha1sum_trivial_usage
-//usage:       "[FILE]..."
-//usage:	IF_FEATURE_MD5_SHA1_SUM_CHECK("\n   or: sha1sum -c [-sw] [FILE]")
+//usage:	IF_FEATURE_MD5_SHA1_SUM_CHECK("[-c[sw]] ")"[FILE]..."
 //usage:#define sha1sum_full_usage "\n\n"
 //usage:       "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA1 checksums"
 //usage:	IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n"
-//usage:     "\n	-c	Check sums against given list"
+//usage:     "\n	-c	Check sums against list in FILEs"
 //usage:     "\n	-s	Don't output anything, status code shows success"
 //usage:     "\n	-w	Warn about improperly formatted checksum lines"
 //usage:	)
 //usage:
 //usage:#define sha256sum_trivial_usage
-//usage:       "[FILE]..."
-//usage:	IF_FEATURE_MD5_SHA1_SUM_CHECK("\n   or: sha256sum -c [-sw] [FILE]")
+//usage:	IF_FEATURE_MD5_SHA1_SUM_CHECK("[-c[sw]] ")"[FILE]..."
 //usage:#define sha256sum_full_usage "\n\n"
 //usage:       "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA256 checksums"
 //usage:	IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n"
-//usage:     "\n	-c	Check sums against given list"
+//usage:     "\n	-c	Check sums against list in FILEs"
 //usage:     "\n	-s	Don't output anything, status code shows success"
 //usage:     "\n	-w	Warn about improperly formatted checksum lines"
 //usage:	)
 //usage:
 //usage:#define sha512sum_trivial_usage
-//usage:       "[FILE]..."
-//usage:	IF_FEATURE_MD5_SHA1_SUM_CHECK("\n   or: sha512sum -c [-sw] [FILE]")
+//usage:	IF_FEATURE_MD5_SHA1_SUM_CHECK("[-c[sw]] ")"[FILE]..."
 //usage:#define sha512sum_full_usage "\n\n"
 //usage:       "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA512 checksums"
 //usage:	IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n"
-//usage:     "\n	-c	Check sums against given list"
+//usage:     "\n	-c	Check sums against list in FILEs"
 //usage:     "\n	-s	Don't output anything, status code shows success"
 //usage:     "\n	-w	Warn about improperly formatted checksum lines"
 //usage:	)
@@ -95,7 +91,7 @@ static uint8_t *hash_file(const char *filename)
 		sha1_ctx_t sha1;
 		md5_ctx_t md5;
 	} context;
-	uint8_t *hash_value = NULL;
+	uint8_t *hash_value;
 	void FAST_FUNC (*update)(void*, const void*, size_t);
 	void FAST_FUNC (*final)(void*, void*);
 	char hash_algo;
@@ -137,6 +133,7 @@ static uint8_t *hash_file(const char *filename)
 		while ((count = safe_read(src_fd, in_buf, 4096)) > 0) {
 			update(&context, in_buf, count);
 		}
+		hash_value = NULL;
 		if (count == 0) {
 			final(&context, in_buf);
 			hash_value = hash_bin_to_hex(in_buf, hash_len);
@@ -178,66 +175,58 @@ int md5_sha1_sum_main(int argc UNUSED_PARAM, char **argv)
 		}
 	}
 
-	if (ENABLE_FEATURE_MD5_SHA1_SUM_CHECK && (flags & FLAG_CHECK)) {
-		FILE *pre_computed_stream;
-		int count_total = 0;
-		int count_failed = 0;
-		char *line;
+	do {
+		if (ENABLE_FEATURE_MD5_SHA1_SUM_CHECK && (flags & FLAG_CHECK)) {
+			FILE *pre_computed_stream;
+			char *line;
+			int count_total = 0;
+			int count_failed = 0;
 
-		if (argv[1]) {
-			bb_error_msg_and_die("only one argument may be specified with -c");
-		}
-
-		pre_computed_stream = xfopen_stdin(argv[0]);
+			pre_computed_stream = xfopen_stdin(*argv);
 
-		while ((line = xmalloc_fgetline(pre_computed_stream)) != NULL) {
-			uint8_t *hash_value;
-			char *filename_ptr;
+			while ((line = xmalloc_fgetline(pre_computed_stream)) != NULL) {
+				uint8_t *hash_value;
+				char *filename_ptr;
 
-			count_total++;
-			filename_ptr = strstr(line, "  ");
-			/* handle format for binary checksums */
-			if (filename_ptr == NULL) {
-				filename_ptr = strstr(line, " *");
-			}
-			if (filename_ptr == NULL) {
-				if (flags & FLAG_WARN) {
-					bb_error_msg("invalid format");
+				count_total++;
+				filename_ptr = strstr(line, "  ");
+				/* handle format for binary checksums */
+				if (filename_ptr == NULL) {
+					filename_ptr = strstr(line, " *");
 				}
-				count_failed++;
-				return_value = EXIT_FAILURE;
+				if (filename_ptr == NULL) {
+					if (flags & FLAG_WARN) {
+						bb_error_msg("invalid format");
+					}
+					count_failed++;
+					return_value = EXIT_FAILURE;
+					free(line);
+					continue;
+				}
+				*filename_ptr = '\0';
+				filename_ptr += 2;
+
+				hash_value = hash_file(filename_ptr);
+
+				if (hash_value && (strcmp((char*)hash_value, line) == 0)) {
+					if (!(flags & FLAG_SILENT))
+						printf("%s: OK\n", filename_ptr);
+				} else {
+					if (!(flags & FLAG_SILENT))
+						printf("%s: FAILED\n", filename_ptr);
+					count_failed++;
+					return_value = EXIT_FAILURE;
+				}
+				/* possible free(NULL) */
+				free(hash_value);
 				free(line);
-				continue;
 			}
-			*filename_ptr = '\0';
-			filename_ptr += 2;
-
-			hash_value = hash_file(filename_ptr);
-
-			if (hash_value && (strcmp((char*)hash_value, line) == 0)) {
-				if (!(flags & FLAG_SILENT))
-					printf("%s: OK\n", filename_ptr);
-			} else {
-				if (!(flags & FLAG_SILENT))
-					printf("%s: FAILED\n", filename_ptr);
-				count_failed++;
-				return_value = EXIT_FAILURE;
+			if (count_failed && !(flags & FLAG_SILENT)) {
+				bb_error_msg("WARNING: %d of %d computed checksums did NOT match",
+							 count_failed, count_total);
 			}
-			/* possible free(NULL) */
-			free(hash_value);
-			free(line);
-		}
-		if (count_failed && !(flags & FLAG_SILENT)) {
-			bb_error_msg("WARNING: %d of %d computed checksums did NOT match",
-						 count_failed, count_total);
-		}
-		/*
-		if (fclose_if_not_stdin(pre_computed_stream) == EOF) {
-			bb_perror_msg_and_die("can't close file %s", file_ptr);
-		}
-		*/
-	} else {
-		do {
+			fclose_if_not_stdin(pre_computed_stream);
+		} else {
 			uint8_t *hash_value = hash_file(*argv);
 			if (hash_value == NULL) {
 				return_value = EXIT_FAILURE;
@@ -245,7 +234,8 @@ int md5_sha1_sum_main(int argc UNUSED_PARAM, char **argv)
 				printf("%s  %s\n", hash_value, *argv);
 				free(hash_value);
 			}
-		} while (*++argv);
-	}
+		}
+	} while (*++argv);
+
 	return return_value;
 }
-- 
1.7.3.4



More information about the busybox-cvs mailing list