shithub: npe

ref: b6a5e7f9af746f6459a01a480564839ff3a35c6c
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);
	}
}