summaryrefslogtreecommitdiff
path: root/libps/spec.c
diff options
context:
space:
mode:
Diffstat (limited to 'libps/spec.c')
-rw-r--r--libps/spec.c51
1 files changed, 31 insertions, 20 deletions
diff --git a/libps/spec.c b/libps/spec.c
index e0358edd..da1e372a 100644
--- a/libps/spec.c
+++ b/libps/spec.c
@@ -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 <miles@gnu.org>
@@ -148,7 +148,7 @@ ps_get_wait (struct proc_stat *ps, char **wait, int *rpc)
const struct ps_getter ps_wait_getter =
{"wait", PSTAT_THREAD_WAIT, ps_get_wait};
-static int
+static size_t
ps_get_vsize (struct proc_stat *ps)
{
return proc_stat_task_basic_info (ps)->virtual_size;
@@ -156,7 +156,7 @@ ps_get_vsize (struct proc_stat *ps)
const struct ps_getter ps_vsize_getter =
{"vsize", PSTAT_TASK_BASIC, (vf) ps_get_vsize};
-static int
+static size_t
ps_get_rsize (struct proc_stat *ps)
{
return proc_stat_task_basic_info (ps)->resident_size;
@@ -232,7 +232,7 @@ const struct ps_getter ps_start_time_getter =
static float
ps_get_rmem_frac (struct proc_stat *ps)
{
- static int mem_size = 0;
+ static size_t mem_size = 0;
if (mem_size == 0)
{
@@ -397,16 +397,18 @@ ps_emit_num_blocks (struct proc_stat *ps, struct ps_fmt_field *field,
return ps_stream_write_field (stream, buf, field->width);
}
-int
+size_t
sprint_frac_value (char *buf,
- int value, int min_value_len,
- int frac, int frac_scale,
+ size_t value, int min_value_len,
+ size_t 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 @@ sprint_frac_value (char *buf,
frac /= 10;
if (frac_len > 0)
- sprintf (buf, "%d.%0*d", value, frac_len, frac);
+ sprintf (buf, "%zd.%0*zd", value, frac_len, frac);
else
- sprintf (buf, "%d", value);
+ sprintf (buf, "%zd", value);
return strlen (buf);
}
@@ -449,13 +451,13 @@ ps_emit_percent (struct proc_stat *ps, struct ps_fmt_field *field,
/* 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_size_t (struct proc_stat *ps, struct ps_fmt_field *field,
+ struct ps_stream *stream)
{
char buf[20];
- int value = FG (field, int)(ps);
+ size_t value = FG (field, size_t)(ps);
char *sfx = " KMG";
- int frac = 0;
+ size_t frac = 0;
while (value >= 1024)
{
@@ -801,7 +803,7 @@ ps_cmp_ints (struct proc_stat *ps1, struct proc_stat *ps2,
int (*gf)() = G (getter, int);
int v1 = gf(ps1), v2 = gf (ps2);
return v1 == v2 ? 0 : v1 < v2 ? -1 : 1;
-}
+}
int
ps_cmp_floats (struct proc_stat *ps1, struct proc_stat *ps2,
@@ -810,7 +812,16 @@ ps_cmp_floats (struct proc_stat *ps1, struct proc_stat *ps2,
float (*gf)() = G (getter, float);
float v1 = gf(ps1), v2 = gf (ps2);
return v1 == v2 ? 0 : v1 < v2 ? -1 : 1;
-}
+}
+
+int
+ps_cmp_size_ts (struct proc_stat *ps1, struct proc_stat *ps2,
+ const struct ps_getter *getter)
+{
+ size_t (*gf)() = G (getter, size_t);
+ size_t v1 = gf(ps1), v2 = gf (ps2);
+ return v1 == v2 ? 0 : v1 < v2 ? -1 : 1;
+}
int
ps_cmp_uids (struct proc_stat *ps1, struct proc_stat *ps2,
@@ -1105,9 +1116,9 @@ static const struct ps_fmt_spec specs[] =
{"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_size_t,ps_cmp_size_ts, 0},
{"RSize", 0, -5, -1, 0,
- &ps_rsize_getter, ps_emit_nice_int,ps_cmp_ints, 0},
+ &ps_rsize_getter, ps_emit_nice_size_t,ps_cmp_size_ts, 0},
{"Pri", 0, -3, -1, 0,
&ps_cur_priority_getter,ps_emit_priority,ps_cmp_ints, ps_nominal_pri},
{"BPri", 0, -3, -1, 0,