FxLibcTest/src/signal/signal.c

46 lines
907 B
C

#include <ft/test.h>
#include <ft/all-tests.h>
#include <signal.h>
#include <setjmp.h>
static volatile sig_atomic_t last_signum = 0;
static jmp_buf jb;
void handler(int signum)
{
last_signum = signum;
}
void handler2(int signum)
{
longjmp(jb, signum);
}
void _ft_signal_signal(ft_test *t)
{
__sighandler_t prev;
ft_assert(t, signal(192548, SIG_IGN) == SIG_ERR);
signal(SIGINT, SIG_DFL);
/* Call an ignored signal */
prev = signal(SIGINT, SIG_IGN);
ft_assert(t, prev == SIG_DFL && raise(SIGINT) == 0);
/* Call a normal handler */
prev = signal(SIGINT, handler);
raise(SIGINT);
ft_assert(t, prev == SIG_IGN && last_signum == SIGINT);
/* longjmp() out of a signal handler (same thread) */
signal(SIGINT, handler2);
int rc = setjmp(jb);
if(!rc) raise(SIGINT);
else ft_assert(t, rc == SIGINT);
}
ft_test ft_signal_signal = {
.name = "Signal basics",
.function = _ft_signal_signal,
};