From 55844f06d7d0a5e47e028c625731fe7cf4685f17 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Fri, 13 Feb 2015 20:04:50 +0100 Subject: [PATCH] Cleanups - start using menu_driver_resolve everywhere in menu code for safety reasons --- menu/menu_entries.c | 8 ++--- menu/menu_entries_cbs.c | 65 +++++++++++++-------------------- menu/menu_input.c | 2 +- menu/menu_list.c | 80 ++++++++++++++++++++++------------------- menu/menu_list.h | 2 +- menu/menu_navigation.c | 47 ++++++++++++++++-------- menu/menu_navigation.h | 21 ++++------- 7 files changed, 115 insertions(+), 110 deletions(-) diff --git a/menu/menu_entries.c b/menu/menu_entries.c index 3015e8ebd1..2f67c51878 100644 --- a/menu/menu_entries.c +++ b/menu/menu_entries.c @@ -212,7 +212,7 @@ int menu_entries_push_horizontal_menu_list(menu_handle_t *menu, if (!info_list) return -1; - info = (core_info_t*)&info_list->list[driver.menu->categories.selection_ptr - 1]; + info = (core_info_t*)&info_list->list[menu->categories.selection_ptr - 1]; if (!info) return -1; @@ -223,7 +223,7 @@ int menu_entries_push_horizontal_menu_list(menu_handle_t *menu, menu_entries_push_cores_list(list, info, g_settings.content_directory, true); - menu_list_populate_generic(menu, list, path, label, menu_type); + menu_list_populate_generic(list, path, label, menu_type); return 0; } @@ -476,7 +476,7 @@ int menu_entries_parse_list( menu_list_sort_on_alt(list); } - menu_list_populate_generic(driver.menu, list, dir, label, type); + menu_list_populate_generic(list, dir, label, type); return 0; } @@ -521,7 +521,7 @@ bool menu_entries_init(menu_handle_t *menu) menu->list_settings = setting_data_new(SL_FLAG_ALL); menu_list_push_stack(menu->menu_list, "", "Main Menu", MENU_SETTINGS, 0); - menu_navigation_clear(menu, true); + menu_navigation_clear(true); menu_entries_push_list(menu, menu->menu_list->selection_buf, "", "Main Menu", 0, SL_FLAG_MAIN_MENU); diff --git a/menu/menu_entries_cbs.c b/menu/menu_entries_cbs.c index 36cd9dfeeb..7967a0ac1c 100644 --- a/menu/menu_entries_cbs.c +++ b/menu/menu_entries_cbs.c @@ -1422,7 +1422,7 @@ static int action_ok_config_load(const char *path, menu->msg_force = true; if (rarch_replace_config(config)) { - menu_navigation_clear(menu, false); + menu_navigation_clear(false); return -1; } @@ -2183,19 +2183,17 @@ static int action_toggle_scroll(unsigned type, const char *label, { case MENU_ACTION_LEFT: if (menu->selection_ptr > fast_scroll_speed) - menu_navigation_set(menu, - menu->selection_ptr - fast_scroll_speed, true); + menu_navigation_set(menu->selection_ptr - fast_scroll_speed, true); else - menu_navigation_clear(menu, false); + menu_navigation_clear(false); break; case MENU_ACTION_RIGHT: if (menu->selection_ptr + fast_scroll_speed < (menu_list_get_size(menu->menu_list))) - menu_navigation_set(menu, - menu->selection_ptr + fast_scroll_speed, true); + menu_navigation_set(menu->selection_ptr + fast_scroll_speed, true); else { if ((menu_list_get_size(menu->menu_list) > 0)) - menu_navigation_set_last(menu); + menu_navigation_set_last(); } break; } @@ -2653,7 +2651,7 @@ static int deferred_push_core_list_deferred(void *data, void *userdata, menu_list_sort_on_alt(list); - menu_list_populate_generic(menu, list, path, label, type); + menu_list_populate_generic(list, path, label, type); return 0; } @@ -2679,7 +2677,7 @@ static int deferred_push_database_manager_list_deferred(void *data, void *userda menu_list_sort_on_alt(list); - menu_list_populate_generic(menu, list, path, label, type); + menu_list_populate_generic(list, path, label, type); return 0; } @@ -2722,7 +2720,7 @@ static int deferred_push_cursor_manager_list_deferred(void *data, void *userdata menu_list_sort_on_alt(list); - menu_list_populate_generic(menu, list, path, label, type); + menu_list_populate_generic(list, path, label, type); return 0; } @@ -2823,7 +2821,7 @@ static int deferred_push_cursor_manager_list_deferred_query_subsearch( menu_list_sort_on_alt(list); - menu_list_populate_generic(menu, list, str_list->elems[0].data, label, type); + menu_list_populate_generic(list, str_list->elems[0].data, label, type); string_list_free(str_list); @@ -3612,8 +3610,7 @@ static int cb_core_updater_list(void *data_, size_t len) print_buf_lines(list, data, len, MENU_FILE_DOWNLOAD_CORE); - menu_list_populate_generic(menu, - list, core_updater_list_path, + menu_list_populate_generic(list, core_updater_list_path, core_updater_list_label, core_updater_list_type); return 0; @@ -3624,10 +3621,6 @@ static int cb_core_updater_list(void *data_, size_t len) static int deferred_push_core_updater_list(void *data, void *userdata, const char *path, const char *label, unsigned type) { - menu_handle_t *menu = menu_driver_resolve(); - if (!menu) - return -1; - #ifdef HAVE_NETWORKING char url_path[PATH_MAX_LENGTH]; @@ -3651,7 +3644,7 @@ static int deferred_push_core_updater_list(void *data, void *userdata, 0, 0); #endif - menu_list_populate_generic(menu, list, path, label, type); + menu_list_populate_generic(list, path, label, type); return 0; } @@ -3677,15 +3670,12 @@ static int deferred_push_history_list(void *data, void *userdata, unsigned i; size_t list_size = 0; file_list_t *list = (file_list_t*)data; - menu_handle_t *menu = menu_driver_resolve(); - if (!menu) + + if (!list) return -1; (void)userdata; - if (!list || !menu) - return -1; - menu_list_clear(list); list_size = content_playlist_size(g_defaults.history); @@ -3710,7 +3700,7 @@ static int deferred_push_history_list(void *data, void *userdata, MENU_FILE_PLAYLIST_ENTRY, 0); } - menu_list_populate_generic(menu, list, path, label, type); + menu_list_populate_generic(list, path, label, type); return 0; } @@ -3725,7 +3715,7 @@ static int deferred_push_content_actions(void *data, void *userdata, (void)userdata; - if (!list || !menu) + if (!list) return -1; menu_list_clear(list); @@ -3750,7 +3740,7 @@ static int deferred_push_content_actions(void *data, void *userdata, else menu_list_push(list, "Run", "file_load_or_resume", MENU_SETTING_ACTION_RUN, 0); - menu_list_populate_generic(menu, list, path, label, type); + menu_list_populate_generic(list, path, label, type); return 0; } @@ -3928,29 +3918,24 @@ static int action_bind_up_or_down_generic(unsigned type, const char *label, { case MENU_ACTION_UP: if (menu->selection_ptr >= scroll_speed) - menu_navigation_set(menu, - menu->selection_ptr - scroll_speed, true); + menu_navigation_set(menu->selection_ptr - scroll_speed, true); else { if (g_settings.menu.navigation.wraparound.vertical_enable) - menu_navigation_set(menu, - menu_list_get_size(menu->menu_list) - 1, true); + menu_navigation_set(menu_list_get_size(menu->menu_list) - 1, true); else - menu_navigation_set(menu, - 0, true); + menu_navigation_set(0, true); } break; case MENU_ACTION_DOWN: if (menu->selection_ptr + scroll_speed < (menu_list_get_size(menu->menu_list))) - menu_navigation_set(menu, - menu->selection_ptr + scroll_speed, true); + menu_navigation_set(menu->selection_ptr + scroll_speed, true); else { if (g_settings.menu.navigation.wraparound.vertical_enable) - menu_navigation_clear(menu, false); + menu_navigation_clear(false); else - menu_navigation_set(menu, - menu_list_get_size(menu->menu_list) - 1, true); + menu_navigation_set(menu_list_get_size(menu->menu_list) - 1, true); } break; } @@ -3983,7 +3968,7 @@ static int mouse_post_iterate(menu_file_list_cbs_t *cbs, const char *path, return 0; if (menu->mouse.ptr <= menu_list_get_size(menu->menu_list)-1) - menu_navigation_set(menu, menu->mouse.ptr, false); + menu_navigation_set(menu->mouse.ptr, false); if (menu->mouse.left) { @@ -4466,10 +4451,10 @@ static int action_iterate_main(const char *label, unsigned action) ret = cbs->action_up_or_down(type_offset, label_offset, action); break; case MENU_ACTION_SCROLL_UP: - menu_navigation_descend_alphabet(menu, &menu->selection_ptr); + menu_navigation_descend_alphabet(&menu->selection_ptr); break; case MENU_ACTION_SCROLL_DOWN: - menu_navigation_ascend_alphabet(menu, &menu->selection_ptr); + menu_navigation_ascend_alphabet(&menu->selection_ptr); break; case MENU_ACTION_CANCEL: diff --git a/menu/menu_input.c b/menu/menu_input.c index cf19ca0d28..e9ad6c0f69 100644 --- a/menu/menu_input.c +++ b/menu/menu_input.c @@ -70,7 +70,7 @@ static void menu_input_search_callback(void *userdata, const char *str) return; if (str && *str && file_list_search(menu->menu_list->selection_buf, str, &idx)) - menu_navigation_set(menu, idx, true); + menu_navigation_set(idx, true); menu_input_key_end_line(menu); } diff --git a/menu/menu_list.c b/menu/menu_list.c index 4cc037068d..e2b990cc11 100644 --- a/menu/menu_list.c +++ b/menu/menu_list.c @@ -28,16 +28,19 @@ * * Ensure it doesn't overflow. **/ -static void menu_entries_refresh(menu_handle_t *menu, file_list_t *list) +static void menu_entries_refresh(file_list_t *list) { + menu_handle_t *menu = menu_driver_resolve(); + if (!menu) + return; if (!list) return; if (menu->selection_ptr >= menu_list_get_size(menu->menu_list) && menu_list_get_size(menu->menu_list)) - menu_navigation_set(menu, menu_list_get_size(menu->menu_list) - 1, true); + menu_navigation_set(menu_list_get_size(menu->menu_list) - 1, true); else if (!menu_list_get_size(menu->menu_list)) - menu_navigation_clear(menu, true); + menu_navigation_clear(true); } /** @@ -94,15 +97,16 @@ static void menu_entries_build_scroll_indices(file_list_t *list) size_t i; int current; bool current_is_dir; + menu_handle_t *menu = menu_driver_resolve(); - if (!driver.menu || !list) + if (!menu || !list) return; - driver.menu->scroll.indices.size = 0; + menu->scroll.indices.size = 0; if (!list->size) return; - driver.menu->scroll.indices.list[driver.menu->scroll.indices.size++] = 0; + menu->scroll.indices.list[menu->scroll.indices.size++] = 0; current = menu_entries_list_get_first_char(list, 0); current_is_dir = menu_entries_list_elem_is_dir(list, 0); @@ -113,13 +117,13 @@ static void menu_entries_build_scroll_indices(file_list_t *list) bool is_dir = menu_entries_list_elem_is_dir(list, i); if ((current_is_dir && !is_dir) || (first > current)) - driver.menu->scroll.indices.list[driver.menu->scroll.indices.size++] = i; + menu->scroll.indices.list[menu->scroll.indices.size++] = i; current = first; current_is_dir = is_dir; } - driver.menu->scroll.indices.list[driver.menu->scroll.indices.size++] = + menu->scroll.indices.list[menu->scroll.indices.size++] = list->size - 1; } @@ -228,16 +232,16 @@ void menu_list_flush_stack(menu_list_t *list, const char *path = NULL; const char *label = NULL; unsigned type = 0; - - if (!driver.menu || !list) + menu_handle_t *menu = menu_driver_resolve(); + if (!menu || !list) return; - driver.menu->need_refresh = true; + menu->need_refresh = true; file_list_get_last(list->menu_stack, &path, &label, &type); while (type != final_type) { - menu_list_pop(list->menu_stack, &driver.menu->selection_ptr); + menu_list_pop(list->menu_stack, &menu->selection_ptr); file_list_get_last(list->menu_stack, &path, &label, &type); } } @@ -248,23 +252,24 @@ void menu_list_flush_stack_by_needle(menu_list_t *list, const char *path = NULL; const char *label = NULL; unsigned type = 0; - - if (!driver.menu || !list) + menu_handle_t *menu = menu_driver_resolve(); + if (!menu || !list) return; - driver.menu->need_refresh = true; + menu->need_refresh = true; file_list_get_last(list->menu_stack, &path, &label, &type); while (strcmp(needle, label) != 0) { - menu_list_pop(list->menu_stack, &driver.menu->selection_ptr); + menu_list_pop(list->menu_stack, &menu->selection_ptr); file_list_get_last(list->menu_stack, &path, &label, &type); } } void menu_list_pop_stack(menu_list_t *list) { - if (!list) + menu_handle_t *menu = menu_driver_resolve(); + if (!menu || !list) return; if (file_list_get_size(list->menu_stack) <= 1) @@ -273,8 +278,8 @@ void menu_list_pop_stack(menu_list_t *list) if (driver.menu_ctx->list_cache) driver.menu_ctx->list_cache(false, 0); - menu_list_pop(list->menu_stack, &driver.menu->selection_ptr); - driver.menu->need_refresh = true; + menu_list_pop(list->menu_stack, &menu->selection_ptr); + menu->need_refresh = true; } void menu_list_pop_stack_by_needle(menu_list_t *list, @@ -283,16 +288,17 @@ void menu_list_pop_stack_by_needle(menu_list_t *list, const char *path = NULL; const char *label = NULL; unsigned type = 0; + menu_handle_t *menu = menu_driver_resolve(); - if (!driver.menu || !list) + if (!menu || !list) return; - driver.menu->need_refresh = true; + menu->need_refresh = true; file_list_get_last(list->menu_stack, &path, &label, &type); while (strcmp(needle, label) == 0) { - menu_list_pop(list->menu_stack, &driver.menu->selection_ptr); + menu_list_pop(list->menu_stack, &menu->selection_ptr); file_list_get_last(list->menu_stack, &path, &label, &type); } } @@ -363,26 +369,28 @@ void menu_list_push_refresh(file_list_t *list, const char *path, const char *label, unsigned type, size_t directory_ptr) { - if (!list) + menu_handle_t *menu = menu_driver_resolve(); + if (!menu || !list) return; menu_list_push(list, path, label, type, directory_ptr); - menu_navigation_clear(driver.menu, true); - driver.menu->need_refresh = true; + menu_navigation_clear(true); + menu->need_refresh = true; } -void menu_list_push_stack(menu_list_t *list, - const char *path, const char *label, +void menu_list_push_stack(menu_list_t *list, const char *path, const char *label, unsigned type, size_t directory_ptr) { if (list) menu_list_push(list->menu_stack, path, label, type, directory_ptr); } -int menu_list_push_stack_refresh(menu_list_t *list, - const char *path, const char *label, +int menu_list_push_stack_refresh(menu_list_t *list, const char *path, const char *label, unsigned type, size_t directory_ptr) { + menu_handle_t *menu = menu_driver_resolve(); + if (!menu) + return -1; if (!list) return -1; @@ -390,8 +398,8 @@ int menu_list_push_stack_refresh(menu_list_t *list, driver.menu_ctx->list_cache(false, 0); menu_list_push_stack(list, path, label, type, directory_ptr); - menu_navigation_clear(driver.menu, true); - driver.menu->need_refresh = true; + menu_navigation_clear(true); + menu->need_refresh = true; return 0; } @@ -413,18 +421,18 @@ void menu_list_sort_on_alt(file_list_t *list) file_list_sort_on_alt(list); } -int menu_list_populate_generic(void *data, - file_list_t *list, const char *path, +int menu_list_populate_generic(file_list_t *list, const char *path, const char *label, unsigned type) { - menu_handle_t *menu = (menu_handle_t*)data; + menu_handle_t *menu = menu_driver_resolve(); if (!menu) return -1; - driver.menu->scroll.indices.size = 0; + menu->scroll.indices.size = 0; + menu_entries_build_scroll_indices(list); - menu_entries_refresh(menu, list); + menu_entries_refresh(list); if (driver.menu_ctx && driver.menu_ctx->populate_entries) driver.menu_ctx->populate_entries(path, label, type); diff --git a/menu/menu_list.h b/menu/menu_list.h index 29183c06db..7e866291ad 100644 --- a/menu/menu_list.h +++ b/menu/menu_list.h @@ -94,7 +94,7 @@ void menu_list_get_alt_at_offset(const file_list_t *list, size_t idx, void menu_list_set_alt_at_offset(file_list_t *list, size_t idx, const char *alt); -int menu_list_populate_generic(void *data, file_list_t *list, +int menu_list_populate_generic(file_list_t *list, const char *path, const char *label, unsigned type); #ifdef __cplusplus diff --git a/menu/menu_navigation.c b/menu/menu_navigation.c index 14336f3aba..23559d47ca 100644 --- a/menu/menu_navigation.c +++ b/menu/menu_navigation.c @@ -24,13 +24,16 @@ /** * menu_navigation_clear: - * @menu : menu handle * @pending_push : pending push ? * * Clears the navigation pointer. **/ -void menu_navigation_clear(menu_handle_t *menu, bool pending_push) +void menu_navigation_clear(bool pending_push) { + menu_handle_t *menu = menu_driver_resolve(); + if (!menu) + return; + menu->selection_ptr = 0; if (driver.menu_ctx && driver.menu_ctx->navigation_clear) @@ -39,12 +42,15 @@ void menu_navigation_clear(menu_handle_t *menu, bool pending_push) /** * menu_navigation_decrement: - * @menu : menu handle * * Decrement the navigation pointer. **/ -void menu_navigation_decrement(menu_handle_t *menu) +void menu_navigation_decrement(void) { + menu_handle_t *menu = menu_driver_resolve(); + if (!menu) + return; + menu->selection_ptr--; if (driver.menu_ctx && driver.menu_ctx->navigation_decrement) @@ -53,12 +59,15 @@ void menu_navigation_decrement(menu_handle_t *menu) /** * menu_navigation_increment: - * @menu : menu handle * * Increment the navigation pointer. **/ -void menu_navigation_increment(menu_handle_t *menu) +void menu_navigation_increment(void) { + menu_handle_t *menu = menu_driver_resolve(); + if (!menu) + return; + menu->selection_ptr++; if (driver.menu_ctx && driver.menu_ctx->navigation_increment) @@ -67,14 +76,17 @@ void menu_navigation_increment(menu_handle_t *menu) /** * menu_navigation_set: - * @menu : menu handle * @idx : index to set navigation pointer to. * @scroll : should we scroll when needed? * * Sets navigation pointer to index @idx. **/ -void menu_navigation_set(menu_handle_t *menu, size_t idx, bool scroll) +void menu_navigation_set(size_t idx, bool scroll) { + menu_handle_t *menu = menu_driver_resolve(); + if (!menu) + return; + menu->selection_ptr = idx; if (driver.menu_ctx && driver.menu_ctx->navigation_set) @@ -83,12 +95,15 @@ void menu_navigation_set(menu_handle_t *menu, size_t idx, bool scroll) /** * menu_navigation_set_last: - * @menu : menu handle * * Sets navigation pointer to last index. **/ -void menu_navigation_set_last(menu_handle_t *menu) +void menu_navigation_set_last(void) { + menu_handle_t *menu = menu_driver_resolve(); + if (!menu) + return; + menu->selection_ptr = menu_list_get_size(driver.menu->menu_list) - 1; if (driver.menu_ctx && driver.menu_ctx->navigation_set_last) @@ -97,7 +112,6 @@ void menu_navigation_set_last(menu_handle_t *menu) /** * menu_navigation_descend_alphabet: - * @menu : menu handle * @ptr_out : Amount of indices to 'scroll' to get * to the next entry. * @@ -106,10 +120,13 @@ void menu_navigation_set_last(menu_handle_t *menu) * If navigation points to an entry called 'Beta', * navigation pointer will be set to an entry called 'Alpha'. **/ -void menu_navigation_descend_alphabet(menu_handle_t *menu, size_t *ptr_out) +void menu_navigation_descend_alphabet(size_t *ptr_out) { size_t i = 0; size_t ptr = *ptr_out; + menu_handle_t *menu = menu_driver_resolve(); + if (!menu) + return; if (!menu->scroll.indices.size) return; @@ -129,7 +146,6 @@ void menu_navigation_descend_alphabet(menu_handle_t *menu, size_t *ptr_out) /** * menu_navigation_ascends_alphabet: - * @menu : menu handle * @ptr_out : Amount of indices to 'scroll' to get * to the next entry. * @@ -138,10 +154,13 @@ void menu_navigation_descend_alphabet(menu_handle_t *menu, size_t *ptr_out) * If navigation points to an entry called 'Alpha', * navigation pointer will be set to an entry called 'Beta'. **/ -void menu_navigation_ascend_alphabet(menu_handle_t *menu, size_t *ptr_out) +void menu_navigation_ascend_alphabet(size_t *ptr_out) { size_t i = 0; size_t ptr = *ptr_out; + menu_handle_t *menu = menu_driver_resolve(); + if (!menu) + return; if (!menu->scroll.indices.size) return; diff --git a/menu/menu_navigation.h b/menu/menu_navigation.h index 5222a46154..597ce377bc 100644 --- a/menu/menu_navigation.h +++ b/menu/menu_navigation.h @@ -25,50 +25,44 @@ extern "C" { /** * menu_navigation_clear: - * @menu : menu handle * @pending_push : pending push ? * * Clears the navigation pointer. **/ -void menu_navigation_clear(menu_handle_t *menu, bool pending_push); +void menu_navigation_clear(bool pending_push); /** * menu_navigation_decrement: - * @menu : menu handle * * Decrement the navigation pointer. **/ -void menu_navigation_decrement(menu_handle_t *menu); +void menu_navigation_decrement(void); /** * menu_navigation_increment: - * @menu : menu handle * * Increment the navigation pointer. **/ -void menu_navigation_increment(menu_handle_t *menu); +void menu_navigation_increment(void); /** * menu_navigation_set: - * @menu : menu handle * @idx : index to set navigation pointer to. * @scroll : should we scroll when needed? * * Sets navigation pointer to index @idx. **/ -void menu_navigation_set(menu_handle_t *menu, size_t i, bool scroll); +void menu_navigation_set(size_t i, bool scroll); /** * menu_navigation_set_last: - * @menu : menu handle * * Sets navigation pointer to last index. **/ -void menu_navigation_set_last(menu_handle_t *menu); +void menu_navigation_set_last(void); /** * menu_navigation_descend_alphabet: - * @menu : menu handle * @ptr_out : Amount of indices to 'scroll' to get * to the next entry. * @@ -77,11 +71,10 @@ void menu_navigation_set_last(menu_handle_t *menu); * If navigation points to an entry called 'Beta', * navigation pointer will be set to an entry called 'Alpha'. **/ -void menu_navigation_descend_alphabet(menu_handle_t *menu, size_t *ptr_out); +void menu_navigation_descend_alphabet(size_t *ptr_out); /** * menu_navigation_ascends_alphabet: - * @menu : menu handle * @ptr_out : Amount of indices to 'scroll' to get * to the next entry. * @@ -90,7 +83,7 @@ void menu_navigation_descend_alphabet(menu_handle_t *menu, size_t *ptr_out); * If navigation points to an entry called 'Alpha', * navigation pointer will be set to an entry called 'Beta'. **/ -void menu_navigation_ascend_alphabet(menu_handle_t *menu, size_t *ptr_out); +void menu_navigation_ascend_alphabet(size_t *ptr_out); #ifdef __cplusplus }