* tests/misc/write-errors.sh: Add a test case.
* src/od.c (dump_strings): Call write_error() in the processing loop.
* NEWS: Mention the improvement.
---
 NEWS                       | 3 +++
 src/od.c                   | 2 ++
 tests/misc/write-errors.sh | 1 +
 3 files changed, 6 insertions(+)

diff --git a/NEWS b/NEWS
index 047908a0d..0d7548fad 100644
--- a/NEWS
+++ b/NEWS
@@ -220,6 +220,9 @@ GNU coreutils NEWS                                    -*- 
outline -*-
 
   'od' allocates half the memory when -v,--output-duplicates is specified.
 
+  'od --strings' exits promptly upon receiving a write error,
+  which is significant when processing many or large input files.
+
   'tail' ensures prompt output when inotify is not being used, and when
   initial reads finish, but subsequent reads might block, which was seen
   e.g. with fifos on NetBSD 10.
diff --git a/src/od.c b/src/od.c
index ed9531547..bdeaa0bd1 100644
--- a/src/od.c
+++ b/src/od.c
@@ -1675,6 +1675,8 @@ dump_strings (void)
             }
         }
       putchar ('\n');
+      if (ferror (stdout))
+        write_error ();
     }
 
   /* We reach this point only if we search through
diff --git a/tests/misc/write-errors.sh b/tests/misc/write-errors.sh
index 6d13f3c0f..d31dee445 100755
--- a/tests/misc/write-errors.sh
+++ b/tests/misc/write-errors.sh
@@ -55,6 +55,7 @@ join -a 1 -z /dev/zero /dev/null
 nl --version; yes | nl
 numfmt --version; yes 1 | numfmt
 od -v /dev/zero
+od --version; yes abc | tr '\\\\n' '\\\\0' | od -S3
 paste /dev/zero
 pr /dev/zero
 pr --version; yes 1 | pr
-- 
2.56.0


Reply via email to