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
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to