]> pd.if.org Git - pdclib/blobdiff - functions/signal/signal.c
PDCLib includes with quotes, not <>.
[pdclib] / functions / signal / signal.c
index fb1ff0b8afb1f7afd74b3edb70209d61434ec94c..569daf5ec9c972c5dca2e55c7312f66cf1942031 100644 (file)
@@ -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 <signal.h>
+#include <errno.h>
 
 #ifndef REGTEST
 
-#include <stdlib.h>
-
-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;
 }
@@ -64,11 +59,11 @@ void (*signal( int sig, void (*func)( int ) ) )( int )
 #endif
 
 #ifdef TEST
-#include <_PDCLIB_test.h>
+#include "_PDCLIB_test.h"
 
 int main( void )
 {
-    TESTCASE( NO_TESTDRIVER );
+    /* Testing covered by raise.c */
     return TEST_RESULTS;
 }
 #endif