summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Baulig <martin@src.gnome.org>1998-06-07 21:14:30 +0000
committerMartin Baulig <martin@src.gnome.org>1998-06-07 21:14:30 +0000
commitbe91463190323d9208bb64c682f8e3867dc81ff7 (patch)
tree6620c08d10d73af2faf7681602858708dcbbdb2e
parent28324c38cc08f5b9b9c05160800298cba49022df (diff)
downloadlibgtop-be91463190323d9208bb64c682f8e3867dc81ff7.tar.gz
More profiling stuff.
-rw-r--r--sysdeps/linux/cpu.c10
-rw-r--r--sysdeps/linux/glibtop_machine.h13
-rw-r--r--sysdeps/linux/loadavg.c9
-rw-r--r--sysdeps/linux/mem.c15
-rw-r--r--sysdeps/linux/swap.c11
5 files changed, 44 insertions, 14 deletions
diff --git a/sysdeps/linux/cpu.c b/sysdeps/linux/cpu.c
index 6dc68c6a..202a8476 100644
--- a/sysdeps/linux/cpu.c
+++ b/sysdeps/linux/cpu.c
@@ -35,7 +35,7 @@ static const unsigned long _glibtop_sysdeps_cpu =
void
glibtop_get_cpu_s (glibtop *server, glibtop_cpu *buf)
{
- char buffer [BUFSIZ];
+ char buffer [BUFSIZ], *tmp;
int fd = 0, ret;
glibtop_init_r (&server, 0, 0);
@@ -61,8 +61,12 @@ glibtop_get_cpu_s (glibtop *server, glibtop_cpu *buf)
glibtop_error_r (server, "read (%s): %s",
FILENAME, strerror (errno));
- sscanf (buffer, "cpu %lu %lu %lu %lu\n",
- &buf->user, &buf->nice, &buf->sys, &buf->idle);
+ tmp = strchr (buffer, '\n');
+ tmp = skip_token (tmp); /* "cpu" */
+ buf->user = strtoul (tmp, &tmp, 10);
+ buf->nice = strtoul (tmp, &tmp, 10);
+ buf->sys = strtoul (tmp, &tmp, 10);
+ buf->idle = strtoul (tmp, &tmp, 10);
buf->total = buf->user + buf->nice + buf->sys + buf->idle;
diff --git a/sysdeps/linux/glibtop_machine.h b/sysdeps/linux/glibtop_machine.h
index 600d562c..a1c789ed 100644
--- a/sysdeps/linux/glibtop_machine.h
+++ b/sysdeps/linux/glibtop_machine.h
@@ -24,9 +24,22 @@
#include <unistd.h>
#include <fcntl.h>
+#include <ctype.h>
__BEGIN_DECLS
+#if _IN_LIBGTOP
+
+static inline char *
+skip_token(const char *p)
+{
+ while (isspace(*p)) p++;
+ while (*p && !isspace(*p)) p++;
+ return (char *)p;
+}
+
+#endif
+
typedef struct _glibtop_machine glibtop_machine;
struct _glibtop_machine
diff --git a/sysdeps/linux/loadavg.c b/sysdeps/linux/loadavg.c
index 96565610..bb8b70e6 100644
--- a/sysdeps/linux/loadavg.c
+++ b/sysdeps/linux/loadavg.c
@@ -33,7 +33,7 @@ static const unsigned long _glibtop_sysdeps_loadavg =
void
glibtop_get_loadavg_s (glibtop *server, glibtop_loadavg *buf)
{
- char buffer [BUFSIZ];
+ char buffer [BUFSIZ], *tmp;
int fd = 0, ret;
glibtop_init_r (&server, 0, 0);
@@ -59,9 +59,10 @@ glibtop_get_loadavg_s (glibtop *server, glibtop_loadavg *buf)
glibtop_error_r (server, "read (%s): %s",
FILENAME, strerror (errno));
- sscanf (buffer, "%lf %lf %lf\n",
- &buf->loadavg [0], &buf->loadavg [1], &buf->loadavg [2]);
-
+ buf->loadavg [0] = strtod (buffer, &tmp);
+ buf->loadavg [1] = strtod (tmp, &tmp);
+ buf->loadavg [2] = strtod (tmp, &tmp);
+
#ifdef GLIBTOP_CACHE_OPEN
server->machine.fd_loadavg = fd;
#else
diff --git a/sysdeps/linux/mem.c b/sysdeps/linux/mem.c
index 41b54323..b53db6e2 100644
--- a/sysdeps/linux/mem.c
+++ b/sysdeps/linux/mem.c
@@ -36,7 +36,7 @@ static const unsigned long _glibtop_sysdeps_mem =
void
glibtop_get_mem_s (glibtop *server, glibtop_mem *buf)
{
- char buffer [BUFSIZ];
+ char buffer [BUFSIZ], *tmp;
int fd = 0, ret;
glibtop_init_r (&server, 0, 0);
@@ -62,9 +62,16 @@ glibtop_get_mem_s (glibtop *server, glibtop_mem *buf)
glibtop_error_r (server, "read (%s): %s",
FILENAME, strerror (errno));
- sscanf (buffer, "%*[^\n]\nMem: %lu %lu %lu %lu %lu %lu\n",
- &buf->total, &buf->used, &buf->free, &buf->shared,
- &buf->buffer, &buf->cached);
+ tmp = strchr (buffer, '\n');
+ tmp = skip_token (tmp); /* "Mem:" */
+ tmp = skip_token (tmp); /* total memory */
+
+ buf->total = strtoul (tmp, &tmp, 10);
+ buf->used = strtoul (tmp, &tmp, 10);
+ buf->free = strtoul (tmp, &tmp, 10);
+ buf->shared = strtoul (tmp, &tmp, 10);
+ buf->buffer = strtoul (tmp, &tmp, 10);
+ buf->cached = strtoul (tmp, &tmp, 10);
buf->user = buf->total - buf->free - buf->shared - buf->buffer;
diff --git a/sysdeps/linux/swap.c b/sysdeps/linux/swap.c
index fd8b29f7..24d44c06 100644
--- a/sysdeps/linux/swap.c
+++ b/sysdeps/linux/swap.c
@@ -34,7 +34,7 @@ static unsigned long _glibtop_sysdeps_swap =
void
glibtop_get_swap_s (glibtop *server, glibtop_swap *buf)
{
- char buffer [BUFSIZ];
+ char buffer [BUFSIZ], *tmp;
int fd = 0, ret;
glibtop_init_r (&server, 0, 0);
@@ -60,8 +60,13 @@ glibtop_get_swap_s (glibtop *server, glibtop_swap *buf)
glibtop_error_r (server, "read (%s): %s",
FILENAME, strerror (errno));
- sscanf (buffer, "%*[^\n]\n%*[^\n]\nSwap: %lu %lu %lu\n",
- &buf->total, &buf->used, &buf->free);
+ tmp = strchr (buffer, '\n');
+ tmp = strchr (tmp+1, '\n');
+
+ tmp = skip_token (tmp); /* "Swap:" */
+ buf->total = strtoul (tmp, &tmp, 10);
+ buf->used = strtoul (tmp, &tmp, 10);
+ buf->free = strtoul (tmp, &tmp, 10);
#ifdef GLIBTOP_CACHE_OPEN
server->machine.fd_meminfo = fd;