aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/posix
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/posix')
-rw-r--r--sysdeps/posix/signal.c15
-rw-r--r--sysdeps/posix/sigpause.c5
-rw-r--r--sysdeps/posix/sysv_signal.c (renamed from sysdeps/posix/bsd_signal.c)20
3 files changed, 26 insertions, 14 deletions
diff --git a/sysdeps/posix/signal.c b/sysdeps/posix/signal.c
index 25e7cab..2e0cf64 100644
--- a/sysdeps/posix/signal.c
+++ b/sysdeps/posix/signal.c
@@ -1,4 +1,5 @@
-/* Copyright (C) 1991, 1992, 1996 Free Software Foundation, Inc.
+/* BSD-like signal function.
+ Copyright (C) 1991, 1992, 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -20,10 +21,12 @@
#include <signal.h>
+sigset_t _sigintr; /* Set by siginterrupt. */
+
/* Set the handler for the signal SIG to HANDLER,
returning the old handler, or SIG_ERR on error. */
__sighandler_t
-signal (sig, handler)
+__bsd_signal (sig, handler)
int sig;
__sighandler_t handler;
{
@@ -39,12 +42,12 @@ signal (sig, handler)
act.sa_handler = handler;
if (__sigemptyset (&act.sa_mask) < 0)
return SIG_ERR;
- act.sa_flags = SA_ONESHOT | SA_NOMASK | SA_INTERRUPT;
- act.sa_flags &= ~SA_RESTART;
+ act.sa_flags = __sigismember (&_sigintr, sig) ? 0 : SA_RESTART;
if (__sigaction (sig, &act, &oact) < 0)
return SIG_ERR;
return oact.sa_handler;
}
-
-weak_alias (signal, ssignal)
+weak_alias (__bsd_signal, bsd_signal)
+weak_alias (__bsd_signal, signal)
+weak_alias (__bsd_signal, ssignal)
diff --git a/sysdeps/posix/sigpause.c b/sysdeps/posix/sigpause.c
index 8b820ec..414019a 100644
--- a/sysdeps/posix/sigpause.c
+++ b/sysdeps/posix/sigpause.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 92, 94, 95, 96 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 92, 94, 95, 96, 97 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -33,7 +33,7 @@ __sigpause (sig_or_mask, is_sig)
{
/* The modern X/Open implementation is requested. */
if (sigprocmask (0, NULL, &set) < 0
- /* Yes, we call `sigaddset' and not `__sigaddset'. */
+ /* Yes, we call `sigdelset' and not `__sigdelset'. */
|| sigdelset (&set, sig_or_mask) < 0)
return -1;
}
@@ -66,4 +66,5 @@ __default_sigpause (mask)
{
return __sigpause (mask, 0);
}
+#undef sigpause
weak_alias (__default_sigpause, sigpause)
diff --git a/sysdeps/posix/bsd_signal.c b/sysdeps/posix/sysv_signal.c
index 4941485..2b6d5f9 100644
--- a/sysdeps/posix/bsd_signal.c
+++ b/sysdeps/posix/sysv_signal.c
@@ -1,5 +1,4 @@
-/* X/Open compatibility function.
- Copyright (C) 1991, 1992, 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1992, 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -20,13 +19,21 @@
#include <errno.h>
#include <signal.h>
-
-sigset_t _sigintr; /* Set by siginterrupt. */
+/* Tolerate non-threads versions of Posix */
+#ifndef SA_ONESHOT
+#define SA_ONESHOT 0
+#endif
+#ifndef SA_NOMASK
+#define SA_NOMASK 0
+#endif
+#ifndef SA_INTERRUPT
+#define SA_INTERRUPT 0
+#endif
/* Set the handler for the signal SIG to HANDLER,
returning the old handler, or SIG_ERR on error. */
__sighandler_t
-bsd_signal (sig, handler)
+__sysv_signal (sig, handler)
int sig;
__sighandler_t handler;
{
@@ -42,7 +49,8 @@ bsd_signal (sig, handler)
act.sa_handler = handler;
if (__sigemptyset (&act.sa_mask) < 0)
return SIG_ERR;
- act.sa_flags = __sigismember (&_sigintr, sig) ? 0 : SA_RESTART;
+ act.sa_flags = SA_ONESHOT | SA_NOMASK | SA_INTERRUPT;
+ act.sa_flags &= ~SA_RESTART;
if (__sigaction (sig, &act, &oact) < 0)
return SIG_ERR;