Hi,
I had noticed that ps and pptop would show the virtual size of some of my processes to be some large negative number, which seems wrong, so here is the patch I use to get only positive number for the resident size and the virtual size. James A. Morrison 2002-05-26 James A. Morrison <[EMAIL PROTECTED]> * spec.c (sprint_frac_value): Added case for values between 1000 and 1023. (sprint_frac_value): Make VALUE and FRAC unsigned ints. (ps_emit_nice_uint): Likewise. (ps_emit_nice_uint): Renamed ps_emit_nice_int. (ps_vsize_getter): Return an unsigned int instead of an int. (ps_rsize_getter): Likewise. (ps_get_rmem_frac): MEM_SIZE is now an unsigned int. (specs): Use ps_emit_nice_uint instead of ps_emit_nice_int. Index: spec.c =================================================================== RCS file: /cvsroot/hurd/hurd/libps/spec.c,v retrieving revision 1.33 diff -u -r1.33 spec.c --- spec.c 22 Dec 2001 20:32:57 -0000 1.33 +++ spec.c 26 May 2002 19:53:55 -0000 @@ -1,6 +1,6 @@ /* Access, formatting, & comparison routines for printing process info. - Copyright (C) 1995,96,97,99,2001 Free Software Foundation, Inc. + Copyright (C) 1995,96,97,99,2001,02 Free Software Foundation, Inc. Written by Miles Bader <[EMAIL PROTECTED]> @@ -148,7 +148,7 @@ const struct ps_getter ps_wait_getter = {"wait", PSTAT_THREAD_WAIT, ps_get_wait}; -static int +static unsigned int ps_get_vsize (struct proc_stat *ps) { return proc_stat_task_basic_info (ps)->virtual_size; @@ -156,7 +156,7 @@ const struct ps_getter ps_vsize_getter = {"vsize", PSTAT_TASK_BASIC, (vf) ps_get_vsize}; -static int +static unsigned int ps_get_rsize (struct proc_stat *ps) { return proc_stat_task_basic_info (ps)->resident_size; @@ -232,7 +232,7 @@ static float ps_get_rmem_frac (struct proc_stat *ps) { - static int mem_size = 0; + static unsigned int mem_size = 0; if (mem_size == 0) { @@ -399,14 +399,16 @@ int sprint_frac_value (char *buf, - int value, int min_value_len, - int frac, int frac_scale, + unsigned int value, int min_value_len, + unsigned int frac, int frac_scale, int width) { - int value_len; - int frac_len; + int value_len = 0; + int frac_len = 0; - if (value >= 100) /* the integer part */ + if (value >= 1000) /* the integer part */ + value_len = 4; /* values 1000-1023 */ + if (value >= 100) value_len = 3; else if (value >= 10) value_len = 2; @@ -422,9 +424,9 @@ frac /= 10; if (frac_len > 0) - sprintf (buf, "%d.%0*d", value, frac_len, frac); + sprintf (buf, "%u.%0*u", value, frac_len, frac); else - sprintf (buf, "%d", value); + sprintf (buf, "%u", value); return strlen (buf); } @@ -449,13 +451,13 @@ /* prints its value nicely */ error_t -ps_emit_nice_int (struct proc_stat *ps, struct ps_fmt_field *field, - struct ps_stream *stream) +ps_emit_nice_uint (struct proc_stat *ps, struct ps_fmt_field *field, + struct ps_stream *stream) { char buf[20]; - int value = FG (field, int)(ps); + unsigned int value = FG (field, unsigned int)(ps); char *sfx = " KMG"; - int frac = 0; + unsigned int frac = 0; while (value >= 1024) { @@ -1105,9 +1107,9 @@ {"STime", 0, -8, 2, 0, &ps_sys_time_getter, ps_emit_seconds, ps_cmp_times, 0}, {"VSize", 0, -5, -1, 0, - &ps_vsize_getter, ps_emit_nice_int,ps_cmp_ints, 0}, + &ps_vsize_getter, ps_emit_nice_uint,ps_cmp_ints, 0}, {"RSize", 0, -5, -1, 0, - &ps_rsize_getter, ps_emit_nice_int,ps_cmp_ints, 0}, + &ps_rsize_getter, ps_emit_nice_uint,ps_cmp_ints, 0}, {"Pri", 0, -3, -1, 0, &ps_cur_priority_getter,ps_emit_priority,ps_cmp_ints, ps_nominal_pri}, {"BPri", 0, -3, -1, 0, _______________________________________________ Bug-hurd mailing list [EMAIL PROTECTED] http://mail.gnu.org/mailman/listinfo/bug-hurd