From ab38c90461c6b8cf21169e0e25f6fd9b9b8a612a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Tue, 13 Sep 2005 16:12:20 +0000 Subject: [PATCH] added a libroot sigpending, kernel support isn't implemented (fixed partly bug #49) git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14181 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/private/kernel/ksignal.h | 1 + headers/private/kernel/syscalls.h | 1 + src/system/kernel/signal.c | 14 +++++++++++- src/system/libroot/posix/signal/Jamfile | 1 + src/system/libroot/posix/signal/sigpending.c | 23 ++++++++++++++++++++ 5 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 src/system/libroot/posix/signal/sigpending.c 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; +} +