diff --git a/libretro-common/file/config_file.c b/libretro-common/file/config_file.c index 471ee6fcb2..d4a0535dbd 100644 --- a/libretro-common/file/config_file.c +++ b/libretro-common/file/config_file.c @@ -989,34 +989,40 @@ void config_set_string(config_file_t *conf, const char *key, const char *val) if (!conf || !key || !val) return; - last = (conf->guaranteed_no_duplicates && conf->last) ? - conf->last : conf->entries; - entry = conf->guaranteed_no_duplicates ? - NULL : config_get_entry(conf, key, &last); + last = conf->entries; - if (entry) + if (conf->guaranteed_no_duplicates) { - /* An entry corresponding to 'key' already exists - * > Check if it's read only */ - if (entry->readonly) - return; - - /* Check whether value is currently set */ - if (entry->value) + if (conf->last) + last = conf->last; + } + else + { + entry = config_get_entry(conf, key, &last); + if (entry) { - /* Do nothing if value is unchanged */ - if (string_is_equal(entry->value, val)) + /* An entry corresponding to 'key' already exists + * > Check if it's read only */ + if (entry->readonly) return; - /* Value is to be updated - * > Free existing */ - free(entry->value); - } + /* Check whether value is currently set */ + if (entry->value) + { + /* Do nothing if value is unchanged */ + if (string_is_equal(entry->value, val)) + return; - /* Update value */ - entry->value = strdup(val); - conf->modified = true; - return; + /* Value is to be updated + * > Free existing */ + free(entry->value); + } + + /* Update value */ + entry->value = strdup(val); + conf->modified = true; + return; + } } /* Entry corresponding to 'key' does not exist