From 03b2581745daed28d4f155728889642da522b653 Mon Sep 17 00:00:00 2001 From: Hisham Muhammad Date: Sun, 18 Feb 2018 20:35:23 -0300 Subject: [PATCH] Only consider a read successful when the file seems valid Require at least the `fields` entry to be present, so we can have a decent guess that it was indeed a settings file. --- Settings.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/Settings.c b/Settings.c index fdef9566..098902b4 100644 --- a/Settings.c +++ b/Settings.c @@ -172,7 +172,8 @@ static bool Settings_read(Settings* this, const char* fileName) { if (!fd) return false; - bool readMeters = false; + bool didReadMeters = false; + bool didReadFields = false; for (;;) { char* line = String_readLine(fd); if (!line) { @@ -187,6 +188,7 @@ static bool Settings_read(Settings* this, const char* fileName) { } if (String_eq(option[0], "fields")) { readFields(this->fields, &(this->flags), option[1]); + didReadFields = true; } else if (String_eq(option[0], "sort_key")) { // This "+1" is for compatibility with the older enum format. this->sortKey = atoi(option[1]) + 1; @@ -232,24 +234,24 @@ static bool Settings_read(Settings* this, const char* fileName) { if (this->colorScheme < 0 || this->colorScheme >= LAST_COLORSCHEME) this->colorScheme = 0; } else if (String_eq(option[0], "left_meters")) { Settings_readMeters(this, option[1], 0); - readMeters = true; + didReadMeters = true; } else if (String_eq(option[0], "right_meters")) { Settings_readMeters(this, option[1], 1); - readMeters = true; + didReadMeters = true; } else if (String_eq(option[0], "left_meter_modes")) { Settings_readMeterModes(this, option[1], 0); - readMeters = true; + didReadMeters = true; } else if (String_eq(option[0], "right_meter_modes")) { Settings_readMeterModes(this, option[1], 1); - readMeters = true; + didReadMeters = true; } String_freeArray(option); } fclose(fd); - if (!readMeters) { + if (!didReadMeters) { Settings_defaultMeters(this); } - return true; + return didReadFields; } static void writeFields(FILE* fd, ProcessField* fields, const char* name) {