diff --git a/.gitignore b/.gitignore index 63dec343..4b36b554 100644 --- a/.gitignore +++ b/.gitignore @@ -58,6 +58,7 @@ doc/texinfo.tex doc/version.texi examples/affinity examples/df +examples/disk examples/diskio examples/first examples/free diff --git a/examples/Makefile.am b/examples/Makefile.am index e2b72115..84e074e5 100644 --- a/examples/Makefile.am +++ b/examples/Makefile.am @@ -11,7 +11,7 @@ AM_LDFLAGS = $(LIBGTOP_EXTRA_LIBS) noinst_PROGRAMS = first second pprint procargs df netlist \ mountlist procmap netload sysdeps timings \ - openfiles smp proclist free wd affinity diskio sysinfo + openfiles smp proclist free wd affinity disk diskio sysinfo first_SOURCES = first.c first_LDADD = $(top_builddir)/lib/libgtop-2.0.la diff --git a/sysdeps/linux/disk.c b/sysdeps/linux/disk.c index 89acd686..bafd346f 100644 --- a/sysdeps/linux/disk.c +++ b/sysdeps/linux/disk.c @@ -235,7 +235,7 @@ glibtop_get_disk_s (glibtop *server, glibtop_disk *buf) file_to_buffer (server, buffer, sizeof buffer, FILENAME); - get_from_pipe (map_buffer, CMD_PIPE); + get_from_pipe (map_buffer, STAT_BUFSIZ, CMD_PIPE); /* * GLOBAL diff --git a/sysdeps/linux/glibtop_private.c b/sysdeps/linux/glibtop_private.c index 7bca42a5..18cb7a6e 100644 --- a/sysdeps/linux/glibtop_private.c +++ b/sysdeps/linux/glibtop_private.c @@ -58,17 +58,15 @@ skip_token (const char *p) void -get_from_pipe (char *buffer, const char *cmd) +get_from_pipe (char *buffer, const size_t bufsiz, const char *cmd) { FILE* fp; - long psize; fp = popen (cmd, "r"); - fseek (fp, 0, SEEK_END); - psize = ftell (fp); - fseek (fp, 0, SEEK_SET); - fread(buffer,1,psize,fp); + size_t psize = fread(buffer,1,bufsiz,fp); + if (psize == bufsiz) + g_warning("Read bufsiz bytes, there may be more"); pclose (fp); } diff --git a/sysdeps/linux/glibtop_private.h b/sysdeps/linux/glibtop_private.h index 39101163..b9b7b9fc 100644 --- a/sysdeps/linux/glibtop_private.h +++ b/sysdeps/linux/glibtop_private.h @@ -62,7 +62,7 @@ skip_line (const char *p) } void -get_from_pipe (char *buffer, const char *cmd); +get_from_pipe (char *buffer, const size_t bufsiz, const char *cmd); /* * Smart strtoul which handles binary suffixes