add `signal' as a system call
authorKirk McKusick <mckusick@ucbvax.Berkeley.EDU>
Sat, 25 Aug 1984 07:55:29 +0000 (23:55 -0800)
committerKirk McKusick <mckusick@ucbvax.Berkeley.EDU>
Sat, 25 Aug 1984 07:55:29 +0000 (23:55 -0800)
SCCS-vsn: sys/kern/kern_sig.c 6.5

usr/src/sys/kern/kern_sig.c

index 796faf1..b3b5cec 100644 (file)
@@ -1,4 +1,4 @@
-/*     kern_sig.c      6.4     84/07/08        */
+/*     kern_sig.c      6.5     84/08/24        */
 
 #include "../machine/reg.h"
 #include "../machine/pte.h"
 
 #include "../machine/reg.h"
 #include "../machine/pte.h"
 #define        mask(s) (1 << ((s)-1))
 #define        cantmask        (mask(SIGKILL)|mask(SIGCONT)|mask(SIGSTOP))
 
 #define        mask(s) (1 << ((s)-1))
 #define        cantmask        (mask(SIGKILL)|mask(SIGCONT)|mask(SIGSTOP))
 
+/*
+ * Quick interface to signal handler.
+ */
+signal()
+{
+       register struct a {
+               int     signo;
+               int     (*handler)();   /* signal handler */
+       } *uap = (struct a  *)u.u_ap;
+       struct sigvec vec;
+       register struct sigvec *sv = &vec;
+       register int sig;
+
+       sig = uap->signo;
+       if (sig <= 0 || sig >= NSIG || sig == SIGKILL || sig == SIGSTOP ||
+           (sig == SIGCONT && uap->handler == SIG_IGN)) {
+               u.u_error = EINVAL;
+               return;
+       }
+       sv->sv_handler = uap->handler;
+       sv->sv_mask = 0;
+       sv->sv_onstack = 0;
+       u.u_r.r_val1 = (int)u.u_signal[sig];
+       setsigvec(sig, sv);
+}
+
+/*
+ * Generalized interface signal handler.
+ */
 sigvec()
 {
        register struct a {
 sigvec()
 {
        register struct a {