From 86535835fe2c1fb73f0eeed4b2b1f1d95987272b Mon Sep 17 00:00:00 2001 From: Erik Auerswald Date: Sun, 1 Jun 2008 12:40:40 +0200 Subject: [PATCH] md5sum: new option, --quiet, to suppress OK messages sha1sum, sha224sum, sha384sum, and sha512sum accept it, too. * src/md5sum.c: add option --quiet to suppress OK messages * doc/coreutils.texi: document option --quiet * tests/misc/md5sum: add test for option --quiet * NEWS: mention new option --quiet for md5sum+sha*sum in "New features" section --- NEWS | 5 +++++ doc/coreutils.texi | 9 +++++++++ src/md5sum.c | 30 ++++++++++++++++++++++++++---- tests/misc/md5sum | 9 +++++++++ 4 files changed, 49 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 02be5c2..b12631b 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,11 @@ GNU coreutils NEWS -*- outline -*- * Noteworthy changes in release 7.0 (????-??-??) [beta] +** New features + + md5sum now accepts the new option, --quiet, to suppress the printing of + 'OK' messages. sha1sum, sha224sum, sha384sum, and sha512sum accept it, too. + * Noteworthy changes in release 6.12 (2008-05-31) [stable] diff --git a/doc/coreutils.texi b/doc/coreutils.texi index dbc8a8b..e804d58 100644 --- a/doc/coreutils.texi +++ b/doc/coreutils.texi @@ -3277,6 +3277,15 @@ an MD5 checksum inconsistent with the associated file, or if no valid line is found, @command{md5sum} exits with nonzero status. Otherwise, it exits successfully. +@itemx --quiet +@opindex --quiet +@cindex verifying MD5 checksums +This option is useful only when verifying checksums. +When verifying checksums, don't generate an 'OK' message per successfully +checked file. Files that fail the verification are reported in the +default one-line-per-file format. If there is any checksum mismatch, +print a warning summarizing the failures to standard error. + @itemx --status @opindex --status @cindex verifying MD5 checksums diff --git a/src/md5sum.c b/src/md5sum.c index df812b9..c0b5ed5 100644 --- a/src/md5sum.c +++ b/src/md5sum.c @@ -117,6 +117,9 @@ static bool status_only = false; improperly formatted checksum line. */ static bool warn = false; +/* With --check, suppress the "OK" printed for each verified file. */ +static bool quiet = false; + /* The name this program was run with. */ char *program_name; @@ -124,13 +127,15 @@ char *program_name; non-character as a pseudo short option, starting with CHAR_MAX + 1. */ enum { - STATUS_OPTION = CHAR_MAX + 1 + STATUS_OPTION = CHAR_MAX + 1, + QUIET_OPTION }; static const struct option long_options[] = { { "binary", no_argument, NULL, 'b' }, { "check", no_argument, NULL, 'c' }, + { "quiet", no_argument, NULL, QUIET_OPTION }, { "status", no_argument, NULL, STATUS_OPTION }, { "text", no_argument, NULL, 't' }, { "warn", no_argument, NULL, 'w' }, @@ -177,7 +182,8 @@ With no FILE, or when FILE is -, read standard input.\n\ "), stdout); fputs (_("\ \n\ -The following two options are useful only when verifying checksums:\n\ +The following three options are useful only when verifying checksums:\n\ + --quiet don't print OK for each successfully verified file\n\ --status don't output anything, status code shows success\n\ -w, --warn warn about improperly formatted checksum lines\n\ \n\ @@ -530,8 +536,10 @@ digest_check (const char *checkfile_name) if (!status_only) { - printf ("%s: %s\n", filename, - (cnt != digest_bin_bytes ? _("FAILED") : _("OK"))); + if (cnt != digest_bin_bytes) + printf ("%s: %s\n", filename, _("FAILED")); + else if (!quiet) + printf ("%s: %s\n", filename, _("OK")); fflush (stdout); } } @@ -624,6 +632,7 @@ main (int argc, char **argv) case STATUS_OPTION: status_only = true; warn = false; + quiet = false; break; case 't': binary = 0; @@ -631,6 +640,12 @@ main (int argc, char **argv) case 'w': status_only = false; warn = true; + quiet = false; + break; + case QUIET_OPTION: + status_only = false; + warn = false; + quiet = true; break; case_GETOPT_HELP_CHAR; case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS); @@ -662,6 +677,13 @@ main (int argc, char **argv) usage (EXIT_FAILURE); } + if (quiet & !do_check) + { + error (0, 0, + _("the --quiet option is meaningful only when verifying checksums")); + usage (EXIT_FAILURE); + } + if (!O_BINARY && binary < 0) binary = 0; diff --git a/tests/misc/md5sum b/tests/misc/md5sum index c99d6bb..bc1ac08 100755 --- a/tests/misc/md5sum +++ b/tests/misc/md5sum @@ -45,6 +45,15 @@ my @Tests = {OUT=>"f: OK\n"}], ['check-2', '--check', '--status', {IN=>{'f.md5' => "$degenerate f\n"}}, {AUX=> {f=> 'foo'}}, {EXIT=> 1}], + ['check-quiet1', '--check', '--quiet', {AUX=> {f=> ''}}, + {IN=> {'f.md5' => "$degenerate f\n"}}, + {OUT=>""}], + ['check-quiet2', '--check', '--quiet', + {IN=>{'f.md5' => "$degenerate f\n"}}, + {AUX=> {f=> 'foo'}}, {OUT=>"f: FAILED\n"}, + {ERR=>"md5sum: WARNING: 1 of 1 computed" + . " checksum did NOT match\n"}, + {EXIT=> 1}], # The sha1sum and md5sum drivers share a lot of code. # Ensure that md5sum does *not* share the part that makes # sha1sum accept BSD format. -- 2.7.4