Module Name: src Committed By: christos Date: Mon Dec 12 20:35:36 UTC 2016
Modified Files: src/bin/ps: print.c Log Message: Handle functions that use the offset from either kinfo_proc2/kinfo_lwp properly. To generate a diff of this commit: cvs rdiff -u -r1.126 -r1.127 src/bin/ps/print.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/bin/ps/print.c diff -u src/bin/ps/print.c:1.126 src/bin/ps/print.c:1.127 --- src/bin/ps/print.c:1.126 Fri Dec 2 16:59:03 2016 +++ src/bin/ps/print.c Mon Dec 12 15:35:36 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: print.c,v 1.126 2016/12/02 21:59:03 christos Exp $ */ +/* $NetBSD: print.c,v 1.127 2016/12/12 20:35:36 christos Exp $ */ /* * Copyright (c) 2000, 2007 The NetBSD Foundation, Inc. @@ -63,7 +63,7 @@ #if 0 static char sccsid[] = "@(#)print.c 8.6 (Berkeley) 4/16/94"; #else -__RCSID("$NetBSD: print.c,v 1.126 2016/12/02 21:59:03 christos Exp $"); +__RCSID("$NetBSD: print.c,v 1.127 2016/12/12 20:35:36 christos Exp $"); #endif #endif /* not lint */ @@ -1342,17 +1342,16 @@ printval(void *bp, VAR *v, enum mode mod void pvar(struct pinfo *pi, VARENT *ve, enum mode mode) { - struct kinfo_proc2 *ki = pi->ki; - VAR *v; + VAR *v = ve->var; + char *b = (v->flag & LWP) ? (char *)pi->li : (char *)pi->ki; - v = ve->var; - if (v->flag & UAREA && !ki->p_uvalid) { + if ((v->flag & UAREA) && !pi->ki->p_uvalid) { if (mode == PRINTMODE) (void)printf("%*s", v->width, "-"); return; } - (void)printval((char *)ki + v->off, v, mode); + (void)printval(b + v->off, v, mode); } void @@ -1360,8 +1359,9 @@ putimeval(struct pinfo *pi, VARENT *ve, { VAR *v = ve->var; struct kinfo_proc2 *k = pi->ki; - ulong secs = *(uint32_t *)((char *)k + v->off); - ulong usec = *(uint32_t *)((char *)k + v->off + sizeof (uint32_t)); + char *b = (v->flag & LWP) ? (char *)pi->li : (char *)pi->ki; + ulong secs = *(uint32_t *)(b + v->off); + ulong usec = *(uint32_t *)(b + v->off + sizeof (uint32_t)); int fmtlen; if (!k->p_uvalid) {