From df4ef2ab9c0899b2670067cd97e58f7eb2913e00 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Mon, 6 Jan 1997 22:07:28 +0000 Subject: update from main archive 960105 --- sysdeps/posix/bsd_signal.c | 50 -------------------------------------- sysdeps/posix/signal.c | 15 +++++++----- sysdeps/posix/sigpause.c | 5 ++-- sysdeps/posix/sysv_signal.c | 58 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 70 insertions(+), 58 deletions(-) delete mode 100644 sysdeps/posix/bsd_signal.c create mode 100644 sysdeps/posix/sysv_signal.c (limited to 'sysdeps/posix') diff --git a/sysdeps/posix/bsd_signal.c b/sysdeps/posix/bsd_signal.c deleted file mode 100644 index 4941485c0d..0000000000 --- a/sysdeps/posix/bsd_signal.c +++ /dev/null @@ -1,50 +0,0 @@ -/* X/Open compatibility function. - Copyright (C) 1991, 1992, 1996 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 - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -#include -#include - - -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 -bsd_signal (sig, handler) - int sig; - __sighandler_t handler; -{ - struct sigaction act, oact; - - /* Check signal extents to protect __sigismember. */ - if (handler == SIG_ERR || sig < 1 || sig >= NSIG) - { - __set_errno (EINVAL); - return SIG_ERR; - } - - act.sa_handler = handler; - if (__sigemptyset (&act.sa_mask) < 0) - return SIG_ERR; - act.sa_flags = __sigismember (&_sigintr, sig) ? 0 : SA_RESTART; - if (__sigaction (sig, &act, &oact) < 0) - return SIG_ERR; - - return oact.sa_handler; -} diff --git a/sysdeps/posix/signal.c b/sysdeps/posix/signal.c index 25e7cab617..2e0cf64de3 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 +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 8b820ecad9..414019a40d 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/sysv_signal.c b/sysdeps/posix/sysv_signal.c new file mode 100644 index 0000000000..2b6d5f9d56 --- /dev/null +++ b/sysdeps/posix/sysv_signal.c @@ -0,0 +1,58 @@ +/* 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 + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include +#include + +/* 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 +__sysv_signal (sig, handler) + int sig; + __sighandler_t handler; +{ + struct sigaction act, oact; + + /* Check signal extents to protect __sigismember. */ + if (handler == SIG_ERR || sig < 1 || sig >= NSIG) + { + __set_errno (EINVAL); + return SIG_ERR; + } + + 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; + if (__sigaction (sig, &act, &oact) < 0) + return SIG_ERR; + + return oact.sa_handler; +} -- cgit v1.2.3-70-g09d2