summaryrefslogtreecommitdiffhomepage
path: root/coreutils/md5_sha1_sum.c
diff options
context:
space:
mode:
authorLauri Kasanen <curaga@operamail.com>2011-07-04 01:49:59 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2011-07-04 01:49:59 +0200
commite3f805ccc35be010b9476847dccc3f1d0f8011c5 (patch)
treedf502f3f9097d265f44752a4ccd91e2a51835276 /coreutils/md5_sha1_sum.c
parent066f39956641300c1e5c6bfe6c11a115cea3e2cf (diff)
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>
Diffstat (limited to 'coreutils/md5_sha1_sum.c')
-rw-r--r--coreutils/md5_sha1_sum.c126
1 files changed, 58 insertions, 68 deletions
diff --git a/coreutils/md5_sha1_sum.c b/coreutils/md5_sha1_sum.c
index 53fd4d1a8..2cb6dd43c 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;
}