md5/shaNsum: make -c support a list of files

function                                             old     new   delta
md5_sha1_sum_main                                    455     473     +18

Signed-off-by: Lauri Kasanen <curaga@operamail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Lauri Kasanen 2011-07-04 01:49:59 +02:00 committed by Denys Vlasenko
parent 066f399566
commit e3f805ccc3

View File

@ -7,12 +7,11 @@
*/ */
//usage:#define md5sum_trivial_usage //usage:#define md5sum_trivial_usage
//usage: "[FILE]..." //usage: IF_FEATURE_MD5_SHA1_SUM_CHECK("[-c[sw]] ")"[FILE]..."
//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK("\n or: md5sum -c [-sw] [FILE]")
//usage:#define md5sum_full_usage "\n\n" //usage:#define md5sum_full_usage "\n\n"
//usage: "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " MD5 checksums" //usage: "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " MD5 checksums"
//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n" //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 -s Don't output anything, status code shows success"
//usage: "\n -w Warn about improperly formatted checksum lines" //usage: "\n -w Warn about improperly formatted checksum lines"
//usage: ) //usage: )
@ -28,34 +27,31 @@
//usage: "^D\n" //usage: "^D\n"
//usage: //usage:
//usage:#define sha1sum_trivial_usage //usage:#define sha1sum_trivial_usage
//usage: "[FILE]..." //usage: IF_FEATURE_MD5_SHA1_SUM_CHECK("[-c[sw]] ")"[FILE]..."
//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK("\n or: sha1sum -c [-sw] [FILE]")
//usage:#define sha1sum_full_usage "\n\n" //usage:#define sha1sum_full_usage "\n\n"
//usage: "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA1 checksums" //usage: "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA1 checksums"
//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n" //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 -s Don't output anything, status code shows success"
//usage: "\n -w Warn about improperly formatted checksum lines" //usage: "\n -w Warn about improperly formatted checksum lines"
//usage: ) //usage: )
//usage: //usage:
//usage:#define sha256sum_trivial_usage //usage:#define sha256sum_trivial_usage
//usage: "[FILE]..." //usage: IF_FEATURE_MD5_SHA1_SUM_CHECK("[-c[sw]] ")"[FILE]..."
//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK("\n or: sha256sum -c [-sw] [FILE]")
//usage:#define sha256sum_full_usage "\n\n" //usage:#define sha256sum_full_usage "\n\n"
//usage: "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA256 checksums" //usage: "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA256 checksums"
//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n" //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 -s Don't output anything, status code shows success"
//usage: "\n -w Warn about improperly formatted checksum lines" //usage: "\n -w Warn about improperly formatted checksum lines"
//usage: ) //usage: )
//usage: //usage:
//usage:#define sha512sum_trivial_usage //usage:#define sha512sum_trivial_usage
//usage: "[FILE]..." //usage: IF_FEATURE_MD5_SHA1_SUM_CHECK("[-c[sw]] ")"[FILE]..."
//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK("\n or: sha512sum -c [-sw] [FILE]")
//usage:#define sha512sum_full_usage "\n\n" //usage:#define sha512sum_full_usage "\n\n"
//usage: "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA512 checksums" //usage: "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA512 checksums"
//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n" //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 -s Don't output anything, status code shows success"
//usage: "\n -w Warn about improperly formatted checksum lines" //usage: "\n -w Warn about improperly formatted checksum lines"
//usage: ) //usage: )
@ -95,7 +91,7 @@ static uint8_t *hash_file(const char *filename)
sha1_ctx_t sha1; sha1_ctx_t sha1;
md5_ctx_t md5; md5_ctx_t md5;
} context; } context;
uint8_t *hash_value = NULL; uint8_t *hash_value;
void FAST_FUNC (*update)(void*, const void*, size_t); void FAST_FUNC (*update)(void*, const void*, size_t);
void FAST_FUNC (*final)(void*, void*); void FAST_FUNC (*final)(void*, void*);
char hash_algo; 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) { while ((count = safe_read(src_fd, in_buf, 4096)) > 0) {
update(&context, in_buf, count); update(&context, in_buf, count);
} }
hash_value = NULL;
if (count == 0) { if (count == 0) {
final(&context, in_buf); final(&context, in_buf);
hash_value = hash_bin_to_hex(in_buf, hash_len); hash_value = hash_bin_to_hex(in_buf, hash_len);
@ -178,17 +175,14 @@ int md5_sha1_sum_main(int argc UNUSED_PARAM, char **argv)
} }
} }
do {
if (ENABLE_FEATURE_MD5_SHA1_SUM_CHECK && (flags & FLAG_CHECK)) { if (ENABLE_FEATURE_MD5_SHA1_SUM_CHECK && (flags & FLAG_CHECK)) {
FILE *pre_computed_stream; FILE *pre_computed_stream;
char *line;
int count_total = 0; int count_total = 0;
int count_failed = 0; int count_failed = 0;
char *line;
if (argv[1]) { pre_computed_stream = xfopen_stdin(*argv);
bb_error_msg_and_die("only one argument may be specified with -c");
}
pre_computed_stream = xfopen_stdin(argv[0]);
while ((line = xmalloc_fgetline(pre_computed_stream)) != NULL) { while ((line = xmalloc_fgetline(pre_computed_stream)) != NULL) {
uint8_t *hash_value; uint8_t *hash_value;
@ -231,13 +225,8 @@ int md5_sha1_sum_main(int argc UNUSED_PARAM, char **argv)
bb_error_msg("WARNING: %d of %d computed checksums did NOT match", bb_error_msg("WARNING: %d of %d computed checksums did NOT match",
count_failed, count_total); count_failed, count_total);
} }
/* fclose_if_not_stdin(pre_computed_stream);
if (fclose_if_not_stdin(pre_computed_stream) == EOF) {
bb_perror_msg_and_die("can't close file %s", file_ptr);
}
*/
} else { } else {
do {
uint8_t *hash_value = hash_file(*argv); uint8_t *hash_value = hash_file(*argv);
if (hash_value == NULL) { if (hash_value == NULL) {
return_value = EXIT_FAILURE; 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); printf("%s %s\n", hash_value, *argv);
free(hash_value); free(hash_value);
} }
} while (*++argv);
} }
} while (*++argv);
return return_value; return return_value;
} }