X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fdisk.c;h=0095777fbc4df0c3c428f6f107c3382440927264;hb=0a2172433970559cc70821e64778ce88a76b040c;hp=51a50fd1e7c782d6d00ab12be68fbcc42bbfbe85;hpb=85d892df2794d992c8e3554d8990d1306f114c11;p=collectd.git diff --git a/src/disk.c b/src/disk.c index 51a50fd1..0095777f 100644 --- a/src/disk.c +++ b/src/disk.c @@ -120,6 +120,9 @@ static struct gmesh geom_tree; /* #endif KERNEL_FREEBSD */ #elif HAVE_LIBKSTAT +#if HAVE_KSTAT_H +#include +#endif #define MAX_NUMDISK 1024 extern kstat_ctl_t *kc; static kstat_t *ksp[MAX_NUMDISK]; @@ -694,7 +697,9 @@ static int disk_read(void) { numfields = strsplit(buffer, fields, 32); - if ((numfields != (14 + fieldshift)) && (numfields != 7)) + /* need either 7 fields (partition) + * or at least 14 fields (15 on Linux 2.4) */ + if ((numfields != 7) && (numfields < (14 + fieldshift))) continue; minor = atoll(fields[1]); @@ -728,7 +733,8 @@ static int disk_read(void) { read_sectors = atoll(fields[4]); write_ops = atoll(fields[5]); write_sectors = atoll(fields[6]); - } else if (numfields == (14 + fieldshift)) { + } else { + assert(numfields >= (14 + fieldshift)); read_ops = atoll(fields[3 + fieldshift]); write_ops = atoll(fields[7 + fieldshift]); @@ -747,9 +753,6 @@ static int disk_read(void) { io_time = atof(fields[12 + fieldshift]); weighted_time = atof(fields[13 + fieldshift]); } - } else { - DEBUG("numfields = %i; => unknown file format.", numfields); - continue; } {