diff --git a/src/settings.cpp b/src/settings.cpp index 982835ca20..ad2c637351 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -2265,7 +2265,7 @@ static void GRFSaveConfig(IniFile &ini, const char *grpname, const GRFConfig *li } /* Common handler for saving/loading variables to the configuration file */ -static void HandleSettingDescs(IniFile &generic_ini, IniFile &private_ini, IniFile &secrets_ini, SettingDescProc *proc, SettingDescProcList *proc_list, bool only_startup = false) +static void HandleSettingDescs(IniFile &generic_ini, SettingDescProc *proc, SettingDescProcList *proc_list, bool only_startup = false) { proc(generic_ini, _misc_settings, "misc", nullptr, only_startup); #if defined(_WIN32) && !defined(DEDICATED) @@ -2277,16 +2277,18 @@ static void HandleSettingDescs(IniFile &generic_ini, IniFile &private_ini, IniFi for (auto &table : _generic_setting_tables) { proc(generic_ini, table, "patches", &_settings_newgame, only_startup); } - for (auto &table : _private_setting_tables) { - proc(private_ini, table, "patches", &_settings_newgame, only_startup); - } - for (auto &table : _secrets_setting_tables) { - proc(secrets_ini, table, "patches", &_settings_newgame, only_startup); - } proc(generic_ini, _currency_settings, "currency", &_custom_currency, only_startup); proc(generic_ini, _company_settings, "company", &_settings_client.company, only_startup); +} + +static void HandlePrivateSettingDescs(IniFile &private_ini, SettingDescProc *proc, SettingDescProcList *proc_list, bool only_startup = false) +{ + for (auto &table : _private_setting_tables) { + proc(private_ini, table, "patches", &_settings_newgame, only_startup); + } + if (!only_startup) { proc_list(private_ini, "server_bind_addresses", _network_bind_list); proc_list(private_ini, "servers", _network_host_list); @@ -2294,6 +2296,13 @@ static void HandleSettingDescs(IniFile &generic_ini, IniFile &private_ini, IniFi } } +static void HandleSecretsSettingDescs(IniFile &secrets_ini, SettingDescProc *proc, SettingDescProcList *proc_list, bool only_startup = false) +{ + for (auto &table : _secrets_setting_tables) { + proc(secrets_ini, table, "patches", &_settings_newgame, only_startup); + } +} + /** * Remove all entries from a settings table from an ini-file. * @@ -2334,11 +2343,15 @@ void LoadFromConfig(bool startup) IniFileVersion generic_version = LoadVersionFromConfig(generic_ini); + HandleSettingDescs(generic_ini, IniLoadSettings, IniLoadSettingList, startup); + /* Before the split of private/secrets, we have to look in the generic for these settings. */ if (generic_version < IFV_PRIVATE_SECRETS) { - HandleSettingDescs(generic_ini, generic_ini, generic_ini, IniLoadSettings, IniLoadSettingList, startup); + HandlePrivateSettingDescs(generic_ini, IniLoadSettings, IniLoadSettingList, startup); + HandleSecretsSettingDescs(generic_ini, IniLoadSettings, IniLoadSettingList, startup); } else { - HandleSettingDescs(generic_ini, private_ini, secrets_ini, IniLoadSettings, IniLoadSettingList, startup); + HandlePrivateSettingDescs(private_ini, IniLoadSettings, IniLoadSettingList, startup); + HandleSecretsSettingDescs(secrets_ini, IniLoadSettings, IniLoadSettingList, startup); } /* Load basic settings only during bootstrap, load other settings not during bootstrap */ @@ -2464,7 +2477,9 @@ void SaveToConfig() } } - HandleSettingDescs(generic_ini, private_ini, secrets_ini, IniSaveSettings, IniSaveSettingList); + HandleSettingDescs(generic_ini, IniSaveSettings, IniSaveSettingList); + HandlePrivateSettingDescs(private_ini, IniSaveSettings, IniSaveSettingList); + HandleSecretsSettingDescs(secrets_ini, IniSaveSettings, IniSaveSettingList); GRFSaveConfig(generic_ini, "newgrf", _grfconfig_newgame); GRFSaveConfig(generic_ini, "newgrf-static", _grfconfig_static); AISaveConfig(generic_ini, "ai_players");