From owner-svn-src-all@FreeBSD.ORG Thu Mar 24 20:15:43 2011 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DEFC1106566B; Thu, 24 Mar 2011 20:15:42 +0000 (UTC) (envelope-from trasz@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id CDFE98FC15; Thu, 24 Mar 2011 20:15:42 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2OKFgbJ056212; Thu, 24 Mar 2011 20:15:42 GMT (envelope-from trasz@svn.freebsd.org) Received: (from trasz@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2OKFgjL056208; Thu, 24 Mar 2011 20:15:42 GMT (envelope-from trasz@svn.freebsd.org) Message-Id: <201103242015.p2OKFgjL056208@svn.freebsd.org> From: Edward Tomasz Napierala Date: Thu, 24 Mar 2011 20:15:42 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r219972 - head/bin/ps X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 24 Mar 2011 20:15:43 -0000 Author: trasz Date: Thu Mar 24 20:15:42 2011 New Revision: 219972 URL: http://svn.freebsd.org/changeset/base/219972 Log: Add proper width calculation for time fields (time, cputime and usertime). This fixes the ugly overflow in "ps aux" output for "[idle]". Modified: head/bin/ps/extern.h head/bin/ps/keyword.c head/bin/ps/print.c Modified: head/bin/ps/extern.h ============================================================================== --- head/bin/ps/extern.h Thu Mar 24 19:50:34 2011 (r219971) +++ head/bin/ps/extern.h Thu Mar 24 20:15:42 2011 (r219972) @@ -74,12 +74,15 @@ void rgroupname(KINFO *, VARENT *); void runame(KINFO *, VARENT *); void rvar(KINFO *, VARENT *); int s_comm(KINFO *); +int s_cputime(KINFO *); int s_label(KINFO *); int s_loginclass(KINFO *); int s_logname(KINFO *); int s_rgroupname(KINFO *); int s_runame(KINFO *); +int s_systime(KINFO *); int s_uname(KINFO *); +int s_usertime(KINFO *); void showkey(void); void started(KINFO *, VARENT *); void state(KINFO *, VARENT *); Modified: head/bin/ps/keyword.c ============================================================================== --- head/bin/ps/keyword.c Thu Mar 24 19:50:34 2011 (r219971) +++ head/bin/ps/keyword.c Thu Mar 24 20:15:42 2011 (r219972) @@ -189,12 +189,14 @@ static VAR var[] = { UINT, UIDFMT, 0}, {"svuid", "SVUID", NULL, 0, kvar, NULL, UIDLEN, KOFF(ki_svuid), UINT, UIDFMT, 0}, - {"systime", "SYSTIME", NULL, USER, systime, NULL, 9, 0, CHAR, NULL, 0}, + {"systime", "SYSTIME", NULL, USER|DSIZ, systime, s_systime, 15, 0, CHAR, + NULL, 0}, {"tdaddr", "TDADDR", NULL, 0, kvar, NULL, sizeof(void *) * 2, KOFF(ki_tdaddr), KPTR, "lx", 0}, {"tdev", "TDEV", NULL, 0, tdev, NULL, 5, 0, CHAR, NULL, 0}, {"tdnam", "TDNAM", NULL, LJUST, tdnam, NULL, COMMLEN, 0, CHAR, NULL, 0}, - {"time", "TIME", NULL, USER, cputime, NULL, 9, 0, CHAR, NULL, 0}, + {"time", "TIME", NULL, USER|DSIZ, cputime, s_cputime, 15, 0, CHAR, + NULL, 0}, {"tpgid", "TPGID", NULL, 0, kvar, NULL, 4, KOFF(ki_tpgid), UINT, PIDFMT, 0}, {"tsid", "TSID", NULL, 0, kvar, NULL, PIDLEN, KOFF(ki_tsid), UINT, @@ -211,8 +213,8 @@ static VAR var[] = { KOFF(ki_paddr), KPTR, "lx", 0}, {"user", "USER", NULL, LJUST|DSIZ, uname, s_uname, USERLEN, 0, CHAR, NULL, 0}, - {"usertime", "USERTIME", NULL, USER, usertime, NULL, 9, 0, CHAR, NULL, - 0}, + {"usertime", "USERTIME", NULL, USER|DSIZ, usertime, s_usertime, 15, 0, + CHAR, NULL, 0}, {"usrpri", "", "upr", 0, NULL, NULL, 0, 0, CHAR, NULL, 0}, {"vsize", "", "vsz", 0, NULL, NULL, 0, 0, CHAR, NULL, 0}, {"vsz", "VSZ", NULL, 0, vsize, NULL, 6, 0, CHAR, NULL, 0}, Modified: head/bin/ps/print.c ============================================================================== --- head/bin/ps/print.c Thu Mar 24 19:50:34 2011 (r219971) +++ head/bin/ps/print.c Thu Mar 24 20:15:42 2011 (r219972) @@ -570,11 +570,20 @@ printtime(KINFO *k, VARENT *ve, long sec secs += psecs / 100; psecs = psecs % 100; } - (void)snprintf(obuff, sizeof(obuff), "%3ld:%02ld%c%02ld", + (void)snprintf(obuff, sizeof(obuff), "%ld:%02ld%c%02ld", secs / 60, secs % 60, decimal_point, psecs); (void)printf("%*s", v->width, obuff); } +static int +sizetime(long secs) +{ + + if (secs < 60) + return (7); + return (log10(secs / 60) + 7); +} + void cputime(KINFO *k, VARENT *ve) { @@ -930,6 +939,17 @@ s_comm(KINFO *k) } int +s_cputime(KINFO *k) +{ + long secs; + + secs = k->ki_p->ki_runtime / 1000000; + if (sumrusage) + secs += k->ki_p->ki_childtime.tv_sec; + return (sizetime(secs)); +} + +int s_label(KINFO *k) { char *string = NULL; @@ -975,3 +995,25 @@ s_logname(KINFO *k) return (strlen(s)); } + +int +s_systime(KINFO *k) +{ + long secs; + + secs = k->ki_p->ki_rusage.ru_stime.tv_sec; + if (sumrusage) + secs += k->ki_p->ki_childstime.tv_sec; + return (sizetime(secs)); +} + +int +s_usertime(KINFO *k) +{ + long secs; + + secs = k->ki_p->ki_rusage.ru_utime.tv_sec; + if (sumrusage) + secs += k->ki_p->ki_childutime.tv_sec; + return (sizetime(secs)); +}