diff --git a/src/debug.c b/src/debug.c index 2069c042e225a6ca1a2aa89bf5e60b3efecd0237..616d111cbc8f88e52f890bad25063b6c1666313a 100644 --- a/src/debug.c +++ b/src/debug.c @@ -470,27 +470,31 @@ void getProcMemUse(long *size, long *resident, long *share, long *trs, /* Open the file. */ FILE *file = fopen("/proc/self/statm", "r"); if (file != NULL) { - fscanf(file, "%ld %ld %ld %ld %ld %ld %ld", size, resident, share, - trs, lrs, drs, dt); - - /* Convert pages into bytes. Usually 4096, but could be 512 on some - * systems so take care in conversion to KB. */ - long sz = sysconf(_SC_PAGESIZE); - *size *= sz; - *resident *= sz; - *share *= sz; - *trs *= sz; - *lrs *= sz; - *drs *= sz; - *dt *= sz; - - *size /= 1024; - *resident /= 1024; - *share /= 1024; - *trs /= 1024; - *lrs /= 1024; - *drs /= 1024; - *dt /= 1024; + int nscan = fscanf(file, "%ld %ld %ld %ld %ld %ld %ld", size, resident, + share, trs, lrs, drs, dt); + + if (nscan == 7) { + /* Convert pages into bytes. Usually 4096, but could be 512 on some + * systems so take care in conversion to KB. */ + long sz = sysconf(_SC_PAGESIZE); + *size *= sz; + *resident *= sz; + *share *= sz; + *trs *= sz; + *lrs *= sz; + *drs *= sz; + *dt *= sz; + + *size /= 1024; + *resident /= 1024; + *share /= 1024; + *trs /= 1024; + *lrs /= 1024; + *drs /= 1024; + *dt /= 1024; + } else { + error("Failed to read sufficient fields from /proc/self/statm"); + } fclose(file); } else { error("Failed to open /proc/self/statm");