diff options
author | Benoît Dejean <bdejean@gmail.com> | 2017-01-28 09:39:43 +0100 |
---|---|---|
committer | Benoît Dejean <bdejean@gmail.com> | 2017-01-28 09:39:43 +0100 |
commit | 1a103bf142856ec129eb124d1dae70ddb3dd02e8 (patch) | |
tree | f8f61d343ee10553710071e122ab8caeb9fbd64f /sysdeps/linux | |
parent | 3ff313dd0322fe95db812aaf666eb57abc38069f (diff) | |
download | libgtop-1a103bf142856ec129eb124d1dae70ddb3dd02e8.tar.gz |
When parsing /proc/cpuinfo, ignore paragraphs that do not describe a CPU/core.
Diffstat (limited to 'sysdeps/linux')
-rw-r--r-- | sysdeps/linux/sysinfo.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/sysdeps/linux/sysinfo.c b/sysdeps/linux/sysinfo.c index 99d8fcc5..7dbd5eeb 100644 --- a/sysdeps/linux/sysinfo.c +++ b/sysdeps/linux/sysinfo.c @@ -50,13 +50,20 @@ init_sysinfo (glibtop *server) g_free(buffer); - for(sysinfo.ncpu = 0; - sysinfo.ncpu < GLIBTOP_NCPU && processors[sysinfo.ncpu] && *processors[sysinfo.ncpu]; - sysinfo.ncpu++) { + sysinfo.ncpu = 0; + for (char** this_proc = &processors[0]; *this_proc && **this_proc; this_proc++) { + + if (sysinfo.ncpu >= GLIBTOP_NCPU) { + glibtop_warn_r(server, "Cannot deal with more than %d CPUs", GLIBTOP_NCPU); + break; + } gchar **parts, **p; - if (g_strrstr (processors[sysinfo.ncpu], "processor" ) == NULL) - continue; + if (g_strrstr (*this_proc, "processor" ) == NULL) { + /* skip unknown paragraph */ + continue; + } + glibtop_entry * const cpuinfo = &sysinfo.cpuinfo[sysinfo.ncpu]; cpuinfo->labels = g_ptr_array_new (); @@ -68,7 +75,7 @@ init_sysinfo (glibtop *server) g_free, g_free); /* "<key> : <value>" */ - parts = g_strsplit_set(processors[sysinfo.ncpu], ":\n", 0); + parts = g_strsplit_set(*this_proc, ":\n", 0); for(p = parts; *p && *(p+1); p += 2) { @@ -89,6 +96,7 @@ init_sysinfo (glibtop *server) g_free(parts); + sysinfo.ncpu++; } g_strfreev(processors); |