Path: blob/master/waterbox/libc/functions/signal/signal.c
2 views
/* signal( int sig, void (*func)( int ) )12This file is part of the Public Domain C Library (PDCLib).3Permission is granted to use, modify, and / or redistribute at will.4*/56#include <signal.h>7#include <errno.h>89#ifndef REGTEST1011void (*_PDCLIB_sigabrt)( int ) = SIG_DFL;12void (*_PDCLIB_sigfpe)( int ) = SIG_DFL;13void (*_PDCLIB_sigill)( int ) = SIG_DFL;14void (*_PDCLIB_sigint)( int ) = SIG_DFL;15void (*_PDCLIB_sigsegv)( int ) = SIG_DFL;16void (*_PDCLIB_sigterm)( int ) = SIG_DFL;1718void (*signal( int sig, void (*func)( int ) ) )( int )19{20void (*oldhandler)( int );21if ( sig <= 0 || func == SIG_ERR )22{23return SIG_ERR;24}25switch ( sig )26{27case SIGABRT:28oldhandler = _PDCLIB_sigabrt;29_PDCLIB_sigabrt = func;30break;31case SIGFPE:32oldhandler = _PDCLIB_sigfpe;33_PDCLIB_sigfpe = func;34break;35case SIGILL:36oldhandler = _PDCLIB_sigill;37_PDCLIB_sigill = func;38break;39case SIGINT:40oldhandler = _PDCLIB_sigint;41_PDCLIB_sigint = func;42break;43case SIGSEGV:44oldhandler = _PDCLIB_sigsegv;45_PDCLIB_sigsegv = func;46break;47case SIGTERM:48oldhandler = _PDCLIB_sigterm;49_PDCLIB_sigterm = func;50break;51default:52errno = EINVAL;53return SIG_ERR;54}55return oldhandler;56}5758#endif5960#ifdef TEST61#include "_PDCLIB_test.h"6263int main( void )64{65/* Testing covered by raise.c */66return TEST_RESULTS;67}68#endif697071