Apologies for the missing attachment.

- Lauri

-- 
http://www.fastmail.fm - Does exactly what it says on the tin

From d0cbd586fe1ffb06214e61c17910c64ff82513af Mon Sep 17 00:00:00 2001
From: Lauri Kasanen <[email protected]>
Date: Sun, 3 Jul 2011 13:57:16 +0300
Subject: [PATCH] md5/sha1sum: Support multiple files for -c checking


Signed-off-by: Lauri Kasanen <[email protected]>
---
 coreutils/md5_sha1_sum.c |   98 ++++++++++++++++++++++-----------------------
 1 files changed, 48 insertions(+), 50 deletions(-)

diff --git a/coreutils/md5_sha1_sum.c b/coreutils/md5_sha1_sum.c
index 53fd4d1..8035eb8 100644
--- a/coreutils/md5_sha1_sum.c
+++ b/coreutils/md5_sha1_sum.c
@@ -12,7 +12,7 @@
 //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 given list(s)"
 //usage:     "\n       -s      Don't output anything, status code shows 
success"
 //usage:     "\n       -w      Warn about improperly formatted checksum lines"
 //usage:       )
@@ -33,7 +33,7 @@
 //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 given list(s)"
 //usage:     "\n       -s      Don't output anything, status code shows 
success"
 //usage:     "\n       -w      Warn about improperly formatted checksum lines"
 //usage:       )
@@ -44,7 +44,7 @@
 //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 given list(s)"
 //usage:     "\n       -s      Don't output anything, status code shows 
success"
 //usage:     "\n       -w      Warn about improperly formatted checksum lines"
 //usage:       )
@@ -55,7 +55,7 @@
 //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 given list(s)"
 //usage:     "\n       -s      Don't output anything, status code shows 
success"
 //usage:     "\n       -w      Warn about improperly formatted checksum lines"
 //usage:       )
@@ -180,62 +180,60 @@ 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;
 
-               if (argv[1]) {
-                       bb_error_msg_and_die("only one argument may be 
specified with -c");
-               }
+               do {
+                       int count_total = 0;
+                       int count_failed = 0;
 
-               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 (count_failed && !(flags & FLAG_SILENT)) {
+                               bb_error_msg("WARNING: %d of %d computed 
checksums did NOT match",
+                                                        count_failed, 
count_total);
+                       }
 
-                       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 (fclose_if_not_stdin(pre_computed_stream) == EOF) {
+                               bb_perror_msg_and_die("can't close file %s", 
*argv);
                        }
-                       /* 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);
-               }
-               */
+               } while (*++argv);
        } else {
                do {
                        uint8_t *hash_value = hash_file(*argv);
-- 
1.7.2.1

_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to