From 10459ca7ed15456a6dbfebc7d718c8d713fbfe70 Mon Sep 17 00:00:00 2001 From: =?utf8?q?P=C3=A1draig=20Brady?=
Date: Tue, 16 Sep 2025 13:07:35 +0100 Subject: [PATCH] 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. --- NEWS | 3 +++ src/fold.c | 4 ++++ tests/misc/write-errors.sh | 4 +++- 3 files changed, 10 insertions(+), 1 deletion(-) 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 -- 2.47.3