ack/mach/sparc_solaris/libsys/signal.c
1993-10-06 17:04:49 +00:00

38 lines
675 B
C

#include <errno.h>
extern int errno;
#define MAXSIG 128
void (*_sig_funcs[MAXSIG])();
void _sig_catch();
void (*_signal())();
void
(*
signal(sig, handler))()
void (*handler)();
{
void (*old)(), (*retval)();
if (sig <= 0 || sig > MAXSIG) {
errno = EINVAL;
return (void (*)()) -1;
}
if ((long) handler >= 0 && (long) handler <= 2) {
retval = _signal(sig, handler);
if (retval != (void (*)()) -1) {
old = _sig_funcs[sig-1];
_sig_funcs[sig-1] = handler;
return old;
}
return retval;
}
retval = _signal(sig, _sig_catch);
if (retval != (void (*)()) -1) {
old = _sig_funcs[sig-1];
_sig_funcs[sig-1] = handler;
return old;
}
return retval;
}