From a5a36fe421cf2bce41341fcad50a04ebdb7200b3 Mon Sep 17 00:00:00 2001 From: Stefano Ceccherini Date: Fri, 18 Aug 2006 08:00:07 +0000 Subject: [PATCH] the second parameter of sigprocmask() can be NULL git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18531 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/kernel/signal.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/system/kernel/signal.c b/src/system/kernel/signal.c index fde82abbd5..3d911c89a6 100644 --- a/src/system/kernel/signal.c +++ b/src/system/kernel/signal.c @@ -385,6 +385,12 @@ sigprocmask(int how, const sigset_t *set, sigset_t *oldSet) struct thread *thread = thread_get_current_thread(); sigset_t oldMask = atomic_get(&thread->sig_block_mask); + if (oldSet != NULL) + *oldSet = oldMask; + + if (set == NULL) + return B_OK; + switch (how) { case SIG_BLOCK: atomic_or(&thread->sig_block_mask, *set & BLOCKABLE_SIGNALS); @@ -395,14 +401,10 @@ sigprocmask(int how, const sigset_t *set, sigset_t *oldSet) case SIG_SETMASK: atomic_set(&thread->sig_block_mask, *set & BLOCKABLE_SIGNALS); break; - default: return B_BAD_VALUE; } - - if (oldSet != NULL) - *oldSet = oldMask; - + return B_OK; } @@ -591,14 +593,11 @@ _user_sigprocmask(int how, const sigset_t *userSet, sigset_t *userOldSet) sigset_t set, oldSet; status_t status; - if (userSet == NULL) - return B_BAD_VALUE; - - if (user_memcpy(&set, userSet, sizeof(sigset_t)) < B_OK + if ((userSet != NULL && user_memcpy(&set, userSet, sizeof(sigset_t)) < B_OK) || (userOldSet != NULL && user_memcpy(&oldSet, userOldSet, sizeof(sigset_t)) < B_OK)) return B_BAD_ADDRESS; - status = sigprocmask(how, &set, userOldSet ? &oldSet : NULL); + status = sigprocmask(how, userSet ? &set : NULL, userOldSet ? &oldSet : NULL); // copy old set if asked for if (status >= B_OK && userOldSet != NULL && user_memcpy(userOldSet, &oldSet, sizeof(sigset_t)) < B_OK)