* 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