+ sv = &vec;
+ if (uap->osv) {
+ sv->sv_handler = u.u_signal[sig];
+ sv->sv_mask = u.u_sigmask[sig];
+ sv->sv_onstack = (u.u_sigonstack & mask(sig)) != 0;
+ u.u_error =
+ copyout((caddr_t)sv, (caddr_t)uap->osv, sizeof (vec));
+ if (u.u_error)
+ return;
+ }
+ if (uap->nsv) {
+ u.u_error =
+ copyin((caddr_t)uap->nsv, (caddr_t)sv, sizeof (vec));
+ if (u.u_error)
+ return;
+ if (sig == SIGCONT && sv->sv_handler == SIG_IGN) {
+ u.u_error = EINVAL;
+ return;
+ }
+ setsigvec(sig, sv);
+ }