]> pd.if.org Git - pdclib/blobdiff - functions/signal/signal.c
Sweeping cleanups. Sorry for the massive commit; I got sidetracked once too often.
[pdclib] / functions / signal / signal.c
index fb1ff0b8afb1f7afd74b3edb70209d61434ec94c..e677af540ce4f07e090ac6222bb6459d21fb5939 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;
 }
@@ -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