From 26744e7953dc67500eb627b7f50d943bd2dca1cc Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 2 Nov 2011 14:27:33 -0700 Subject: [PATCH] * tests/zgrep-signal: Use perl instead of a nonportable shell trap. Problem reported by Eric Blake in . --- tests/zgrep-signal | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/tests/zgrep-signal b/tests/zgrep-signal index 3c5b696..e19293a 100644 --- a/tests/zgrep-signal +++ b/tests/zgrep-signal @@ -22,17 +22,33 @@ echo a | gzip -c > f.gz || framework_failure_ -if (trap - PIPE) >/dev/null 2>&1; then - trap - PIPE -else - trap 13 -fi -st=$(exec 3>&1; (cat f.gz f.gz; echo $? >&3) | :) +test "x$PERL" = x && PERL=perl +("$PERL" -e 'use warnings') >/dev/null 2>&1 || skip_ "no suitable perl found" + +exec_with_SIGPIPE_SIG_DFL () { + program=${1?} + shift + args= + for arg; do + args="$args, '$arg'" + done + "$PERL" -e "\$SIG{PIPE} = 'DEFAULT'; exec '$program'$args" +} + +write_to_dangling_pipe () { + exec 3>&1 + ( + exec_with_SIGPIPE_SIG_DFL "$@" + echo $? >&3 + ) | : || framework_failure_ +} + +st=$(write_to_dangling_pipe cat f.gz f.gz) test "$st" = 141 || framework_failure_ 'signal handling busted on this host' fail=0 -st=$(exec 3>&1; (zgrep a f.gz f.gz; echo $? >&3) | :) || framework_failure_ +st=$(write_to_dangling_pipe zgrep a f.gz f.gz) test "$st" = 141 || fail=1 -- 2.47.2