Commit 03b25817 authored by Hisham Muhammad's avatar Hisham Muhammad
Browse files

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.
parent 8c653212
......@@ -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) {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment