- if (uap->which > 2) {
- u.u_error = EINVAL;
- return;
- }
- aitvp = uap->itv;
- if (uap->oitv) {
- uap->itv = uap->oitv;
- getitimer();
- }
- if (aitvp == 0)
- return;
- u.u_error = copyin((caddr_t)aitvp, (caddr_t)&aitv,
- sizeof (struct itimerval));
- if (u.u_error)
- return;
- if (itimerfix(&aitv.it_value) || itimerfix(&aitv.it_interval)) {
- u.u_error = EINVAL;
- return;
- }
+ if (uap->which > ITIMER_PROF)
+ return (EINVAL);
+ itvp = uap->itv;
+ if (itvp && (error = copyin((caddr_t)itvp, (caddr_t)&aitv,
+ sizeof(struct itimerval))))
+ return (error);
+ if ((uap->itv = uap->oitv) && (error = getitimer(p, uap, retval)))
+ return (error);
+ if (itvp == 0)
+ return (0);
+ if (itimerfix(&aitv.it_value) || itimerfix(&aitv.it_interval))
+ return (EINVAL);