+getrlimit()
+{
+ register struct a {
+ u_int which;
+ struct rlimit *rlp;
+ } *uap = (struct a *)u.u_ap;
+
+ if (uap->which >= RLIM_NLIMITS) {
+ u.u_error = EINVAL;
+ return;
+ }
+ u.u_error = copyout((caddr_t)&u.u_rlimit[uap->which], (caddr_t)uap->rlp,
+ sizeof (struct rlimit));
+}
+
+getrusage()
+{
+ register struct a {
+ int who;
+ struct rusage *rusage;
+ } *uap = (struct a *)u.u_ap;
+ register struct rusage *rup;
+
+ switch (uap->who) {
+
+ case RUSAGE_SELF:
+ rup = &u.u_ru;
+ break;
+
+ case RUSAGE_CHILDREN:
+ rup = &u.u_cru;
+ break;
+
+ default:
+ u.u_error = EINVAL;
+ return;
+ }
+ u.u_error = copyout((caddr_t)rup, (caddr_t)uap->rusage,
+ sizeof (struct rusage));
+}
+
+ruadd(ru, ru2)
+ register struct rusage *ru, *ru2;
+{
+ register long *ip, *ip2;
+ register int i;
+
+ timevaladd(&ru->ru_utime, &ru2->ru_utime);
+ timevaladd(&ru->ru_stime, &ru2->ru_stime);
+ if (ru->ru_maxrss < ru2->ru_maxrss)
+ ru->ru_maxrss = ru2->ru_maxrss;
+ ip = &ru->ru_first; ip2 = &ru2->ru_first;
+ for (i = &ru->ru_last - &ru->ru_first; i > 0; i--)
+ *ip++ += *ip2++;
+}
+
+#ifndef NOCOMPAT
+onice()
+{
+ register struct a {
+ int niceness;
+ } *uap = (struct a *)u.u_ap;
+ register struct proc *p = u.u_procp;
+
+ donice(p, (p->p_nice-NZERO)+uap->niceness);
+}
+
+#include "../h/times.h"
+
+otimes()
+{
+ register struct a {
+ struct tms *tmsb;
+ } *uap = (struct a *)u.u_ap;
+ struct tms atms;
+
+ atms.tms_utime = scale60(&u.u_ru.ru_utime);
+ atms.tms_stime = scale60(&u.u_ru.ru_stime);
+ atms.tms_cutime = scale60(&u.u_cru.ru_utime);
+ atms.tms_cstime = scale60(&u.u_cru.ru_stime);
+ u.u_error = copyout((caddr_t)&atms, (caddr_t)uap->tmsb, sizeof (atms));
+}
+
+scale60(tvp)
+ register struct timeval *tvp;
+{
+
+ return (tvp->tv_sec * 60 + tvp->tv_usec / 16667);
+}
+
+#include "../h/vtimes.h"
+
+ovtimes()