--- sys/posix4/p1003_1b.c.orig Thu Aug 3 01:09:59 2000 +++ sys/posix4/p1003_1b.c Mon Mar 24 21:10:10 2003 @@ -178,13 +178,18 @@ int sched_getparam(struct proc *p, struct sched_getparam_args *uap) { - int e; + struct proc *targetp; struct sched_param sched_param; - - (void) (0 - || (e = p31b_proc(p, uap->pid, &p)) - || (e = ksched_getparam(&p->p_retval[0], ksched, p, &sched_param)) - ); + int e; + + if (uap->pid != 0 && uap->pid != p->p_pid) { + e = p31b_proc(p, uap->pid, &targetp); + if (e) + return e; + } else + targetp = p; + + e = ksched_getparam(&p->p_retval[0], ksched, targetp, &sched_param); if (!e) copyout(&sched_param, uap->param, sizeof(sched_param)); @@ -211,11 +216,17 @@ int sched_getscheduler(struct proc *p, struct sched_getscheduler_args *uap) { + struct proc *targetp; int e; - (void) (0 - || (e = p31b_proc(p, uap->pid, &p)) - || (e = ksched_getscheduler(&p->p_retval[0], ksched, p)) - ); + + if (uap->pid != 0 && uap->pid != p->p_pid) { + e = p31b_proc(p, uap->pid, &targetp); + if (e) + return e; + } else + targetp = p; + + e = ksched_getscheduler(&p->p_retval[0], ksched, targetp); return e; }