diff --git a/sysdeps/linux/glibtop_server.h b/sysdeps/linux/glibtop_server.h index 50b18f31..e96b1169 100644 --- a/sysdeps/linux/glibtop_server.h +++ b/sysdeps/linux/glibtop_server.h @@ -69,10 +69,11 @@ proc_file_to_buffer (char *buffer, const char *fmt, pid_t pid) if (fd < 0) return -1; len = read (fd, buffer, BUFSIZ-1); - if (len < 0) return -1; - close (fd); + if (len < 0) + return -1; + buffer [len] = '\0'; return 0; diff --git a/sysdeps/linux/netload.c b/sysdeps/linux/netload.c index f8b1c8ec..75cd1ab6 100644 --- a/sysdeps/linux/netload.c +++ b/sysdeps/linux/netload.c @@ -290,7 +290,10 @@ glibtop_get_netload_s (glibtop *server, glibtop_netload *buf, } /* Should never happen. */ - if (fields < 2) return; + if (fields < 2) { + fclose (f); + return; + } fields--; while (fgets (buffer, BUFSIZ-1, f)) { diff --git a/sysdeps/linux/procargs.c b/sysdeps/linux/procargs.c index 9473c3e1..5436bbdb 100644 --- a/sysdeps/linux/procargs.c +++ b/sysdeps/linux/procargs.c @@ -60,6 +60,8 @@ glibtop_get_proc_args_s (glibtop *server, glibtop_proc_args *buf, retval = glibtop_malloc_r (server, max_len+1); len = read (cmdline, retval, max_len); + close (cmdline); + if (len < 0) { glibtop_free_r (server, retval); return NULL; @@ -76,6 +78,7 @@ glibtop_get_proc_args_s (glibtop *server, glibtop_proc_args *buf, while (1) { len = read (cmdline, buffer, BUFSIZ-1); if (len < 0) { + close (cmdline); glibtop_free_r (server, retval); return NULL; }