X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=functions%2Fsignal%2Fsignal.c;h=e677af540ce4f07e090ac6222bb6459d21fb5939;hb=d7f375a09a9912bb18ad42f1442fbf64311bfed6;hp=fb1ff0b8afb1f7afd74b3edb70209d61434ec94c;hpb=01c88bc38e78e9b2c47917b85b9b497187946e3c;p=pdclib diff --git a/functions/signal/signal.c b/functions/signal/signal.c index fb1ff0b..e677af5 100644 --- a/functions/signal/signal.c +++ b/functions/signal/signal.c @@ -1,5 +1,3 @@ -/* $Id$ */ - /* signal( int sig, void (*func)( int ) ) This file is part of the Public Domain C Library (PDCLib). @@ -7,27 +5,24 @@ */ #include +#include #ifndef REGTEST -#include - -static void default_handler( int sig ) -{ - /* TODO: Implement error message */ - exit( EXIT_FAILURE ); -} - -void (*_PDCLIB_sigabrt)( int ) = default_handler; -void (*_PDCLIB_sigfpe)( int ) = default_handler; -void (*_PDCLIB_sigill)( int ) = default_handler; -void (*_PDCLIB_sigint)( int ) = default_handler; -void (*_PDCLIB_sigsegv)( int ) = default_handler; -void (*_PDCLIB_sigterm)( int ) = default_handler; +void (*_PDCLIB_sigabrt)( int ) = SIG_DFL; +void (*_PDCLIB_sigfpe)( int ) = SIG_DFL; +void (*_PDCLIB_sigill)( int ) = SIG_DFL; +void (*_PDCLIB_sigint)( int ) = SIG_DFL; +void (*_PDCLIB_sigsegv)( int ) = SIG_DFL; +void (*_PDCLIB_sigterm)( int ) = SIG_DFL; void (*signal( int sig, void (*func)( int ) ) )( int ) { void (*oldhandler)( int ); + if ( sig <= 0 || func == SIG_ERR ) + { + return SIG_ERR; + } switch ( sig ) { case SIGABRT: @@ -55,8 +50,8 @@ void (*signal( int sig, void (*func)( int ) ) )( int ) _PDCLIB_sigterm = func; break; default: - /* TODO: Implement. */ - break; + errno = EINVAL; + return SIG_ERR; } return oldhandler; } @@ -68,7 +63,7 @@ void (*signal( int sig, void (*func)( int ) ) )( int ) int main( void ) { - TESTCASE( NO_TESTDRIVER ); + /* Testing covered by raise.c */ return TEST_RESULTS; } #endif