Upgraded GRUB2 to 2.00 release.
[AROS.git] / compiler / clib / __signal.c
blob7445b47a76ed171a9db1cbb9bc872f5be8be942e
1 /*
2 Copyright © 2012, The AROS Development Team. All rights reserved.
3 $Id$
4 */
6 #include <proto/exec.h>
8 #include <signal.h>
9 #include <errno.h>
10 #include <stdio.h>
11 #include <assert.h>
13 #include "__arosc_privdata.h"
14 #include "__signal.h"
16 struct signal_func_data *__sig_getfuncdata(int signum)
18 struct aroscbase *aroscbase = __aros_getbase();
19 int i;
21 if (signum < SIGHUP || signum > _SIGMAX)
23 errno = EINVAL;
24 return NULL;
27 if (aroscbase->acb_sigfunc_array == NULL)
29 aroscbase->acb_sigfunc_array =
30 AllocPooled(aroscbase->acb_internalpool,
31 _SIGMAX*sizeof(struct signal_func_data)
34 if (!aroscbase->acb_sigfunc_array)
36 errno = ENOMEM;
37 return NULL;
40 for (i = 0; i < _SIGMAX; i++)
42 aroscbase->acb_sigfunc_array[i].sigfunc = SIG_DFL;
43 aroscbase->acb_sigfunc_array[i].flags = 0;
47 return &aroscbase->acb_sigfunc_array[signum-1];
50 /* Handler for SIG_DFL */
51 void __sig_default(int signum)
53 switch (signum)
55 case SIGABRT:
56 fprintf(stderr, "Program aborted.\n");
57 break;
59 case SIGTERM:
60 fprintf(stderr, "Program terminated.\n");
61 break;
63 default:
64 fprintf(stderr, "Caught signal %d; aborting...\n", signum);
65 break;
68 __arosc_jmp2exit(0, 20);
70 assert(0); /* Should not be reached */