* 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


Reply via email to