diff --git a/driver_menu.h b/driver_menu.h index 0a2db438b8..7640097d7b 100644 --- a/driver_menu.h +++ b/driver_menu.h @@ -21,7 +21,6 @@ #include #include "boolean.h" #include "file_list.h" -#include "core_info.h" #ifdef __cplusplus extern "C" { @@ -88,8 +87,6 @@ typedef struct bool msg_force; bool push_start_screen; - core_info_list_t *core_info; - core_info_t *core_info_current; bool defer_core; char deferred_path[PATH_MAX]; diff --git a/frontend/menu/backend/menu_common_backend.c b/frontend/menu/backend/menu_common_backend.c index a23e71aef9..f5496d7f56 100644 --- a/frontend/menu/backend/menu_common_backend.c +++ b/frontend/menu/backend/menu_common_backend.c @@ -1948,7 +1948,7 @@ static int menu_action_ok(const char *dir, if (driver.menu->defer_core) { const core_info_t *info = NULL; - int ret = rarch_defer_core(info, driver.menu->core_info, + int ret = rarch_defer_core(info, g_extern.core_info, dir, path, driver.menu->deferred_path, sizeof(driver.menu->deferred_path)); diff --git a/frontend/menu/disp/lakka.c b/frontend/menu/disp/lakka.c index ea4ed2bde5..d6446281fa 100644 --- a/frontend/menu/disp/lakka.c +++ b/frontend/menu/disp/lakka.c @@ -869,7 +869,7 @@ static void lakka_context_reset(void *data) fill_pathname_join(iconpath, themepath, icon_dir, sizeof(iconpath)); fill_pathname_slash(iconpath, sizeof(iconpath)); - info_list = (core_info_list_t*)menu->core_info; + info_list = (core_info_list_t*)g_extern.core_info; info = NULL; if (info_list) @@ -1024,21 +1024,10 @@ static int lakka_input_postprocess(uint64_t old_state) static void lakka_init_core_info(void *data) { - core_info_list_t *core; - menu_handle_t *menu = (menu_handle_t*)data; + (void)data; - core_info_list_free(menu->core_info); - menu->core_info = NULL; - - menu->core_info = (core_info_list_t*) - core_info_list_new(*g_settings.libretro_directory ? - g_settings.libretro_directory : "/usr/lib/libretro"); - - if (menu->core_info) - { - core = (core_info_list_t*)menu->core_info; - num_categories = menu->core_info ? core->count + 1 : 1; - } + if (g_extern.core_info) + num_categories = g_extern.core_info->count + 1; } static void *lakka_init(void) @@ -1063,7 +1052,7 @@ static void *lakka_init(void) core_info_list_t *info_list; menu_category_t *category = (menu_category_t*)&categories[i]; - info_list = (core_info_list_t*)menu->core_info; + info_list = (core_info_list_t*)g_extern.core_info; info = NULL; if (info_list) diff --git a/frontend/menu/disp/rgui.c b/frontend/menu/disp/rgui.c index 49ce58e67c..ee8072353c 100644 --- a/frontend/menu/disp/rgui.c +++ b/frontend/menu/disp/rgui.c @@ -574,16 +574,6 @@ void rgui_set_texture(void *data) menu_framebuf, false, menu->width, menu->height, 1.0f); } -static void rgui_init_core_info(void *data) -{ - menu_handle_t *menu = (menu_handle_t*)data; - - core_info_list_free(menu->core_info); - menu->core_info = NULL; - if (*g_settings.libretro_directory) - menu->core_info = core_info_list_new(g_settings.libretro_directory); -} - const menu_ctx_driver_t menu_ctx_rgui = { rgui_set_texture, rgui_render_messagebox, @@ -607,7 +597,7 @@ const menu_ctx_driver_t menu_ctx_rgui = { NULL, NULL, NULL, - rgui_init_core_info, + NULL, &menu_ctx_backend_common, "rgui", }; diff --git a/frontend/menu/disp/rmenu.c b/frontend/menu/disp/rmenu.c index 89b0d0a690..a15163464a 100644 --- a/frontend/menu/disp/rmenu.c +++ b/frontend/menu/disp/rmenu.c @@ -445,16 +445,6 @@ static int rmenu_input_postprocess(uint64_t old_state) return 0; } -static void rmenu_init_core_info(void *data) -{ - menu_handle_t *menu = (menu_handle_t*)data; - - core_info_list_free(menu->core_info); - menu->core_info = NULL; - if (*g_settings.libretro_directory) - menu->core_info = core_info_list_new(g_settings.libretro_directory); -} - const menu_ctx_driver_t menu_ctx_rmenu = { rmenu_set_texture, rmenu_render_messagebox, @@ -478,7 +468,7 @@ const menu_ctx_driver_t menu_ctx_rmenu = { NULL, NULL, NULL, - rmenu_init_core_info, + NULL, &menu_ctx_backend_common, "rmenu", }; diff --git a/frontend/menu/disp/rmenu_xui.cpp b/frontend/menu/disp/rmenu_xui.cpp index 35b5f83031..ecd767a06c 100644 --- a/frontend/menu/disp/rmenu_xui.cpp +++ b/frontend/menu/disp/rmenu_xui.cpp @@ -640,16 +640,6 @@ static void rmenu_xui_list_set_selection(void *data) XuiListSetCurSel(m_menulist, file_list_get_directory_ptr(list)); } -static void rmenu_xui_init_core_info(void *data) -{ - menu_handle_t *menu = (menu_handle_t*)data; - - core_info_list_free(menu->core_info); - menu->core_info = NULL; - if (*g_settings.libretro_directory) - menu->core_info = core_info_list_new(g_settings.libretro_directory); -} - const menu_ctx_driver_t menu_ctx_rmenu_xui = { NULL, rmenu_xui_render_messagebox, @@ -673,7 +663,7 @@ const menu_ctx_driver_t menu_ctx_rmenu_xui = { rmenu_xui_list_delete, rmenu_xui_list_clear, rmenu_xui_list_set_selection, - rmenu_xui_init_core_info, + NULL, &menu_ctx_backend_common, "rmenu_xui", }; diff --git a/frontend/menu/menu_common.c b/frontend/menu/menu_common.c index 0b5b579ce0..daa374874a 100644 --- a/frontend/menu/menu_common.c +++ b/frontend/menu/menu_common.c @@ -28,15 +28,15 @@ void menu_update_system_info(menu_handle_t *menu, bool *load_no_content) libretro_get_system_info(g_settings.libretro, &menu->info, load_no_content); #endif - if (menu->core_info) + if (g_extern.core_info) { /* Keep track of info for the currently selected core. */ - if (core_info_list_get_info(menu->core_info, - menu->core_info_current, g_settings.libretro)) + if (core_info_list_get_info(g_extern.core_info, + g_extern.core_info_current, g_settings.libretro)) { const core_info_t *info = (const core_info_t*) - menu->core_info_current; + g_extern.core_info_current; RARCH_LOG("[Core Info]:\n"); if (info->display_name) @@ -95,10 +95,9 @@ static void load_menu_content_prepare(void) } content_playlist_push(g_extern.history, - *g_extern.fullpath ? g_extern.fullpath : NULL, + g_extern.fullpath, g_settings.libretro, - driver.menu->info.library_name ? - driver.menu->info.library_name : ""); + driver.menu->info.library_name); } /* redraw menu frame */ @@ -133,10 +132,10 @@ static void menu_update_libretro_info(menu_handle_t *menu) retro_get_system_info(&menu->info); #endif - core_info_list_free(menu->core_info); - menu->core_info = NULL; + core_info_list_free(g_extern.core_info); + g_extern.core_info = NULL; if (*g_settings.libretro_directory) - menu->core_info = core_info_list_new(g_settings.libretro_directory); + g_extern.core_info = core_info_list_new(g_settings.libretro_directory); menu_update_system_info(menu, NULL); } @@ -208,7 +207,7 @@ void *menu_init(const void *data) menu->menu_stack = (file_list_t*)calloc(1, sizeof(file_list_t)); menu->selection_buf = (file_list_t*)calloc(1, sizeof(file_list_t)); - menu->core_info_current = (core_info_t*)calloc(1, sizeof(core_info_t)); + g_extern.core_info_current = (core_info_t*)calloc(1, sizeof(core_info_t)); #ifdef HAVE_SHADER_MANAGER menu->shader = (struct gfx_shader*)calloc(1, sizeof(struct gfx_shader)); #endif @@ -263,11 +262,11 @@ void menu_free(void *data) rarch_main_command(RARCH_CMD_HISTORY_DEINIT); - if (menu->core_info) - core_info_list_free(menu->core_info); + if (g_extern.core_info) + core_info_list_free(g_extern.core_info); - if (menu->core_info_current) - free(menu->core_info_current); + if (g_extern.core_info_current) + free(g_extern.core_info_current); free(data); } diff --git a/frontend/menu/menu_entries.c b/frontend/menu/menu_entries.c index 3b1c646ad8..ea0ecfca29 100644 --- a/frontend/menu/menu_entries.c +++ b/frontend/menu/menu_entries.c @@ -183,7 +183,7 @@ int menu_entries_push_list(menu_handle_t *menu, { const core_info_t *info = NULL; file_list_clear(list); - core_info_list_get_supported_cores(driver.menu->core_info, + core_info_list_get_supported_cores(g_extern.core_info, driver.menu->deferred_path, &info, &list_size); for (i = 0; i < list_size; i++) { @@ -313,7 +313,7 @@ int menu_entries_push_list(menu_handle_t *menu, break; case MENU_SETTINGS_CORE_INFO: { - core_info_t *info = (core_info_t*)menu->core_info_current; + core_info_t *info = (core_info_t*)g_extern.core_info_current; file_list_clear(list); if (info->data) @@ -352,7 +352,8 @@ int menu_entries_push_list(menu_handle_t *menu, if (info->firmware_count > 0) { - core_info_list_update_missing_firmware(menu->core_info, info->path, + core_info_list_update_missing_firmware( + g_extern.core_info, info->path, g_settings.system_directory); file_list_push(list, "Firmware: ", "", @@ -725,8 +726,8 @@ int menu_parse_and_resolve(file_list_t *list, file_list_t *menu_list) else if (menu_common_type_is(menu_type) == MENU_FILE_DIRECTORY) exts = ""; /* we ignore files anyway */ else if (driver.menu->defer_core) - exts = driver.menu->core_info ? core_info_list_get_all_extensions( - driver.menu->core_info) : ""; + exts = g_extern.core_info ? core_info_list_get_all_extensions( + g_extern.core_info) : ""; else if (driver.menu->info.valid_extensions) { exts = ext_buf; @@ -795,8 +796,8 @@ int menu_parse_and_resolve(file_list_t *list, file_list_t *menu_list) fill_pathname_join(core_path, dir, path, sizeof(core_path)); - if (driver.menu->core_info && - core_info_list_get_display_name(driver.menu->core_info, + if (g_extern.core_info && + core_info_list_get_display_name(g_extern.core_info, core_path, display_name, sizeof(display_name))) file_list_set_alt_at_offset(list, i, display_name); } diff --git a/general.h b/general.h index 933b244bc7..c3bf2814ff 100644 --- a/general.h +++ b/general.h @@ -32,6 +32,7 @@ #include "audio/dsp_filter.h" #include "compat/strl.h" #include "core_options.h" +#include "core_info.h" #include "miscellaneous.h" #include "gfx/filter.h" @@ -411,6 +412,8 @@ struct global struct string_list *temporary_content; content_playlist_t *history; + core_info_list_t *core_info; + core_info_t *core_info_current; uint32_t content_crc; diff --git a/retroarch.c b/retroarch.c index 4795b82b4f..0b63f6b0d5 100644 --- a/retroarch.c +++ b/retroarch.c @@ -3437,6 +3437,10 @@ void rarch_main_command(unsigned cmd) g_extern.history = NULL; break; case RARCH_CMD_CORE_INFO_INIT: + core_info_list_free(g_extern.core_info); + g_extern.core_info = NULL; + if (*g_settings.libretro_directory) + g_extern.core_info = core_info_list_new(g_settings.libretro_directory); #ifdef HAVE_MENU if (driver.menu_ctx && driver.menu_ctx->init_core_info) driver.menu_ctx->init_core_info(driver.menu); diff --git a/settings_data.c b/settings_data.c index 188ed8ac9b..1a531b0753 100644 --- a/settings_data.c +++ b/settings_data.c @@ -1948,7 +1948,7 @@ rarch_setting_t *setting_data_get_mainmenu(bool regenerate) { CONFIG_BOOL(lists[1], "history_list", "Load Content (History)", false, "...", "...", GROUP_NAME, SUBGROUP_NAME, general_write_handler, general_read_handler) } - if (driver.menu && driver.menu->core_info && core_info_list_num_info_files(driver.menu->core_info)) + if (driver.menu && g_extern.core_info && core_info_list_num_info_files(g_extern.core_info)) { CONFIG_BOOL(lists[2], "detect_core_list", "Load Content (Detect Core)", false, "...", "...", GROUP_NAME, SUBGROUP_NAME, general_write_handler, general_read_handler) }