diff --git a/command.c b/command.c index 805c5c6a0b..5f79d17da5 100644 --- a/command.c +++ b/command.c @@ -1448,8 +1448,8 @@ static bool command_event_save_core_config(void) } /* Infer file name based on libretro core. */ - if (!string_is_empty(settings->path.libretro) - && path_file_exists(settings->path.libretro)) + if (!string_is_empty(config_get_active_core_path()) + && path_file_exists(config_get_active_core_path())) { unsigned i; RARCH_LOG("%s\n", msg_hash_to_str(MSG_USING_CORE_NAME_FOR_NEW_CONFIG)); @@ -1461,7 +1461,7 @@ static bool command_event_save_core_config(void) fill_pathname_base_noext( config_name, - settings->path.libretro, + config_get_active_core_path(), sizeof(config_name)); fill_pathname_join(config_path, config_dir, config_name, @@ -1791,17 +1791,17 @@ bool command_event(enum event_command cmd, void *data) core_info_ctx_find_t info_find; #if defined(HAVE_DYNAMIC) - if (string_is_empty(settings->path.libretro)) + if (string_is_empty(config_get_active_core_path())) return false; libretro_get_system_info( - settings->path.libretro, + config_get_active_core_path(), system, ptr); #else libretro_get_system_info_static(system, ptr); #endif - info_find.path = settings->path.libretro; + info_find.path = config_get_active_core_path(); if (!core_info_load(&info_find)) return false; diff --git a/configuration.c b/configuration.c index dda554e8df..1490e1d598 100644 --- a/configuration.c +++ b/configuration.c @@ -3146,6 +3146,22 @@ const char *config_get_active_core_path(void) return settings->path.libretro; } +void config_set_active_core_path(const char *path) +{ + settings_t *settings = config_get_ptr(); + if (!settings) + return; + strlcpy(settings->path.libretro, path, sizeof(settings->path.libretro)); +} + +void config_clear_active_core_path(void) +{ + settings_t *settings = config_get_ptr(); + if (!settings) + return; + *settings->path.libretro = '\0'; +} + const char *config_get_active_path(void) { settings_t *settings = config_get_ptr(); diff --git a/configuration.h b/configuration.h index bc561e5a60..a00df65372 100644 --- a/configuration.h +++ b/configuration.h @@ -600,6 +600,10 @@ const char *config_get_active_path(void); const char *config_get_active_core_path(void); +void config_set_active_core_path(const char *path); + +void config_clear_active_core_path(void); + void config_free_state(void); settings_t *config_get_ptr(void); diff --git a/dynamic.c b/dynamic.c index 5d74c15e68..d6b4f6d4e6 100644 --- a/dynamic.c +++ b/dynamic.c @@ -322,7 +322,7 @@ static void load_dynamic_core(void) retroarch_fail(1, "init_libretro_sym()"); } - if (string_is_empty(settings->path.libretro)) + if (string_is_empty(config_get_active_core_path())) { RARCH_ERR("RetroArch is built for dynamic libretro cores, but " "libretro_path is not set. Cannot continue.\n"); @@ -335,12 +335,12 @@ static void load_dynamic_core(void) path_resolve_realpath(settings->path.libretro, sizeof(settings->path.libretro)); RARCH_LOG("Loading dynamic libretro core from: \"%s\"\n", - settings->path.libretro); - lib_handle = dylib_load(settings->path.libretro); + config_get_active_core_path()); + lib_handle = dylib_load(config_get_active_core_path()); if (!lib_handle) { RARCH_ERR("Failed to open libretro core: \"%s\"\n", - settings->path.libretro); + config_get_active_core_path()); RARCH_ERR("Error(s): %s\n", dylib_error()); retroarch_fail(1, "load_dynamic()"); } diff --git a/frontend/drivers/platform_linux.c b/frontend/drivers/platform_linux.c index 0a70f3032d..b0e811b93a 100644 --- a/frontend/drivers/platform_linux.c +++ b/frontend/drivers/platform_linux.c @@ -1872,10 +1872,8 @@ static bool frontend_linux_set_fork(enum frontend_fork fork_mode) { char executable_path[PATH_MAX_LENGTH] = {0}; - settings_t *settings = config_get_ptr(); - fill_pathname_application_path(executable_path, sizeof(executable_path)); - strlcpy(settings->path.libretro, executable_path, sizeof(settings->path.libretro)); + config_set_active_core_path(executable_path); } command_event(CMD_EVENT_QUIT, NULL); break; diff --git a/gfx/common/win32_common.cpp b/gfx/common/win32_common.cpp index 03ae0b08ca..31cea3715e 100644 --- a/gfx/common/win32_common.cpp +++ b/gfx/common/win32_common.cpp @@ -236,10 +236,6 @@ static int win32_drag_query_file(HWND hwnd, WPARAM wparam) content_ctx_info_t content_info = {0}; core_info_list_t *core_info_list = NULL; const core_info_t *core_info = NULL; - settings_t *settings = config_get_ptr(); - - if (!settings) - return 0; DragQueryFile((HDROP)wparam, 0, szFilename, 1024); @@ -253,7 +249,7 @@ static int win32_drag_query_file(HWND hwnd, WPARAM wparam) runloop_ctl(RUNLOOP_CTL_SET_CONTENT_PATH,szFilename); - if (!string_is_empty(settings->path.libretro)) + if (!string_is_empty(config_get_active_core_path())) { unsigned i; core_info_t *current_core = NULL; @@ -267,7 +263,7 @@ static int win32_drag_query_file(HWND hwnd, WPARAM wparam) if(!string_is_equal(info->systemname, current_core->systemname)) break; - if(string_is_equal(settings->path.libretro, info->path)) + if(string_is_equal(config_get_active_core_path(), info->path)) { /* Our previous core supports the current rom */ content_ctx_info_t content_info = {0}; @@ -318,7 +314,6 @@ static int win32_drag_query_file(HWND hwnd, WPARAM wparam) static LRESULT CALLBACK WndProcCommon(bool *quit, HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { - settings_t *settings = config_get_ptr(); if (message == WM_NCLBUTTONDBLCLK) doubleclick_on_titlebar = true; @@ -374,8 +369,11 @@ static LRESULT CALLBACK WndProcCommon(bool *quit, HWND hwnd, UINT message, *quit = true; break; case WM_COMMAND: - if (settings->ui.menubar_enable) - win32_menu_loop(main_window.hwnd, wparam); + { + settings_t *settings = config_get_ptr(); + if (settings->ui.menubar_enable) + win32_menu_loop(main_window.hwnd, wparam); + } break; } return 0; @@ -433,7 +431,6 @@ LRESULT CALLBACK WndProcGL(HWND hwnd, UINT message, { LRESULT ret; bool quit = false; - settings_t *settings = config_get_ptr(); if (message == WM_NCLBUTTONDBLCLK) doubleclick_on_titlebar = true; diff --git a/retroarch.c b/retroarch.c index c88c2e33cc..f46c50ea14 100644 --- a/retroarch.c +++ b/retroarch.c @@ -846,7 +846,7 @@ static void retroarch_parse_input(int argc, char *argv[]) case 'L': if (path_is_directory(optarg)) { - *settings->path.libretro = '\0'; + config_clear_active_core_path(); strlcpy(settings->directory.libretro, optarg, sizeof(settings->directory.libretro)); global->has_set.libretro = true; diff --git a/runloop.c b/runloop.c index d0bbaca836..6ee95c8a33 100644 --- a/runloop.c +++ b/runloop.c @@ -741,7 +741,6 @@ static bool runloop_is_frame_count_end(void) bool runloop_ctl(enum runloop_ctl_state state, void *data) { - settings_t *settings = config_get_ptr(); switch (state) { @@ -910,10 +909,7 @@ bool runloop_ctl(enum runloop_ctl_state state, void *data) const char *fullpath = (const char*)data; if (!fullpath) return false; - strlcpy( - settings->path.libretro, - fullpath, - sizeof(settings->path.libretro)); + config_set_active_core_path(fullpath); } break; case RUNLOOP_CTL_CLEAR_CONTENT_PATH: @@ -1056,9 +1052,11 @@ bool runloop_ctl(enum runloop_ctl_state state, void *data) break; case RUNLOOP_CTL_TASK_INIT: { - bool threaded_enable = false; #ifdef HAVE_THREADS - threaded_enable = settings->threaded_data_runloop_enable; + settings_t *settings = config_get_ptr(); + bool threaded_enable = settings->threaded_data_runloop_enable; +#else + bool threaded_enable = false; #endif task_queue_ctl(TASK_QUEUE_CTL_DEINIT, NULL); task_queue_ctl(TASK_QUEUE_CTL_INIT, &threaded_enable); @@ -1134,6 +1132,7 @@ bool runloop_ctl(enum runloop_ctl_state state, void *data) bool ret = false; char buf[PATH_MAX_LENGTH] = {0}; global_t *global = global_get_ptr(); + settings_t *settings = config_get_ptr(); const char *options_path = settings->path.core_options; const struct retro_variable *vars = (const struct retro_variable*)data; diff --git a/tasks/task_content.c b/tasks/task_content.c index bb29142850..c572063a54 100644 --- a/tasks/task_content.c +++ b/tasks/task_content.c @@ -810,7 +810,7 @@ static void content_push_to_history_playlist(bool do_push, playlist_push(g_defaults.history, path, NULL, - settings->path.libretro, + config_get_active_core_path(), info->library_name, NULL, NULL); @@ -1572,8 +1572,8 @@ static void menu_content_environment_get(int *argc, char *argv[], if (fullpath && *fullpath) wrap_args->content_path = fullpath; if (!global->has_set.libretro) - wrap_args->libretro_path = *settings->path.libretro - ? settings->path.libretro : NULL; + wrap_args->libretro_path = string_is_empty(config_get_active_core_path()) ? NULL : + config_get_active_core_path(); } #endif