* 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 392129dad..d27fc7788 100644 --- a/NEWS +++ b/NEWS @@ -138,6 +138,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 immediately 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 190865963..a2ca953d4 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 35487c6e0..5bc381f5f 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.50.1