diff --git a/headers/posix/signal.h b/headers/posix/signal.h index 9dc7feab36..3ee35fd56c 100644 --- a/headers/posix/signal.h +++ b/headers/posix/signal.h @@ -164,6 +164,7 @@ int sigaddset(sigset_t *set, int signo); int sigdelset(sigset_t *set, int signo); int sigismember(const sigset_t *set, int signo); int sigignore(int signo); +int sighold(int signo); const char *strsignal(int sig); diff --git a/src/system/libroot/posix/signal/Jamfile b/src/system/libroot/posix/signal/Jamfile index 02d491b617..057fbebfa1 100644 --- a/src/system/libroot/posix/signal/Jamfile +++ b/src/system/libroot/posix/signal/Jamfile @@ -10,6 +10,7 @@ MergeObject posix_signal.o : set_signal_stack.c sigaction.c sigaltstack.c + sighold.cpp sigignore.cpp signal.c sigpending.c diff --git a/src/system/libroot/posix/signal/sighold.cpp b/src/system/libroot/posix/signal/sighold.cpp new file mode 100644 index 0000000000..9ce10907d9 --- /dev/null +++ b/src/system/libroot/posix/signal/sighold.cpp @@ -0,0 +1,22 @@ +/* + * Copyright 2007, Vasilis Kaoutsis, kaoutsis@sch.gr + * Distributed under the terms of the MIT License. + */ + + +#include + + +int +sighold(int signal) +{ + // make an empty set + // and add the signal + sigset_t tempSignalSet; + sigemptyset(&tempSignalSet); + if (sigaddset(&tempSignalSet, signal) == -1) + return -1; + + // add the signal to the calling process' signal mask + return sigprocmask(SIG_BLOCK, &tempSignalSet, NULL); +}