--- /dev/null
+--- 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__ */