diff --git a/CPUMeter.c b/CPUMeter.c index ef01e0ff..561f5132 100644 --- a/CPUMeter.c +++ b/CPUMeter.c @@ -68,18 +68,24 @@ static void CPUMeter_updateValues(Meter* this, char* buffer, int size) { /* Initial frequency is in KHz. Divide it by 1000 till it's less than 1000, and emit unit accordingly */ double cpuFrequency = this->values[CPU_METER_FREQUENCY]; char unit = 'K'; - if (cpuFrequency > 1000) { - cpuFrequency /= 1000; - unit = 'M'; - } - if (cpuFrequency > 1000) { - cpuFrequency /= 1000; - unit = 'G'; + char cpuFrequencyBuffer[16]; + if (cpuFrequency < 0) { + xSnprintf(cpuFrequencyBuffer, sizeof(cpuFrequencyBuffer), "N/A"); + } else { + if (cpuFrequency > 1000) { + cpuFrequency /= 1000; + unit = 'M'; + } + if (cpuFrequency > 1000) { + cpuFrequency /= 1000; + unit = 'G'; + } + xSnprintf(cpuFrequencyBuffer, 15, "%.3f%cHz", cpuFrequency, unit); } if (this->pl->settings->showCPUUsage) { - xSnprintf(buffer, size, "%5.1f%% %.3f%cHz", percent, cpuFrequency, unit); + xSnprintf(buffer, size, "%5.1f%% %s", percent, cpuFrequencyBuffer); } else { - xSnprintf(buffer, size, "%.3f%cHz", cpuFrequency, unit); + xSnprintf(buffer, size, "%s", cpuFrequencyBuffer); } } else if (this->pl->settings->showCPUUsage) { xSnprintf(buffer, size, "%5.1f%%", percent); diff --git a/linux/Platform.c b/linux/Platform.c index e92d0c51..fc81d3bf 100644 --- a/linux/Platform.c +++ b/linux/Platform.c @@ -193,10 +193,10 @@ double Platform_setCPUValues(Meter* this, int cpu) { percent = CLAMP(percent, 0.0, 100.0); if (isnan(percent)) percent = 0.0; - v[CPU_METER_FREQUENCY] = 0; + v[CPU_METER_FREQUENCY] = -1; if (this->pl->settings->showCPUFrequency) { - char filename[63+1]; - xSnprintf(filename, 63, "/sys/devices/system/cpu/cpu%d/cpufreq/scaling_cur_freq", cpu - 1); + char filename[64]; + xSnprintf(filename, sizeof(filename), "/sys/devices/system/cpu/cpu%d/cpufreq/scaling_cur_freq", cpu - 1); FILE* fd = fopen(filename, "r"); if (fd) { unsigned int cpuFrequency;