diff options
Diffstat (limited to 'sysdeps/linux/glibtop_server.c')
-rw-r--r-- | sysdeps/linux/glibtop_server.c | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/sysdeps/linux/glibtop_server.c b/sysdeps/linux/glibtop_server.c index 73075036..a33d39db 100644 --- a/sysdeps/linux/glibtop_server.c +++ b/sysdeps/linux/glibtop_server.c @@ -1,17 +1,23 @@ +#include <glibtop.h> + +#include <glib.h> + #include <string.h> #include <stdlib.h> +#include <fcntl.h> + + unsigned long long get_scaled(const char *buffer, const char *key) { const char *ptr; char *next; - const size_t len = strlen(key); unsigned long long value = 0; if ((ptr = strstr(buffer, key))) { - ptr += len; + ptr += strlen(key); value = strtoull(ptr, &next, 0); if (strchr(next, 'k')) value *= 1024; @@ -21,3 +27,26 @@ get_scaled(const char *buffer, const char *key) return value; } + +int +proc_file_to_buffer (char *buffer, const char *fmt, pid_t pid) +{ + char filename [256]; + int fd; + ssize_t len; + + g_snprintf (filename, sizeof filename, fmt, pid); + + fd = open (filename, O_RDONLY); + if (fd < 0) return -1; + + len = read (fd, buffer, BUFSIZ-1); + close (fd); + + if (len < 0) return -1; + + buffer [len] = '\0'; + + return 0; +} + |