shithub: npe

ref: 31984582c702a9febde8773e1e24f305c4eceae4
dir: /libnpe/sigaction.c/

View raw version
#include <signal.h>

/* FIXME this only supports a single handler */

static sa_handler last;

static int
handler(void*, char *s)
{
	/* kill is kill */
	if(strcmp(s, "kill") != 0 && strcmp(s, "threadint") != 0)
		last(SIGSEGV);
	return 0;
}

void
sigaction(int, struct sigaction *act, struct sigaction *)
{
	if(act != nil && last == nil){
		last = act->sa_handler;
		atnotify(handler, 1);
	}else if(act == nil){
		atnotify(handler, 0);
	}
}