root/src/system/libroot/posix/signal/sigsuspend.cpp
/*
 * Copyright 2005-2011, Haiku, Inc. All rights reserved.
 * Distributed under the terms of the MIT license.
 *
 * Author(s):
 *              Jérôme Duval
 *              Ingo Weinhold, ingo_weinhold@gmx.de
 */


#include <signal.h>

#include <errno.h>
#include <pthread.h>

#include <syscall_utils.h>

#include <symbol_versioning.h>
#include <syscalls.h>

#include <errno_private.h>
#include <signal_private.h>


int
__sigsuspend_beos(const sigset_t_beos* beosMask)
{
        sigset_t mask = from_beos_sigset(*beosMask);
        return __sigsuspend(&mask);
}


int
__sigsuspend(const sigset_t* mask)
{
        __set_errno(_kern_sigsuspend(mask));

        pthread_testcancel();

        return -1;
}


DEFINE_LIBROOT_KERNEL_SYMBOL_VERSION("__sigsuspend_beos", "sigsuspend@",
        "BASE");

DEFINE_LIBROOT_KERNEL_SYMBOL_VERSION("__sigsuspend", "sigsuspend@@",
        "1_ALPHA4");