diff --git a/headers/private/kernel/ksignal.h b/headers/private/kernel/ksignal.h index 733864d7d2..e58f84a97d 100644 --- a/headers/private/kernel/ksignal.h +++ b/headers/private/kernel/ksignal.h @@ -30,6 +30,7 @@ extern int _user_sigprocmask(int how, const sigset_t *set, sigset_t *oldSet); extern int _user_sigaction(int sig, const struct sigaction *action, struct sigaction *oldAction); extern bigtime_t _user_set_alarm(bigtime_t time, uint32 mode); extern int _user_sigsuspend(const sigset_t *mask); +extern int _user_sigpending(sigset_t *set); #ifdef __cplusplus } // extern "C" diff --git a/headers/private/kernel/syscalls.h b/headers/private/kernel/syscalls.h index 44662dd478..627badeae5 100644 --- a/headers/private/kernel/syscalls.h +++ b/headers/private/kernel/syscalls.h @@ -104,6 +104,7 @@ extern int _kern_sigprocmask(int how, const sigset_t *set, sigset_t *oldSet); extern int _kern_sigaction(int sig, const struct sigaction *action, struct sigaction *oldAction); extern bigtime_t _kern_set_alarm(bigtime_t time, uint32 mode); extern int _kern_sigsuspend(const sigset_t *mask); +extern int _kern_sigpending(sigset_t *set); // image functions extern image_id _kern_register_image(image_info *info, size_t size); diff --git a/src/system/kernel/signal.c b/src/system/kernel/signal.c index 69b07d07c7..db3d8ccd18 100644 --- a/src/system/kernel/signal.c +++ b/src/system/kernel/signal.c @@ -600,7 +600,8 @@ _user_sigaction(int signal, const struct sigaction *userAction, struct sigaction int -_user_sigsuspend(const sigset_t *mask) { +_user_sigsuspend(const sigset_t *mask) +{ sigset_t set; if (mask == NULL) return B_BAD_VALUE; @@ -611,3 +612,14 @@ _user_sigsuspend(const sigset_t *mask) { // Todo : implement return EINVAL; } + + +int +_user_sigpending(sigset_t *set) { + if (set == NULL) + return B_BAD_VALUE; + + // Todo : implement + return EINVAL; +} + diff --git a/src/system/libroot/posix/signal/Jamfile b/src/system/libroot/posix/signal/Jamfile index c1676924d8..642d45c615 100644 --- a/src/system/libroot/posix/signal/Jamfile +++ b/src/system/libroot/posix/signal/Jamfile @@ -6,6 +6,7 @@ KernelMergeObject posix_signal.o : send_signal.c sigaction.c signal.c + sigpending.c sigprocmask.c sigset.c sigsuspend.c diff --git a/src/system/libroot/posix/signal/sigpending.c b/src/system/libroot/posix/signal/sigpending.c new file mode 100644 index 0000000000..2e186d445b --- /dev/null +++ b/src/system/libroot/posix/signal/sigpending.c @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2005, Haiku Project. All rights reserved. + * Distributed under the terms of the Haiku license. + * + * Author(s): + * Jérôme Duval + */ + +#include +#include +#include + +int +sigpending(sigset_t *set) +{ + int err = _kern_sigpending(set); + if (err < B_OK) { + errno = err; + return -1; + } + return 0; +} +