aboutsummaryrefslogtreecommitdiffstats
path: root/src/pdclib/platform/example/functions/signal
diff options
context:
space:
mode:
Diffstat (limited to 'src/pdclib/platform/example/functions/signal')
-rw-r--r--src/pdclib/platform/example/functions/signal/raise.c114
-rw-r--r--src/pdclib/platform/example/functions/signal/signal.c75
2 files changed, 0 insertions, 189 deletions
diff --git a/src/pdclib/platform/example/functions/signal/raise.c b/src/pdclib/platform/example/functions/signal/raise.c
deleted file mode 100644
index 59ccc9f..0000000
--- a/src/pdclib/platform/example/functions/signal/raise.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/* raise( int )
-
- This file is part of the Public Domain C Library (PDCLib).
- Permission is granted to use, modify, and / or redistribute at will.
-*/
-
-#include <signal.h>
-
-#ifndef REGTEST
-
-#include <stdio.h>
-#include <stdlib.h>
-
-extern void (*_PDCLIB_sigabrt)( int );
-extern void (*_PDCLIB_sigfpe)( int );
-extern void (*_PDCLIB_sigill)( int );
-extern void (*_PDCLIB_sigint)( int );
-extern void (*_PDCLIB_sigsegv)( int );
-extern void (*_PDCLIB_sigterm)( int );
-
-int raise( int sig )
-{
- void (*sighandler)( int );
- const char * message;
- switch ( sig )
- {
- case SIGABRT:
- sighandler = _PDCLIB_sigabrt;
- message = "Abnormal termination (SIGABRT)";
- break;
- case SIGFPE:
- sighandler = _PDCLIB_sigfpe;
- message = "Arithmetic exception (SIGFPE)";
- break;
- case SIGILL:
- sighandler = _PDCLIB_sigill;
- message = "Illegal instruction (SIGILL)";
- break;
- case SIGINT:
- sighandler = _PDCLIB_sigint;
- message = "Interactive attention signal (SIGINT)";
- break;
- case SIGSEGV:
- sighandler = _PDCLIB_sigsegv;
- message = "Invalid memory access (SIGSEGV)";
- break;
- case SIGTERM:
- sighandler = _PDCLIB_sigterm;
- message = "Termination request (SIGTERM)";
- break;
- default:
- fprintf( stderr, "Unknown signal #%d\n", sig );
- _Exit( EXIT_FAILURE );
- }
- if ( sighandler == SIG_DFL )
- {
- fputs( message, stderr );
- _Exit( EXIT_FAILURE );
- }
- else if ( sighandler != SIG_IGN )
- {
- sighandler = signal( sig, SIG_DFL );
- sighandler( sig );
- }
- return 0;
-}
-
-#endif
-
-#ifdef TEST
-
-#include "_PDCLIB_test.h"
-
-#include <stdlib.h>
-
-static volatile sig_atomic_t flag = 0;
-
-static int expected_signal = 0;
-
-static void test_handler( int sig )
-{
- TESTCASE( sig == expected_signal );
- flag = 1;
-}
-
-int main( void )
-{
- /* Could be other than SIG_DFL if you changed the implementation. */
- TESTCASE( signal( SIGABRT, SIG_IGN ) == SIG_DFL );
- /* Should be ignored. */
- TESTCASE( raise( SIGABRT ) == 0 );
- /* Installing test handler, old handler should be returned */
- TESTCASE( signal( SIGABRT, test_handler ) == SIG_IGN );
- /* Raising and checking SIGABRT */
- expected_signal = SIGABRT;
- TESTCASE( raise( SIGABRT ) == 0 );
- TESTCASE( flag == 1 );
- /* Re-installing test handler, should have been reset to default */
- /* Could be other than SIG_DFL if you changed the implementation. */
- TESTCASE( signal( SIGABRT, test_handler ) == SIG_DFL );
- /* Raising and checking SIGABRT */
- flag = 0;
- TESTCASE( raise( SIGABRT ) == 0 );
- TESTCASE( flag == 1 );
- /* Installing test handler for different signal... */
- TESTCASE( signal( SIGTERM, test_handler ) == SIG_DFL );
- /* Raising and checking SIGTERM */
- expected_signal = SIGTERM;
- TESTCASE( raise( SIGTERM ) == 0 );
- TESTCASE( flag == 1 );
- return TEST_RESULTS;
-}
-
-#endif
diff --git a/src/pdclib/platform/example/functions/signal/signal.c b/src/pdclib/platform/example/functions/signal/signal.c
deleted file mode 100644
index e6775e7..0000000
--- a/src/pdclib/platform/example/functions/signal/signal.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/* signal( int, void (*)( int ) )
-
- This file is part of the Public Domain C Library (PDCLib).
- Permission is granted to use, modify, and / or redistribute at will.
-*/
-
-#include <signal.h>
-
-#ifndef REGTEST
-
-#include <stdlib.h>
-
-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:
- oldhandler = _PDCLIB_sigabrt;
- _PDCLIB_sigabrt = func;
- break;
- case SIGFPE:
- oldhandler = _PDCLIB_sigfpe;
- _PDCLIB_sigfpe = func;
- break;
- case SIGILL:
- oldhandler = _PDCLIB_sigill;
- _PDCLIB_sigill = func;
- break;
- case SIGINT:
- oldhandler = _PDCLIB_sigint;
- _PDCLIB_sigint = func;
- break;
- case SIGSEGV:
- oldhandler = _PDCLIB_sigsegv;
- _PDCLIB_sigsegv = func;
- break;
- case SIGTERM:
- oldhandler = _PDCLIB_sigterm;
- _PDCLIB_sigterm = func;
- break;
- default:
- /* The standard calls for an unspecified "positive value". You
- will probably want to define a specific value for this.
- */
- _PDCLIB_errno = 1;
- return SIG_ERR;
- }
- return oldhandler;
-}
-
-#endif
-
-#ifdef TEST
-
-#include "_PDCLIB_test.h"
-
-int main( void )
-{
- /* Testing covered by raise.c */
- return TEST_RESULTS;
-}
-
-#endif