]> git.saurik.com Git - apple/libc.git/blobdiff - gen/FreeBSD/signal.c
Libc-1439.100.3.tar.gz
[apple/libc.git] / gen / FreeBSD / signal.c
index 6407da3b4e7d2e1c9f2fd608d70ca366db476dbd..fd96452474758e9d088d7d1fbaf7fd3d75dc36e5 100644 (file)
@@ -27,6 +27,9 @@
  * SUCH DAMAGE.
  */
 
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wstrict-prototypes"
+
 #if defined(LIBC_SCCS) && !defined(lint)
 static char sccsid[] = "@(#)signal.c   8.1 (Berkeley) 6/4/93";
 #endif /* LIBC_SCCS and not lint */
@@ -43,10 +46,13 @@ __FBSDID("$FreeBSD: src/lib/libc/gen/signal.c,v 1.4 2007/01/09 00:27:55 imp Exp
 
 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;
 
@@ -55,7 +61,35 @@ signal(s, a)
        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__ */
+#pragma clang diagnostic pop