aboutsummaryrefslogtreecommitdiff
path: root/testdir/T.misc
diff options
context:
space:
mode:
authorMartijn Dekker <martijn@inlv.org>2020-01-17 13:02:57 +0100
committerArnold Robbins <arnold@skeeve.com>2020-01-17 14:02:57 +0200
commitfed1a562c3d1f3cf3cac0dd1413679191ac43002 (patch)
treecbc954dcdcecd54f4cc7c749420c7a375d20ec94 /testdir/T.misc
parent2976507cc10587a8d6d540c099b1d481547d7807 (diff)
downloadone-true-awk-fed1a562c3d1f3cf3cac0dd1413679191ac43002.tar.gz
Make I/O errors fatal instead of mere warnings (#63)
An input/output error indicates a fatal condition, even if it occurs when closing a file. Awk should not return success on I/O error, but treat I/O errors as it already treats write errors. Test case: $ (trap '' PIPE; awk 'BEGIN { print "hi"; }'; echo "E $?" >&2) | : awk: i/o error occurred while closing /dev/stdout source line number 1 E 2 The test case pipes a line into a dummy command that reads no input, with SIGPIPE ignored so we rely on awk's own I/O checking. No write error is detected, because the pipe is buffered; the broken pipe is only detected as an I/O error on closing stdout. Before this commit, "E 0" was printed (indicating status 0/success) because an I/O error merely produced a warning. A shell script was unable to detect the I/O error using the exit status.
Diffstat (limited to 'testdir/T.misc')
-rwxr-xr-xtestdir/T.misc5
1 files changed, 5 insertions, 0 deletions
diff --git a/testdir/T.misc b/testdir/T.misc
index 7fc196a..a191ae2 100755
--- a/testdir/T.misc
+++ b/testdir/T.misc
@@ -466,3 +466,8 @@ echo '' >foo0
$awk 'END { print NF, $0 }' foo0 >foo1
awk '{ print NF, $0 }' foo0| tail -1 >foo2
cmp -s foo1 foo2 || echo 'BAD: T.misc END must preserve $0'
+
+# Check for nonzero exit status on I/O error.
+echo 'E 2' >foo1
+(trap '' PIPE; "$awk" 'BEGIN { print "hi"; }' 2>/dev/null; echo "E $?" >foo2) | :
+cmp -s foo1 foo2 || echo 'BAD: T.misc exit status on I/O error'