From: Paul Eggert Date: Wed, 2 Nov 2011 21:27:33 +0000 (-0700) Subject: * tests/zgrep-signal: Use perl instead of a nonportable shell trap. X-Git-Tag: v1.5~16 X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=26744e7953dc67500eb627b7f50d943bd2dca1cc;p=debian%2Fgzip * tests/zgrep-signal: Use perl instead of a nonportable shell trap. Problem reported by Eric Blake in . --- 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