--- signal.c.orig Thu Jan 31 16:57:29 2002 +++ signal.c Fri May 16 14:16:12 2003 @@ -47,10 +47,13 @@ sigset_t _sigintr; /* shared with siginterrupt */ -sig_t -signal(s, a) +extern int _sigaction_nobind (int sig, const struct sigaction *nsv, struct sigaction *osv); + +static sig_t +signal__(s, a, bind) int s; sig_t a; + int bind; { struct sigaction sa, osa; @@ -59,7 +62,34 @@ sa.sa_flags = 0; if (!sigismember(&_sigintr, s)) sa.sa_flags |= SA_RESTART; +#if defined(__DYNAMIC__) + if (bind) { +#endif /* __DYNAMIC__ */ if (_sigaction(s, &sa, &osa) < 0) return (SIG_ERR); +#if defined(__DYNAMIC__) + } else { + if (_sigaction_nobind(s, &sa, &osa) < 0) + return (SIG_ERR); + } +#endif /* __DYNAMIC__ */ return (osa.sa_handler); } + +sig_t +signal(s, a) + int s; + sig_t a; +{ + return signal__(s, a, 1); +} + +#if defined(__DYNAMIC__) +sig_t +_signal_nobind(s, a) + int s; + sig_t a; +{ + return signal__(s, a, 0); +} +#endif /* __DYNAMIC__ */