summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Nocera <hadess@hadess.net>2003-10-20 20:41:16 +0000
committerBastien Nocera <hadess@src.gnome.org>2003-10-20 20:41:16 +0000
commit33fb22edd351c50884b273b39d1ba54835420e58 (patch)
tree6891542ca8a3bd9605686cf861b3dcc7b4fa30d1
parentb2283f7c79c0291901c1ea616190e4befd544767 (diff)
downloadlibgtop-33fb22edd351c50884b273b39d1ba54835420e58.tar.gz
committing patch from Sebastien Bacher <seb128@debian.org> for Linux 2.6
2003-10-20 Bastien Nocera <hadess@hadess.net> * glibtop_server.h: * mem.c: (glibtop_get_mem_s): * swap.c: (glibtop_get_swap_s): committing patch from Sebastien Bacher <seb128@debian.org> for Linux 2.6 support (Closes: #104747)
-rw-r--r--sysdeps/linux/ChangeLog7
-rw-r--r--sysdeps/linux/glibtop_server.h19
-rw-r--r--sysdeps/linux/mem.c22
-rw-r--r--sysdeps/linux/swap.c12
4 files changed, 40 insertions, 20 deletions
diff --git a/sysdeps/linux/ChangeLog b/sysdeps/linux/ChangeLog
index df858368..d1d1b3bf 100644
--- a/sysdeps/linux/ChangeLog
+++ b/sysdeps/linux/ChangeLog
@@ -1,5 +1,12 @@
2003-10-20 Bastien Nocera <hadess@hadess.net>
+ * glibtop_server.h:
+ * mem.c: (glibtop_get_mem_s):
+ * swap.c: (glibtop_get_swap_s): committing patch from Sebastien
+ Bacher <seb128@debian.org> for Linux 2.6 support (Closes: #104747)
+
+2003-10-20 Bastien Nocera <hadess@hadess.net>
+
* cpu.c: (glibtop_get_cpu_s):
* procmap.c: (glibtop_get_proc_map_s): s/u_int64_t/guint64/
diff --git a/sysdeps/linux/glibtop_server.h b/sysdeps/linux/glibtop_server.h
index 924747e7..4ff62746 100644
--- a/sysdeps/linux/glibtop_server.h
+++ b/sysdeps/linux/glibtop_server.h
@@ -57,6 +57,25 @@ skip_line (const char *p)
return (char *) ++p;
}
+static inline unsigned long
+get_scaled(const char *buffer, const char *key)
+{
+ const char *ptr;
+ char *next;
+ unsigned long value = 0;
+
+ if ((ptr = strstr(buffer, key)))
+ {
+ ptr += strlen(key);
+ value = strtoul(ptr, &next, 0);
+ if (strchr(next, 'k'))
+ value *= 1024;
+ else if (strchr(next, 'M'))
+ value *= 1024 * 1024;
+ }
+ return value;
+}
+
static inline int
proc_file_to_buffer (char *buffer, const char *fmt, pid_t pid)
{
diff --git a/sysdeps/linux/mem.c b/sysdeps/linux/mem.c
index 53b0f6a8..50062c32 100644
--- a/sysdeps/linux/mem.c
+++ b/sysdeps/linux/mem.c
@@ -65,17 +65,13 @@ glibtop_get_mem_s (glibtop *server, glibtop_mem *buf)
buffer [len] = '\0';
- p = skip_line (buffer);
- p = skip_token (p); /* "Mem:" */
-
- buf->total = strtoul (p, &p, 0);
- buf->used = strtoul (p, &p, 0);
- buf->free = strtoul (p, &p, 0);
- buf->shared = strtoul (p, &p, 0);
- buf->buffer = strtoul (p, &p, 0);
- buf->cached = strtoul (p, &p, 0);
-
- buf->user = buf->total - buf->free - buf->cached - buf->buffer;
-
- buf->flags = _glibtop_sysdeps_mem;
+ buf->total = get_scaled(buffer, "MemTotal:");
+ buf->used = get_scaled(buffer, "Active:");
+ buf->free = get_scaled(buffer, "MemFree:");
+ buf->shared = get_scaled(buffer, "Mapped:");
+ buf->buffer = get_scaled(buffer, "Buffers:");
+ buf->cached = get_scaled(buffer, "Cached:");
+
+ buf->user = buf->total - buf->free - buf->cached - buf->buffer;
+ buf->flags = _glibtop_sysdeps_mem;
}
diff --git a/sysdeps/linux/swap.c b/sysdeps/linux/swap.c
index 2a7d639b..70e5bb61 100644
--- a/sysdeps/linux/swap.c
+++ b/sysdeps/linux/swap.c
@@ -70,13 +70,11 @@ glibtop_get_swap_s (glibtop *server, glibtop_swap *buf)
buffer [len] = '\0';
- p = skip_line (buffer);
- p = skip_line (p);
- p = skip_token (p); /* "Swap:" */
-
- buf->total = strtoul (p, &p, 0);
- buf->used = strtoul (p, &p, 0);
- buf->free = strtoul (p, &p, 0);
+ /* Kernel 2.6 with multiple lines */
+
+ buf->total = get_scaled(buffer, "SwapTotal:");
+ buf->free = get_scaled(buffer, "SwapFree:");
+ buf->used = buf->total - buf->free;
buf->flags = _glibtop_sysdeps_swap;