diff --git a/file_list.c b/file_list.c index d8929c41f0..d3403b0eb2 100644 --- a/file_list.c +++ b/file_list.c @@ -157,7 +157,9 @@ void *file_list_get_actiondata_at_offset(const file_list_t *list, size_t index) void *file_list_get_last_actiondata(const file_list_t *list) { - return list->list[list->size - 1].actiondata; + if (list) + return list->list[list->size - 1].actiondata; + return NULL; } void file_list_get_at_offset(const file_list_t *list, size_t index, diff --git a/frontend/menu/backend/menu_common_backend.c b/frontend/menu/backend/menu_common_backend.c index 7578eaf6b6..7c645a7506 100644 --- a/frontend/menu/backend/menu_common_backend.c +++ b/frontend/menu/backend/menu_common_backend.c @@ -286,7 +286,7 @@ static int menu_viewport_iterate(unsigned action) rarch_viewport_t *custom = (rarch_viewport_t*) &g_extern.console.screen.viewports.custom_vp; - file_list_get_last(driver.menu->menu_stack, NULL, &label, &type); + menu_list_get_last_stack(driver.menu->menu_stack, NULL, &label, &type); geom = (struct retro_game_geometry*)&g_extern.system.av_info.geometry; @@ -402,7 +402,7 @@ static int menu_viewport_iterate(unsigned action) break; } - file_list_get_last(driver.menu->menu_stack, NULL, &label, &type); + menu_list_get_last_stack(driver.menu->menu_stack, NULL, &label, &type); if (driver.video_data && driver.menu_ctx && driver.menu_ctx->render) driver.menu_ctx->render(); @@ -485,8 +485,8 @@ static int menu_load_or_open_zip_iterate(unsigned action) case MENU_ACTION_CANCEL: menu_list_pop_stack(driver.menu->menu_stack); - file_list_get_last(driver.menu->menu_stack, &menu_path, &menu_label, - NULL); + menu_list_get_last_stack(driver.menu->menu_stack, + &menu_path, &menu_label, NULL); if (menu_list_get_size() == 0) return 0; @@ -547,7 +547,7 @@ static int menu_common_iterate(unsigned action) file_list_get_actiondata_at_offset(driver.menu->selection_buf, driver.menu->selection_ptr); - file_list_get_last(driver.menu->menu_stack, NULL, &label, &type); + menu_list_get_last_stack(driver.menu->menu_stack, NULL, &label, &type); if (driver.video_data && driver.menu_ctx && driver.menu_ctx->set_texture) driver.menu_ctx->set_texture(driver.menu); diff --git a/frontend/menu/disp/glui.c b/frontend/menu/disp/glui.c index be9cd2cc52..6ed2f0704a 100644 --- a/frontend/menu/disp/glui.c +++ b/frontend/menu/disp/glui.c @@ -254,7 +254,7 @@ static void glui_frame(void) glui_render_background(false); - file_list_get_last(driver.menu->menu_stack, &dir, &label, &menu_type); + menu_list_get_last_stack(driver.menu->menu_stack, &dir, &label, &menu_type); get_title(label, dir, menu_type, title, sizeof(title)); diff --git a/frontend/menu/disp/rgui.c b/frontend/menu/disp/rgui.c index 5a6e8c3aa0..87b9b3c438 100644 --- a/frontend/menu/disp/rgui.c +++ b/frontend/menu/disp/rgui.c @@ -296,7 +296,7 @@ static void rgui_render(void) const char *dir = NULL; const char *label = NULL; unsigned menu_type = 0; - file_list_get_last(driver.menu->menu_stack, &dir, &label, &menu_type); + menu_list_get_last_stack(driver.menu->menu_stack, &dir, &label, &menu_type); #if 0 RARCH_LOG("Dir is: %s\n", label); diff --git a/frontend/menu/disp/rmenu.c b/frontend/menu/disp/rmenu.c index 31dcb4ba87..3387ac340f 100644 --- a/frontend/menu/disp/rmenu.c +++ b/frontend/menu/disp/rmenu.c @@ -158,7 +158,7 @@ static void rmenu_render(void) const char *dir = NULL; const char *label = NULL; unsigned menu_type = 0; - file_list_get_last(menu->menu_stack, &dir, &label, &menu_type); + menu_list_get_last_stack(menu->menu_stack, &dir, &label, &menu_type); get_title(label, dir, menu_type, title, sizeof(title)); diff --git a/frontend/menu/disp/rmenu_xui.cpp b/frontend/menu/disp/rmenu_xui.cpp index 29b90e48ca..5e99ea3c94 100644 --- a/frontend/menu/disp/rmenu_xui.cpp +++ b/frontend/menu/disp/rmenu_xui.cpp @@ -20,6 +20,7 @@ #include #include "menu_display.h" +#include "../menu_list.h" #include "../menu_common.h" #include "../../../gfx/gfx_common.h" @@ -369,7 +370,7 @@ static void rmenu_xui_render(void) rmenu_xui_render_background(); - file_list_get_last(driver.menu->menu_stack, &dir, + menu_list_get_last_stack(driver.menu->menu_stack, &dir, &label, &menu_type); get_title(label, dir, menu_type, diff --git a/frontend/menu/disp/xmb.c b/frontend/menu/disp/xmb.c index 0c2a473411..53cb4dcec0 100644 --- a/frontend/menu/disp/xmb.c +++ b/frontend/menu/disp/xmb.c @@ -428,7 +428,7 @@ static void xmb_frame(void) xmb_render_background(false); - file_list_get_last(driver.menu->menu_stack, &dir, &label, &menu_type); + menu_list_get_last_stack(driver.menu->menu_stack, &dir, &label, &menu_type); get_title(label, dir, menu_type, xmb->title, sizeof(xmb->title)); diff --git a/frontend/menu/menu_entries.c b/frontend/menu/menu_entries.c index e347d89aa5..f162542a47 100644 --- a/frontend/menu/menu_entries.c +++ b/frontend/menu/menu_entries.c @@ -341,7 +341,7 @@ int menu_entries_parse_list(file_list_t *list, file_list_t *menu_list, if (!strcmp(label, "core_list")) { - file_list_get_last(menu_list, &dir, NULL, NULL); + menu_list_get_last_stack(menu_list, &dir, NULL, NULL); list_size = file_list_get_size(list); for (i = 0; i < list_size; i++) @@ -381,13 +381,13 @@ int menu_entries_deferred_push(file_list_t *list, file_list_t *menu_list) const char *label = NULL; menu_file_list_cbs_t *cbs = NULL; - file_list_get_last(menu_list, &path, &label, &type); + menu_list_get_last_stack(menu_list, &path, &label, &type); if (!strcmp(label, "Main Menu")) return entries_push_main_menu_list(driver.menu, list, path, label, type); cbs = (menu_file_list_cbs_t*) - file_list_get_last_actiondata(menu_list); + menu_list_get_last_stack_actiondata(menu_list); if (cbs->action_deferred_push) return cbs->action_deferred_push(list, menu_list, path, label, type); diff --git a/frontend/menu/menu_entries_cbs.c b/frontend/menu/menu_entries_cbs.c index 83038ae2ed..1a54042fa9 100644 --- a/frontend/menu/menu_entries_cbs.c +++ b/frontend/menu/menu_entries_cbs.c @@ -197,8 +197,9 @@ static int action_ok_shader_pass_load(const char *path, (void)menu_path; #ifdef HAVE_SHADER_MANAGER - file_list_get_last(driver.menu->menu_stack, &menu_path, NULL, + menu_list_get_last_stack(driver.menu->menu_stack, &menu_path, NULL, NULL); + fill_pathname_join(driver.menu->shader->pass[hack_shader_pass].source.path, menu_path, path, sizeof(driver.menu->shader->pass[hack_shader_pass].source.path)); @@ -223,8 +224,9 @@ static int action_ok_shader_preset_load(const char *path, (void)shader_path; (void)menu_path; #ifdef HAVE_SHADER_MANAGER - file_list_get_last(driver.menu->menu_stack, &menu_path, NULL, + menu_list_get_last_stack(driver.menu->menu_stack, &menu_path, NULL, NULL); + fill_pathname_join(shader_path, menu_path, path, sizeof(shader_path)); menu_shader_manager_set_preset(driver.menu->shader, gfx_shader_parse_type(shader_path, RARCH_SHADER_NONE), @@ -257,7 +259,9 @@ static int action_ok_path_use_directory(const char *path, if (!driver.menu) return -1; - file_list_get_last(driver.menu->menu_stack, &menu_path, &menu_label, NULL); + menu_list_get_last_stack(driver.menu->menu_stack, + &menu_path, &menu_label, NULL); + setting = (rarch_setting_t*) setting_data_find_setting(driver.menu->list_settings, menu_label); @@ -297,7 +301,8 @@ static int action_ok_core_load(const char *path, if (!driver.menu) return -1; - file_list_get_last(driver.menu->menu_stack, &menu_path, NULL, NULL); + menu_list_get_last_stack(driver.menu->menu_stack, + &menu_path, NULL, NULL); fill_pathname_join(g_settings.libretro, menu_path, path, sizeof(g_settings.libretro)); @@ -333,7 +338,8 @@ static int action_ok_compressed_archive_push(const char *path, if (!driver.menu) return -1; - file_list_get_last(driver.menu->menu_stack, &menu_path, &menu_label, NULL); + menu_list_get_last_stack(driver.menu->menu_stack, + &menu_path, &menu_label, NULL); if (!strcmp(menu_label, "detect_core_list")) { @@ -363,7 +369,8 @@ static int action_ok_directory_push(const char *path, if (!driver.menu) return -1; - file_list_get_last(driver.menu->menu_stack, &menu_path, &menu_label, NULL); + menu_list_get_last_stack(driver.menu->menu_stack, + &menu_path, &menu_label, NULL); fill_pathname_join(cat_path, menu_path, path, sizeof(cat_path)); menu_list_push_stack_refresh( @@ -385,7 +392,8 @@ static int action_ok_config_load(const char *path, if (!driver.menu) return -1; - file_list_get_last(driver.menu->menu_stack, &menu_path, NULL, NULL); + menu_list_get_last_stack(driver.menu->menu_stack, + &menu_path, NULL, NULL); fill_pathname_join(config, menu_path, path, sizeof(config)); menu_list_flush_stack(driver.menu->menu_stack, MENU_SETTINGS); @@ -408,7 +416,8 @@ static int action_ok_disk_image_append(const char *path, if (!driver.menu) return -1; - file_list_get_last(driver.menu->menu_stack, &menu_path, NULL, NULL); + menu_list_get_last_stack(driver.menu->menu_stack, + &menu_path, NULL, NULL); fill_pathname_join(image, menu_path, path, sizeof(image)); rarch_disk_control_append_image(image); @@ -428,7 +437,8 @@ static int action_ok_file_load_with_detect_core(const char *path, if (!driver.menu) return -1; - file_list_get_last(driver.menu->menu_stack, &menu_path, NULL, NULL); + menu_list_get_last_stack(driver.menu->menu_stack, + &menu_path, NULL, NULL); ret = rarch_defer_core(g_extern.core_info, menu_path, path, driver.menu->deferred_path, @@ -460,7 +470,9 @@ static int action_ok_file_load(const char *path, if (!driver.menu) return -1; - file_list_get_last(driver.menu->menu_stack, &menu_path, &menu_label, NULL); + menu_list_get_last(driver.menu->menu_stack, + &menu_path, &menu_label, NULL); + setting = (rarch_setting_t*) setting_data_find_setting(driver.menu->list_settings, menu_label); @@ -499,7 +511,8 @@ static int action_ok_set_path(const char *path, if (!driver.menu) return -1; - file_list_get_last(driver.menu->menu_stack, &menu_path, &menu_label, NULL); + menu_list_get_last_stack(driver.menu->menu_stack, + &menu_path, &menu_label, NULL); setting = (rarch_setting_t*) setting_data_find_setting(driver.menu->list_settings, menu_label); @@ -2210,7 +2223,8 @@ static int menu_entries_cbs_init_bind_ok_first(menu_file_list_cbs_t *cbs, if (!driver.menu) return -1; - file_list_get_last(driver.menu->menu_stack, NULL, &menu_label, NULL); + menu_list_get_last_stack(driver.menu->menu_stack, + NULL, &menu_label, NULL); if (type >= MENU_SETTINGS_BIND_BEGIN && type <= MENU_SETTINGS_BIND_ALL_LAST) @@ -2439,7 +2453,8 @@ static void menu_entries_cbs_init_bind_deferred_push(menu_file_list_cbs_t *cbs, if (!cbs || !driver.menu) return; - file_list_get_last(driver.menu->menu_stack, NULL, &menu_label, NULL); + menu_list_get_last_stack(driver.menu->menu_stack, + NULL, &menu_label, NULL); cbs->action_deferred_push = deferred_push_default; diff --git a/frontend/menu/menu_list.c b/frontend/menu/menu_list.c index 3182264e6a..83cad3df23 100644 --- a/frontend/menu/menu_list.c +++ b/frontend/menu/menu_list.c @@ -69,6 +69,13 @@ void menu_list_get_last_stack(const file_list_t *list, file_list_get_last(list, path, label, file_type); } +void *menu_list_get_last_stack_actiondata(const file_list_t *list) +{ + if (list) + return file_list_get_last_actiondata(list); + return NULL; +} + void menu_list_flush_stack(file_list_t *list, unsigned final_type) { diff --git a/frontend/menu/menu_list.h b/frontend/menu/menu_list.h index 1df16a0f4c..8a8936edc7 100644 --- a/frontend/menu/menu_list.h +++ b/frontend/menu/menu_list.h @@ -42,6 +42,8 @@ size_t menu_list_get_stack_size(void); size_t menu_list_get_size(void); +void *menu_list_get_last_stack_actiondata(const file_list_t *list); + void menu_list_get_last(const file_list_t *list, const char **path, const char **label, unsigned *file_type);