X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FLibraries%2Flibc.so_src%2Fsignals.c;h=5e32fc8612ef88ac2ebcf903caac3448b1691164;hb=8735311896d1bd38ae79f1aa604ed81712bd5d97;hp=c33019e4dd1978c6e49b14aaaa27511974e27878;hpb=bf0187772ecfb475eedf5e0e9b8460b4f1a3f445;p=tpg%2Facess2.git diff --git a/Usermode/Libraries/libc.so_src/signals.c b/Usermode/Libraries/libc.so_src/signals.c index c33019e4..5e32fc86 100644 --- a/Usermode/Libraries/libc.so_src/signals.c +++ b/Usermode/Libraries/libc.so_src/signals.c @@ -6,20 +6,22 @@ #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; } @@ -41,3 +43,30 @@ void abort(void) // raise(SIGABRT); _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; +}