diff --git a/audio/audio_driver.c b/audio/audio_driver.c index b4372fc957..fc8c1bba1e 100644 --- a/audio/audio_driver.c +++ b/audio/audio_driver.c @@ -316,9 +316,9 @@ static void audio_driver_mixer_deinit(void) } #endif -bool audio_driver_deinit(void *settings_data) +bool audio_driver_deinit(void) { - settings_t *settings = (settings_t*)settings_data; + settings_t *settings = config_get_ptr(); #ifdef HAVE_AUDIOMIXER audio_driver_mixer_deinit(); #endif @@ -758,7 +758,7 @@ bool audio_driver_init_internal( return true; error: - return audio_driver_deinit(settings); + return audio_driver_deinit(); } void audio_driver_sample(int16_t left, int16_t right) diff --git a/audio/audio_driver.h b/audio/audio_driver.h index e6279b17af..768d62ffac 100644 --- a/audio/audio_driver.h +++ b/audio/audio_driver.h @@ -351,7 +351,7 @@ bool audio_driver_init_internal( void *settings_data, bool audio_cb_inited); -bool audio_driver_deinit(void *settings_data); +bool audio_driver_deinit(void); bool audio_driver_find_driver( void *settings_data, diff --git a/configuration.c b/configuration.c index ee06d81499..f407649dcd 100644 --- a/configuration.c +++ b/configuration.c @@ -783,6 +783,13 @@ static void config_parse_file(global_t *global); struct defaults g_defaults; +static settings_t *config_st = NULL; + +settings_t *config_get_ptr(void) +{ + return config_st; +} + /** * config_get_default_audio: * @@ -2365,7 +2372,7 @@ void config_set_defaults(void *data) static bool first_initialized = true; #endif global_t *global = (global_t*)data; - settings_t *settings = config_get_ptr(); + settings_t *settings = config_st; int bool_settings_size = sizeof(settings->bools) / sizeof(settings->bools.placeholder); int float_settings_size = sizeof(settings->floats) / sizeof(settings->floats.placeholder); int int_settings_size = sizeof(settings->ints) / sizeof(settings->ints.placeholder); @@ -3777,7 +3784,7 @@ bool config_load_override(void *data) system->info.library_name : NULL; const char *rarch_path_basename = path_get(RARCH_PATH_BASENAME); const char *game_name = path_basename(rarch_path_basename); - settings_t *settings = config_get_ptr(); + settings_t *settings = config_st; if (!string_is_empty(rarch_path_basename)) fill_pathname_parent_dir_name(content_dir_name, @@ -3935,7 +3942,7 @@ bool config_unload_override(void) retroarch_override_setting_unset(RARCH_OVERRIDE_SETTING_SAVE_PATH, NULL); if (!config_load_file(global_get_ptr(), - path_get(RARCH_PATH_CONFIG), config_get_ptr())) + path_get(RARCH_PATH_CONFIG), config_st)) return false; RARCH_LOG("[Overrides]: Configuration overrides unloaded, original configuration restored.\n"); @@ -3978,7 +3985,7 @@ bool config_load_remap(const char *directory_input_remapping, const char *rarch_path_basename = path_get(RARCH_PATH_BASENAME); const char *game_name = path_basename(rarch_path_basename); enum msg_hash_enums msg_remap_loaded = MSG_GAME_REMAP_FILE_LOADED; - settings_t *settings = config_get_ptr(); + settings_t *settings = config_st; bool notification_show_remap_load = settings->bools.notification_show_remap_load; if (string_is_empty(core_name)) @@ -4097,7 +4104,7 @@ static void config_parse_file(global_t *global) RARCH_LOG("[Config]: Loading config from: \"%s\".\n", config_path); { - if (!config_load_file(global, config_path, config_get_ptr())) + if (!config_load_file(global, config_path, config_st)) { RARCH_ERR("[Config]: Couldn't find config at path: \"%s\".\n", config_path); @@ -4382,7 +4389,7 @@ bool config_save_autoconf_profile(const int32_t pid_user = 0; int32_t vid_user = 0; bool ret = false; - settings_t *settings = config_get_ptr(); + settings_t *settings = config_st; const char *autoconf_dir = settings->paths.directory_autoconfig; const char *joypad_driver_fallback = settings->arrays.input_joypad_driver; const char *joypad_driver = NULL; @@ -4506,7 +4513,7 @@ bool config_save_file(const char *path) struct config_array_setting *array_settings = NULL; struct config_path_setting *path_settings = NULL; config_file_t *conf = config_file_new_from_path_to_string(path); - settings_t *settings = config_get_ptr(); + settings_t *settings = config_st; global_t *global = global_get_ptr(); int bool_settings_size = sizeof(settings->bools) / sizeof(settings->bools.placeholder); int float_settings_size = sizeof(settings->floats)/ sizeof(settings->floats.placeholder); @@ -4742,7 +4749,7 @@ bool config_save_overrides(enum override_type type, void *data) char core_path[PATH_MAX_LENGTH]; char game_path[PATH_MAX_LENGTH]; char content_path[PATH_MAX_LENGTH]; - settings_t *overrides = config_get_ptr(); + settings_t *overrides = config_st; int bool_settings_size = sizeof(settings->bools) / sizeof(settings->bools.placeholder); int float_settings_size = sizeof(settings->floats) / sizeof(settings->floats.placeholder); int int_settings_size = sizeof(settings->ints) / sizeof(settings->ints.placeholder); @@ -5012,7 +5019,7 @@ bool input_remapping_load_file(void *data, const char *path) { unsigned i, j; config_file_t *conf = (config_file_t*)data; - settings_t *settings = config_get_ptr(); + settings_t *settings = config_st; global_t *global = global_get_ptr(); char key_strings[RARCH_FIRST_CUSTOM_BIND + 8][8] = { "b", "y", "select", "start", @@ -5153,7 +5160,7 @@ bool input_remapping_save_file(const char *path) "a", "x", "l", "r", "l2", "r2", "l3", "r3", "l_x+", "l_x-", "l_y+", "l_y-", "r_x+", "r_x-", "r_y+", "r_y-" }; config_file_t *conf = NULL; - settings_t *settings = config_get_ptr(); + settings_t *settings = config_st; unsigned max_users = settings->uints.input_max_users; const char *dir_input_remapping = settings->paths.directory_input_remapping; @@ -5656,7 +5663,6 @@ static uint16_t input_config_parse_hat(const char *dir) return 0; } - void input_config_parse_joy_button( char *s, void *data, const char *prefix, @@ -5715,3 +5721,17 @@ void input_config_parse_joy_button( bind->joykey_label = strdup(tmp_a->value); } } + +void config_deinit(void) +{ + if (config_st) + free(config_st); + config_st = NULL; +} + +void config_init(void) +{ + if (config_st) + return; + config_st = (settings_t*)calloc(1, sizeof(settings_t)); +} diff --git a/configuration.h b/configuration.h index a8881f4cd1..621e0027c3 100644 --- a/configuration.h +++ b/configuration.h @@ -1080,6 +1080,10 @@ void config_load_file_salamander(void); void config_save_file_salamander(void); #endif +void config_init(void); + +void config_deinit(void); + settings_t *config_get_ptr(void); #ifdef HAVE_LAKKA diff --git a/retroarch.c b/retroarch.c index 8ade412989..97a09f7a62 100644 --- a/retroarch.c +++ b/retroarch.c @@ -353,12 +353,6 @@ int content_get_subsystem(void) return runloop_state.content_st.pending_subsystem_id; } -settings_t *config_get_ptr(void) -{ - struct rarch_state *p_rarch = &rarch_st; - return p_rarch->configuration_settings; -} - global_t *global_get_ptr(void) { struct rarch_state *p_rarch = &rarch_st; @@ -8343,9 +8337,7 @@ void main_exit(void *args) global_free(p_rarch); task_queue_deinit(); - if (p_rarch->configuration_settings) - free(p_rarch->configuration_settings); - p_rarch->configuration_settings = NULL; + config_deinit(); ui_companion_driver_deinit(p_rarch); @@ -8413,7 +8405,7 @@ int rarch_main(int argc, char *argv[], void *data) command_event(CMD_EVENT_HISTORY_DEINIT, NULL); rarch_favorites_deinit(); - p_rarch->configuration_settings = (settings_t*)calloc(1, sizeof(settings_t)); + config_init(); retroarch_deinit_drivers(p_rarch, &runloop_st->retro_ctx); retroarch_ctl(RARCH_CTL_STATE_FREE, NULL); @@ -8458,9 +8450,7 @@ int rarch_main(int argc, char *argv[], void *data) return 1; } - ui_companion_driver_init_first(p_rarch->configuration_settings, - p_rarch); - + ui_companion_driver_init_first(p_rarch); #if !defined(HAVE_MAIN) || defined(HAVE_QT) for (;;) { @@ -12677,10 +12667,9 @@ static void ui_companion_driver_toggle( #endif } -static void ui_companion_driver_init_first( - settings_t *settings, - struct rarch_state *p_rarch) +static void ui_companion_driver_init_first(struct rarch_state *p_rarch) { + settings_t *settings = config_get_ptr(); #ifdef HAVE_QT bool desktop_menu_enable = settings->bools.desktop_menu_enable; bool ui_companion_toggle = settings->bools.ui_companion_toggle; @@ -15496,7 +15485,7 @@ static void driver_uninit(struct rarch_state *p_rarch, int flags) } if (flags & DRIVER_AUDIO_MASK) - audio_driver_deinit(p_rarch->configuration_settings); + audio_driver_deinit(); if ((flags & DRIVER_VIDEO_MASK)) video_st->data = NULL; diff --git a/retroarch_data.h b/retroarch_data.h index 2d9e51b980..f73407eba6 100644 --- a/retroarch_data.h +++ b/retroarch_data.h @@ -545,7 +545,6 @@ struct rarch_state const wifi_driver_t *wifi_driver; void *wifi_data; - settings_t *configuration_settings; #ifdef HAVE_NETWORKING /* Used while Netplay is running */ netplay_t *netplay_data; diff --git a/retroarch_fwd_decls.h b/retroarch_fwd_decls.h index ff62fc37da..e4ad513d05 100644 --- a/retroarch_fwd_decls.h +++ b/retroarch_fwd_decls.h @@ -65,9 +65,7 @@ static bool init_libretro_symbols( struct retro_core_t *current_core); static void ui_companion_driver_deinit(struct rarch_state *p_rarch); -static void ui_companion_driver_init_first( - settings_t *settings, - struct rarch_state *p_rarch); +static void ui_companion_driver_init_first(struct rarch_state *p_rarch); static void driver_uninit(struct rarch_state *p_rarch, int flags);