From owner-svn-src-all@FreeBSD.ORG Thu Mar 24 20:27:35 2011 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 1233) id 9709A1065689; Thu, 24 Mar 2011 20:27:35 +0000 (UTC) Date: Thu, 24 Mar 2011 20:27:35 +0000 From: Alexander Best To: Edward Tomasz Napierala Message-ID: <20110324202735.GA79089@freebsd.org> References: <201103242015.p2OKFgjL056208@svn.freebsd.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <201103242015.p2OKFgjL056208@svn.freebsd.org> Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: 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:27:35 -0000 On Thu Mar 24 11, Edward Tomasz Napierala wrote: > 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]". nice. maybe you could also take a look at these cases: 1) ps -wlu is not honouring -w 2) ps -lud is not honouring -d 3) ps(1) doesn't mention that -X is the default cheers. alex > > 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)); > +} -- a13x