--- dietlibc-0.22/test/alarm.c.tests 2002-11-29 14:53:53.000000000 +0100 +++ dietlibc-0.22/test/alarm.c 2002-11-29 14:53:36.000000000 +0100 @@ -0,0 +1,23 @@ +#include <stdio.h> +#include <errno.h> +#include <stdlib.h> +#include <signal.h> +#include <unistd.h> + +static void alarm_handler(int sig) +{ + printf("Good, SIGALRM caught\n"); + exit(0); +} + +int main(void) +{ + if (signal(SIGALRM, alarm_handler) == SIG_ERR) { + perror("Failure to hook SIGALRM handler"); + return 1; + } + alarm(1); + sleep(2); + printf("Failure, alarm() doesn't work\n"); + abort(); +} --- dietlibc-0.22/test/signal.c.tests 2002-11-29 14:53:59.000000000 +0100 +++ dietlibc-0.22/test/signal.c 2002-11-29 14:53:40.000000000 +0100 @@ -0,0 +1,37 @@ +#include <stdio.h> +#include <errno.h> +#include <stdlib.h> +#include <signal.h> +#include <unistd.h> + +static void sigusr1_handler(int sig) +{ + if (sig != SIGUSR1) { + printf("Hey, got signal %d instead of SIGUSR1!\n", sig); + abort(); + } + printf("Good, SIGUSR1 caught\n"); + exit(0); +} + +int main(void) +{ + sighandler_t old_sigusr1_handler; + + if (signal(SIGUSR1, sigusr1_handler) == SIG_ERR) { + perror("Failure to register SIGUSR1 handler\n"); + return 1; + } + old_sigusr1_handler = signal(SIGUSR1, sigusr1_handler); + if (old_sigusr1_handler == SIG_ERR) { + perror("Failure to re-register SIGUSR1 handler\n"); + return 1; + } + else if (old_sigusr1_handler != sigusr1_handler) { + perror("Previous SIGUSR1 handler is not sigusr1_handler\n"); + return 1; + } + raise(SIGUSR1); + printf("Failure, something went wrong\n"); + abort(); +} --- dietlibc-0.22/test/setjmp.c.tests 2002-11-29 14:54:14.000000000 +0100 +++ dietlibc-0.22/test/setjmp.c 2002-11-29 14:54:11.000000000 +0100 @@ -0,0 +1,43 @@ +#include <stdio.h> +#include <setjmp.h> +#include <signal.h> +#include <unistd.h> + +static jmp_buf env; +static void signal_handler(); + +int main() { + int returned_from_longjump, processing = 10; + unsigned int time_interval = 4; + if ((returned_from_longjump = setjmp(env)) != 0) { + switch (returned_from_longjump) { + case SIGINT: + printf("longjumped from interrupt %d\n",SIGINT); + break; + case SIGALRM: + printf("longjumped from alarm %d\n",SIGALRM); + break; + } + } + signal(SIGINT, signal_handler); + signal(SIGALRM, signal_handler); + alarm(time_interval); + while (processing-- > 0) { + printf(" waiting for you to INTERRUPT (cntrl-C) ...\n"); + sleep(1); + } /* end while forever loop */ + return 0; +} + +static void signal_handler(int sig) { + switch (sig) { + case SIGINT: /* process for interrupt */ + longjmp(env,sig); + /* break never reached */ + case SIGALRM: /* process for alarm */ + longjmp(env,sig); + /* break never reached */ + default: + exit(sig); + } +}