(perl #126760) adapt sigtrap for layers on STDERR.
authorTony Cook <tony@develop-help.com>
Wed, 26 Sep 2018 01:12:34 +0000 (11:12 +1000)
committerTony Cook <tony@develop-help.com>
Wed, 10 Oct 2018 00:12:44 +0000 (11:12 +1100)
commit5c0551aafb45d343b720500fd9560ffedd9607fa
treef852a975b99c8d047e2c2b2974eac9b9805413fb
parent1ed4b7762a858fb9c71bc209fe868060f3774cb5
(perl #126760) adapt sigtrap for layers on STDERR.

sigtrap defines a signal handler apparently intended to be called
under unsafe signals, since a) the code was written before safe
signals were implemented and b) it uses syswrite() for output and
avoid creating new SVs where it can.

Unfortunately syswrite() doesn't handle PerlIO layers, *and* with
syswrite() being disallowed for :utf8 handlers, throws an exception.

This causes the sigtrap tests to fail if PERL_UNICODE is set and the
current locale is a UTF-8 locale.

I want to avoid allocating new SVs until the point where the code
originally did so, so the code now attempts a syswrite() under
eval, falling back to print, and then at the point where the original
code started allocating SVs uses PerlIO::get_layers() to check if
any layers might make a difference to the output.
lib/sigtrap.pm