From: Pádraig Brady Date: Tue, 16 Sep 2025 12:07:35 +0000 (+0100) Subject: fold: exit promptly upon write errors X-Git-Tag: v9.8~38 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=10459ca7ed15456a6dbfebc7d718c8d713fbfe70;p=thirdparty%2Fcoreutils.git fold: exit promptly upon write errors * NEWS: Mention the improvement. * src/fold.c (fold_file): Check for write errors after each buffer read from stdin. * tests/misc/write-errors.sh: Add test cases. --- diff --git a/NEWS b/NEWS index 35f3ebe26a..6846720f16 100644 --- a/NEWS +++ b/NEWS @@ -142,6 +142,9 @@ GNU coreutils NEWS -*- outline -*- 'factor' is now much faster at identifying large prime numbers, and significantly faster on composite numbers greater than 2^128. + fold now exits promptly upon receiving a write error, + which is significant when reading large / unbounded inputs. + 'seq' is more accurate with large integer start values. Previously 'seq 18446744073709551617 inf | head -n1' would output the number before the user specified start value. diff --git a/src/fold.c b/src/fold.c index 1908659630..a2ca953d4a 100644 --- a/src/fold.c +++ b/src/fold.c @@ -272,6 +272,10 @@ fold_file (char const *filename, size_t width) } if (feof (istream)) break; + + if (ferror (stdout)) + write_error (); + /* We read a full buffer of complete characters. */ offset_in = 0; diff --git a/tests/misc/write-errors.sh b/tests/misc/write-errors.sh index 35487c6e03..5bc381f5f8 100755 --- a/tests/misc/write-errors.sh +++ b/tests/misc/write-errors.sh @@ -34,7 +34,9 @@ dd if=/dev/zero expand /dev/zero factor --version; yes 1 | factor # TODO: fmt /dev/zero -# TODO: fold -b /dev/zero +fold /dev/zero +fold -b /dev/zero +fold -c /dev/zero head -z -n-1 /dev/zero join -a 1 -z /dev/zero /dev/null # TODO: nl --version; yes | nl