summaryrefslogtreecommitdiff
path: root/src/md5sum.c
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>1995-09-23 20:22:05 +0000
committerJim Meyering <jim@meyering.net>1995-09-23 20:22:05 +0000
commitf344b7fab63579f9592a550ecb68bb91a0affe77 (patch)
treebe40a88b8f262d07319577e466f42af1b30c2cfd /src/md5sum.c
parenteca98f76ac328bc93e785a4698f120bec3935688 (diff)
downloadcoreutils-f344b7fab63579f9592a550ecb68bb91a0affe77.tar.xz
(md5_check): Distinguish between open/read failure and checksum mismatch.
Diffstat (limited to 'src/md5sum.c')
-rw-r--r--src/md5sum.c61
1 files changed, 41 insertions, 20 deletions
diff --git a/src/md5sum.c b/src/md5sum.c
index 0336b7963..b22c5950f 100644
--- a/src/md5sum.c
+++ b/src/md5sum.c
@@ -231,8 +231,9 @@ static int
md5_check (const char *checkfile_name, int binary)
{
FILE *checkfile_stream;
- int n_tests = 0;
- int n_tests_failed = 0;
+ int n_properly_formated_lines = 0;
+ int n_mismatched_checksums = 0;
+ int n_open_or_read_failures = 0;
unsigned char md5buffer[16];
size_t line_number;
char *line;
@@ -297,11 +298,20 @@ md5_check (const char *checkfile_name, int binary)
'c', 'd', 'e', 'f' };
int fail;
- ++n_tests;
+ ++n_properly_formated_lines;
fail = md5_file (filename, binary, md5buffer);
- if (!fail)
+ if (fail)
+ {
+ ++n_open_or_read_failures;
+ if (!status_only)
+ {
+ printf (_("%s: FAILED open or read\n"), filename);
+ fflush (stdout);
+ }
+ }
+ else
{
size_t cnt;
/* Compare generated binary number with text representation
@@ -314,16 +324,14 @@ md5_check (const char *checkfile_name, int binary)
break;
}
if (cnt != 16)
- fail = 1;
- }
+ ++n_mismatched_checksums;
- if (fail)
- ++n_tests_failed;
-
- if (!status_only)
- {
- printf ("%s: %s\n", filename, (fail ? _("FAILED") : _("OK")));
- fflush (stdout);
+ if (!status_only)
+ {
+ printf ("%s: %s\n", filename,
+ (cnt != 16 ? _("FAILED") : _("OK")));
+ fflush (stdout);
+ }
}
}
}
@@ -344,7 +352,7 @@ md5_check (const char *checkfile_name, int binary)
return 1;
}
- if (n_tests == 0)
+ if (n_properly_formated_lines == 0)
{
/* Warn if no tests are found. */
error (0, 0, _("%s: no properly formatted MD5 checksum lines found"),
@@ -354,23 +362,36 @@ md5_check (const char *checkfile_name, int binary)
{
if (!status_only)
{
- if (n_tests_failed == 0)
+ int n_computed_checkums = (n_properly_formated_lines
+ - n_open_or_read_failures);
+
+ if (n_open_or_read_failures > 0)
+ {
+ printf (n_properly_formated_lines == 1
+ ? _("WARNING: the single listed file could not be read\n")
+ : _("WARNING: %d of the listed files could not be read\n"),
+ n_open_or_read_failures);
+ }
+
+ if (n_mismatched_checksums == 0)
{
- printf (n_tests == 1
+ printf (n_properly_formated_lines == 1
? _("the single computed checksum matched\n")
- : _("all %d computed checksums matched\n"), n_tests);
+ : _("all %d computed checksums matched\n"),
+ n_computed_checkums);
}
else
{
- printf (n_tests == 1
+ printf (n_properly_formated_lines == 1
? _("WARNING: the single computed checksum did NOT match\n")
: _("WARNING: %d out of %d computed checksums did NOT match\n"),
- n_tests_failed, n_tests);
+ n_mismatched_checksums, n_computed_checkums);
}
}
}
- return ((n_tests > 0 && n_tests_failed == 0) ? 0 : 1);
+ return ((n_properly_formated_lines > 0 && n_mismatched_checksums == 0
+ && n_open_or_read_failures == 0) ? 0 : 1);
}
int