signal.c.patch   [plain text]


--- 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__ */