From efe9077ecf6114680aac09ae1cd0910b300c8d12 Mon Sep 17 00:00:00 2001 From: "Peter S. Mazinger" Date: Sun, 24 Apr 2011 00:21:30 +0200 Subject: sigpause.c: provide the X/Open variant, since the BSD version is deprecated Do not export __sigpause. Provide __bsd_sigpause (unprototyped) if anyone may need it. Adapt cancellation to use cancel.h. Signed-off-by: Peter S. Mazinger Signed-off-by: Bernhard Reutner-Fischer --- libc/signal/sigpause.c | 38 ++++++++++++-------------------------- 1 file changed, 12 insertions(+), 26 deletions(-) (limited to 'libc/signal') diff --git a/libc/signal/sigpause.c b/libc/signal/sigpause.c index ebd7af3b9..63afeead2 100644 --- a/libc/signal/sigpause.c +++ b/libc/signal/sigpause.c @@ -17,22 +17,16 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#define __UCLIBC_HIDE_DEPRECATED__ -/* psm: need the BSD version of sigpause here */ -#include -#define __FAVOR_BSD #include #define __need_NULL #include -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ -#include -#endif +#include #include "sigset-cvt-mask.h" /* Set the mask of blocked signals to MASK, wait for a signal to arrive, and then restore the mask. */ -static int __internal_sigpause (int sig_or_mask, int is_sig) +static int __sigpause (int sig_or_mask, int is_sig) { sigset_t set; @@ -50,29 +44,21 @@ static int __internal_sigpause (int sig_or_mask, int is_sig) /* Note the sigpause() is a cancellation point. But since we call sigsuspend() which itself is a cancellation point we do not have to do anything here. */ - return sigsuspend (&set); + /* uClibc note: not true on uClibc, we call the non-cancellable version */ + return __NC(sigsuspend)(&set); } -strong_alias(__internal_sigpause,__sigpause) -#undef sigpause +int __bsd_sigpause(int mask); +int __bsd_sigpause(int mask) +{ + return __sigpause(mask, 0); +} /* We have to provide a default version of this function since the standards demand it. The version which is a bit more reasonable is the BSD version. So make this the default. */ -int sigpause (int mask) +static int __NC(sigpause)(int sig) { -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ - if (SINGLE_THREAD_P) - return __internal_sigpause (mask, 0); - - int oldtype = LIBC_CANCEL_ASYNC (); - - int result = __internal_sigpause (mask, 0); - - LIBC_CANCEL_RESET (oldtype); - - return result; -#else - return __internal_sigpause (mask, 0); -#endif + return __sigpause(sig, 1); } +CANCELLABLE_SYSCALL(int, sigpause, (int sig), (sig)) -- cgit v1.2.3