Use sigaction(2) to save and restore SIGPIPE instead of signal(3)
because signal(3) does not have reliable semantics with respect to
SA_RESTART across all platforms: The original BSD semantics are to
always set SA_RESTART whereas the "new" BSD semantics were to keep
what siginterrupt(2) did.
And two missed optimizations:
= The saving/restoring of SIGPIPE is done even if file turns out
to be *not* compressed, and no decompressor is called.
= If old signal was already SIG_IGN, no need to restore it.
This causes, for example, ~160000 unnecessary calls
to rt_sigaction() when rpmbuild generates kernel rpms.
Finally we can't share the old and new sigaction pointer because
of the "restrict" semantics.