3 void (*sigset(int sig
, void (*handler
)(int)))(int)
5 struct sigaction sa
, sa_old
;
9 if (sigaddset(&mask
, sig
) < 0)
12 if (handler
== SIG_HOLD
) {
13 if (sigaction(sig
, 0, &sa_old
) < 0)
15 if (sigprocmask(SIG_BLOCK
, &mask
, &mask
) < 0)
18 sa
.sa_handler
= handler
;
20 sigemptyset(&sa
.sa_mask
);
21 if (sigaction(sig
, &sa
, &sa_old
) < 0)
23 if (sigprocmask(SIG_UNBLOCK
, &mask
, &mask
) < 0)
26 return sigismember(&mask
, sig
) ? SIG_HOLD
: sa_old
.sa_handler
;