Previously the string from strerror would only be printed for some
algorithms:

    $ cksum -a sha2 -l 256 /dev/null > /dev/full
    cksum: write error: No space left on device
    $ cksum -a sysv /dev/null > /dev/full
    cksum: write error

This patch fixes it so that the error information is always printed:

    $ ./src/cksum -a sha2 -l 256 /dev/null > /dev/full
    cksum: write error: No space left on device
    $ ./src/cksum -a sysv /dev/null > /dev/full
    cksum: write error: No space left on device

* src/cksum.c (output_file): Don't check for a write error here.
(main): Check for it here instead.
* tests/misc/io-errors.sh: Add a 'cksum' invocation for each supported
algorithm.
https://github.com/coreutils/coreutils/issues/258
---
 src/cksum.c             |  5 ++---
 tests/misc/io-errors.sh | 10 ++++++++++
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/src/cksum.c b/src/cksum.c
index ffd9a82d5..186ba3185 100644
--- a/src/cksum.c
+++ b/src/cksum.c
@@ -1317,9 +1317,6 @@ output_file (char const *file, int binary_file, void 
const *digest,
     }
 
   putchar (delim);
-
-  if (ferror (stdout))
-    write_error ();
 }
 #endif
 
@@ -1885,6 +1882,8 @@ main (int argc, char **argv)
             {
               DIGEST_OUT (file, binary_file, bin_buffer, raw_digest, 
prefix_tag,
                           digest_delim, optind != argc, length);
+              if (ferror (stdout))
+                write_error ();
             }
         }
     }
diff --git a/tests/misc/io-errors.sh b/tests/misc/io-errors.sh
index 8b1fcef8f..a7f03a5b2 100755
--- a/tests/misc/io-errors.sh
+++ b/tests/misc/io-errors.sh
@@ -34,6 +34,16 @@ echo foo > foo || framework_failure_
 {
 printf '%s' "\
 cat foo
+cksum -a sysv foo
+cksum -a bsd foo
+cksum -a crc foo
+cksum -a crc32b foo
+cksum -a md5 foo
+cksum -a sha1 foo
+cksum -a sha2 -l 256 foo
+cksum -a sha3 -l 256 foo
+cksum -a blake2b foo
+cksum -a sm3 foo
 comm foo foo
 cut -c1- foo
 cut -f1- foo
-- 
2.54.0


Reply via email to