From 2de1a28bcf64b5e443c8884d875eb97103132aa1 Mon Sep 17 00:00:00 2001 From: Collin Funk Date: Thu, 30 Apr 2026 17:59:38 -0700 Subject: [PATCH] sum,cksum: consistently emit detailed write errors 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