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
