- if (!suser())
- return;
-/* WHAT DO WE DO ABOUT PENDING REAL-TIME TIMEOUTS??? */
- boottime.tv_sec += tv->tv_sec - time.tv_sec;
- s = spl7(); time = *tv; splx(s);
- resettodr();
+ if (error = suser(p->p_ucred, &p->p_acflag))
+ return (error);
+ if (error =
+ copyin((caddr_t)uap->delta, (caddr_t)&atv, sizeof (struct timeval)))
+ return (error);
+ ndelta = atv.tv_sec * 1000000 + atv.tv_usec;
+ if (timedelta == 0)
+ if (ndelta > bigadj)
+ tickdelta = 10 * tickadj;
+ else
+ tickdelta = tickadj;
+ if (ndelta % tickdelta)
+ ndelta = ndelta / tickadj * tickadj;
+
+ s = splclock();
+ if (uap->olddelta) {
+ oatv.tv_sec = timedelta / 1000000;
+ oatv.tv_usec = timedelta % 1000000;
+ }
+ timedelta = ndelta;
+ splx(s);
+
+ if (uap->olddelta)
+ (void) copyout((caddr_t)&oatv, (caddr_t)uap->olddelta,
+ sizeof (struct timeval));
+ return (0);