From 74afca7bc10ece0964720be0b59c8353e66e2576 Mon Sep 17 00:00:00 2001 From: Benny Baumann Date: Wed, 6 Oct 2021 00:00:55 +0200 Subject: Validate meter configuration before proceeding --- Settings.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/Settings.c b/Settings.c index 9b545a19..1f13b5a3 100644 --- a/Settings.c +++ b/Settings.c @@ -61,6 +61,29 @@ static void Settings_readMeterModes(Settings* this, const char* line, unsigned i this->hColumns[column].modes = modes; } +static bool Settings_validateMeters(Settings* this) { + const size_t colCount = HeaderLayout_getColumns(this->hLayout); + + for (size_t column = 0; column < colCount; column++) { + char** names = this->hColumns[column].names; + const int* modes = this->hColumns[column].modes; + const size_t len = this->hColumns[column].len; + + if (!names || !modes || !len) + return false; + + // Check for each mode there is an entry with a non-NULL name + for (size_t meterIdx = 0; meterIdx < len; meterIdx++) + if (!names[meterIdx]) + return false; + + if (names[len]) + return false; + } + + return true; +} + static void Settings_defaultMeters(Settings* this, unsigned int initialCpuCount) { int sizes[] = { 3, 3 }; @@ -313,7 +336,7 @@ static bool Settings_read(Settings* this, const char* fileName, unsigned int ini String_freeArray(option); } fclose(fd); - if (!didReadMeters) { + if (!didReadMeters || !Settings_validateMeters(this)) { Settings_defaultMeters(this, initialCpuCount); } return didReadAny; -- cgit v1.2.3