X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FLibraries%2Flibc.so_src%2Fsignals.c;h=532f09b732f57fe4ba9907218478b579df1a1301;hb=3d67e21210fbcad7cdcbfa9c348019a191ce1798;hp=f8b71d3472d4f241a28c490ba89aba6555129510;hpb=1409c5235c5228061ba6605fc1f41302f4f3fe78;p=tpg%2Facess2.git diff --git a/Usermode/Libraries/libc.so_src/signals.c b/Usermode/Libraries/libc.so_src/signals.c index f8b71d34..532f09b7 100644 --- a/Usermode/Libraries/libc.so_src/signals.c +++ b/Usermode/Libraries/libc.so_src/signals.c @@ -2,24 +2,26 @@ * AcessOS Basic C Library * signals.c */ -//#include +#include #include #include #include "lib.h" +#include // === CONSTANTS === -#define NUM_SIGNALS 32 +#define NUM_SIGNALS 40 // === GLOBALS === -sighandler_t sighandlers[NUM_SIGNALS]; +struct sigaction sighandlers[NUM_SIGNALS]; // === CODE === sighandler_t signal(int num, sighandler_t handler) { sighandler_t prev; if(num < 0 || num >= NUM_SIGNALS) return NULL; - prev = sighandlers[num]; - sighandlers[num] = handler; + prev = sighandlers[num].sa_handler; + sighandlers[num].sa_handler = handler; + sighandlers[num].sa_mask = 0; return prev; } @@ -39,5 +41,33 @@ int raise(int signal) void abort(void) { // raise(SIGABRT); + _SysDebug("abort() - %p", __builtin_return_address(0)); _exit(-1); } + +// POSIX +int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact) +{ + if( signum < 0 || signum >= NUM_SIGNALS ) { + errno = EINVAL; + return 1; + } + + if( oldact ) + *oldact = sighandlers[signum]; + if( act ) + sighandlers[signum] = *act; + + return 0; +} + +int sigemptyset(sigset_t *set) +{ + *set = 0; + return 0; +} +int sigfillset(sigset_t *set) +{ + *set = -1; + return 0; +}