compiler/clib/strftime.c: Add note to autodoc that no localization is implemented.
[AROS.git] / compiler / clib / __signal.c
blobf6b6ea0308ce0bb6cea6deeed142fdd2e629c69c
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 = __GM_GetBase();
19 int i;
21 if (signum < SIGHUP || signum > SIGRTMAX)
23 errno = EINVAL;
24 return NULL;
27 if (aroscbase->acb_sigfunc_array == NULL)
29 aroscbase->acb_sigfunc_array =
30 AllocPooled(aroscbase->acb_internalpool,
31 SIGRTMAX*sizeof(struct signal_func_data)
34 if (!aroscbase->acb_sigfunc_array)
36 errno = ENOMEM;
37 return NULL;
40 for (i = 0; i < SIGRTMAX; 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 struct aroscbase *aroscbase = __GM_GetBase();
55 switch (signum)
57 case SIGABRT:
58 fprintf(stderr, "Program aborted.\n");
59 break;
61 case SIGTERM:
62 fprintf(stderr, "Program terminated.\n");
63 break;
65 default:
66 fprintf(stderr, "Caught signal %d; aborting...\n", signum);
67 break;
70 aroscbase->acb_flags |= ABNORMAL_EXIT;
71 longjmp(__arosc_startup_jmp_buf, 20);
73 assert(0); /* Should not be reached */