From 68c9a6003cd2b15671a070a485db826f143919ba Mon Sep 17 00:00:00 2001 From: twinaphex Date: Fri, 30 May 2014 21:10:15 +0200 Subject: [PATCH] (Menu) Prevent another few segfaults when trying to 'default' softfilter - have to continually grab pointer back to driver.menu after some function occurred that could have changed driver.menu --- driver.h | 4 +-- frontend/menu/backend/menu_common_backend.c | 29 ++++++++++++++------- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/driver.h b/driver.h index f6a31efd66..3f26417275 100644 --- a/driver.h +++ b/driver.h @@ -403,8 +403,8 @@ typedef struct menu_ctx_driver_backend int (*setting_toggle)(unsigned, unsigned, unsigned); int (*setting_set)(unsigned, unsigned); void (*setting_set_label)(char *, size_t, unsigned *, unsigned); - void (*defer_decision_automatic)(void *); - void (*defer_decision_manual)(void *); + void (*defer_decision_automatic)(void); + void (*defer_decision_manual)(void); const char *ident; } menu_ctx_driver_backend_t; diff --git a/frontend/menu/backend/menu_common_backend.c b/frontend/menu/backend/menu_common_backend.c index 0b0a5f8364..f4caa10c69 100644 --- a/frontend/menu/backend/menu_common_backend.c +++ b/frontend/menu/backend/menu_common_backend.c @@ -625,6 +625,8 @@ static int menu_settings_iterate(unsigned action) unsigned menu_type = 0; file_list_get_last(rgui->menu_stack, &dir, &menu_type); + rgui = (rgui_handle_t*)driver.menu; + if (rgui->need_refresh) action = RGUI_ACTION_NOOP; @@ -716,6 +718,8 @@ static int menu_settings_iterate(unsigned action) break; } + rgui = (rgui_handle_t*)driver.menu; + file_list_get_last(rgui->menu_stack, &dir, &menu_type); if (rgui && rgui->need_refresh && !(menu_type == RGUI_FILE_DIRECTORY || @@ -948,15 +952,20 @@ static int menu_viewport_iterate(unsigned action) return 0; } -static void menu_parse_and_resolve(void *data, unsigned menu_type) +static void menu_parse_and_resolve(unsigned menu_type) { const core_info_t *info = NULL; const char *dir; size_t i, list_size; file_list_t *list; - rgui_handle_t *rgui; + rgui_handle_t *rgui = (rgui_handle_t*)driver.menu; + + if (!rgui) + { + RARCH_ERR("Cannot parse and resolve menu, menu handle is not initialized.\n"); + return; + } - rgui = (rgui_handle_t*)data; dir = NULL; file_list_clear(rgui->selection_buf); @@ -1260,9 +1269,9 @@ static int menu_custom_bind_iterate_keyboard(void *data, unsigned action) return 0; } -static void menu_common_defer_decision_automatic(void *data) +static void menu_common_defer_decision_automatic(void) { - rgui_handle_t *rgui = (rgui_handle_t*)data; + rgui_handle_t *rgui = (rgui_handle_t*)driver.menu; if (!rgui) return; @@ -1271,9 +1280,9 @@ static void menu_common_defer_decision_automatic(void *data) rgui->msg_force = true; } -static void menu_common_defer_decision_manual(void *data) +static void menu_common_defer_decision_manual(void) { - rgui_handle_t *rgui = (rgui_handle_t*)data; + rgui_handle_t *rgui = (rgui_handle_t*)driver.menu; if (!rgui) return; @@ -1632,12 +1641,12 @@ static int menu_common_iterate(unsigned action) { menu_update_system_info(driver.menu, &rgui->load_no_rom); if (driver.menu_ctx && driver.menu_ctx->backend && driver.menu_ctx->backend->defer_decision_automatic) - driver.menu_ctx->backend->defer_decision_automatic(rgui); + driver.menu_ctx->backend->defer_decision_automatic(); } else if (ret == 0) { if (driver.menu_ctx && driver.menu_ctx->backend && driver.menu_ctx->backend->defer_decision_manual) - driver.menu_ctx->backend->defer_decision_manual(rgui); + driver.menu_ctx->backend->defer_decision_manual(); } } else @@ -1684,7 +1693,7 @@ static int menu_common_iterate(unsigned action) menu_type == RGUI_SETTINGS_DISK_APPEND)) { rgui->need_refresh = false; - menu_parse_and_resolve(rgui, menu_type); + menu_parse_and_resolve(menu_type); } if (driver.menu_ctx && driver.menu_ctx->iterate)