- u.u_error = copyin((caddr_t)uap->tv, (caddr_t)&atv,
- sizeof (struct timeval));
- if (u.u_error)
- return;
- setthetime(&atv);
- if (uap->tzp && suser()) {
- u.u_error = copyin((caddr_t)uap->tzp, (caddr_t)&atz,
- sizeof (atz));
- if (u.u_error == 0)
- tz = atz;
+ if (error = suser(p->p_ucred, &p->p_acflag))
+ return (error);
+ if (uap->tv) {
+ if (error = copyin((caddr_t)uap->tv, (caddr_t)&atv,
+ sizeof (struct timeval)))
+ return (error);
+ /* WHAT DO WE DO ABOUT PENDING REAL-TIME TIMEOUTS??? */
+ boottime.tv_sec += atv.tv_sec - time.tv_sec;
+ s = splhigh(); time = atv; splx(s);
+ resettodr();