#ifndef REGTEST
+#include <stdlib.h>
+
extern void (*_PDCLIB_sigabrt)( int );
extern void (*_PDCLIB_sigfpe)( int );
extern void (*_PDCLIB_sigill)( int );
int raise( int sig )
{
+ void (*sighandler)( int );
switch ( sig )
{
case SIGABRT:
- _PDCLIB_sigabrt( sig );
+ sighandler = _PDCLIB_sigabrt;
break;
case SIGFPE:
- _PDCLIB_sigfpe( sig );
+ sighandler = _PDCLIB_sigfpe;
break;
case SIGILL:
- _PDCLIB_sigill( sig );
+ sighandler = _PDCLIB_sigill;
break;
case SIGINT:
- _PDCLIB_sigint( sig );
+ sighandler = _PDCLIB_sigint;
break;
case SIGSEGV:
- _PDCLIB_sigsegv( sig );
+ sighandler = _PDCLIB_sigsegv;
break;
case SIGTERM:
- _PDCLIB_sigterm( sig );
+ sighandler = _PDCLIB_sigterm;
break;
default:
/* TODO: Implement. */
break;
}
- /* TODO: Implement. */
+ if ( sighandler == SIG_DFL )
+ {
+ _Exit( EXIT_FAILURE );
+ }
+ else if ( sighandler != SIG_IGN )
+ {
+ sighandler = signal( sig, SIG_DFL );
+ sighandler( sig );
+ }
return 0;
}