diff --git a/menu/menu_driver.c b/menu/menu_driver.c index 50e4754784..f3c03e7978 100644 --- a/menu/menu_driver.c +++ b/menu/menu_driver.c @@ -23,6 +23,7 @@ #include #include "menu_driver.h" #include "menu_cbs.h" +#include "../list_special.h" #include "../tasks/tasks_internal.h" #ifdef HAVE_LANGEXTRA @@ -2363,3 +2364,98 @@ enum menu_driver_id_type menu_driver_set_id( return MENU_DRIVER_ID_UNKNOWN; } +const char *config_get_menu_driver_options(void) +{ + return char_list_new_special(STRING_LIST_MENU_DRIVERS, NULL); +} + +bool menu_entries_search_push(const char *search_term) +{ + size_t i; + menu_search_terms_t *search = menu_entries_search_get_terms_internal(); + char search_term_clipped[MENU_SEARCH_FILTER_MAX_LENGTH]; + + search_term_clipped[0] = '\0'; + + /* Sanity check + verify whether we have reached + * the maximum number of allowed search terms */ + if (!search || + string_is_empty(search_term) || + (search->size >= MENU_SEARCH_FILTER_MAX_TERMS)) + return false; + + /* Check whether search term already exists + * > Note that we clip the input search term + * to MENU_SEARCH_FILTER_MAX_LENGTH characters + * *before* comparing existing entries */ + strlcpy(search_term_clipped, search_term, + sizeof(search_term_clipped)); + + for (i = 0; i < search->size; i++) + { + if (string_is_equal(search_term_clipped, + search->terms[i])) + return false; + } + + /* Add search term */ + strlcpy(search->terms[search->size], search_term_clipped, + sizeof(search->terms[search->size])); + search->size++; + + return true; +} + +bool menu_entries_search_pop(void) +{ + menu_search_terms_t *search = menu_entries_search_get_terms_internal(); + + /* Do nothing if list of search terms is empty */ + if (!search || + (search->size == 0)) + return false; + + /* Remove last item from the list */ + search->size--; + search->terms[search->size][0] = '\0'; + + return true; +} + +menu_search_terms_t *menu_entries_search_get_terms(void) +{ + menu_search_terms_t *search = menu_entries_search_get_terms_internal(); + + if (!search || + (search->size == 0)) + return NULL; + + return search; +} + +void menu_entries_search_append_terms_string(char *s, size_t len) +{ + menu_search_terms_t *search = menu_entries_search_get_terms_internal(); + + if (search && + (search->size > 0) && + s) + { + size_t current_len = strlen_size(s, len); + size_t i; + + /* If buffer is already 'full', nothing + * further can be added */ + if (current_len >= len) + return; + + s += current_len; + len -= current_len; + + for (i = 0; i < search->size; i++) + { + strlcat(s, " > ", len); + strlcat(s, search->terms[i], len); + } + } +} diff --git a/menu/menu_driver.h b/menu/menu_driver.h index f745aeaacc..8b78d02e42 100644 --- a/menu/menu_driver.h +++ b/menu/menu_driver.h @@ -781,6 +781,17 @@ void menu_display_common_image_upload( enum menu_driver_id_type menu_driver_set_id( const char *driver_name); +/** + * config_get_menu_driver_options: + * + * Get an enumerated list of all menu driver names, + * separated by '|'. + * + * Returns: string listing of all menu driver names, + * separated by '|'. + **/ +const char *config_get_menu_driver_options(void); + bool generic_menu_init_list(struct menu_state *menu_st, settings_t *settings); diff --git a/menu/menu_entries.h b/menu/menu_entries.h index 2f941f37b8..075031abd6 100644 --- a/menu/menu_entries.h +++ b/menu/menu_entries.h @@ -195,11 +195,17 @@ bool menu_entries_append_enum(file_list_t *list, bool menu_entries_ctl(enum menu_entries_ctl_state state, void *data); bool menu_entries_search_push(const char *search_term); + bool menu_entries_search_pop(void); + menu_search_terms_t *menu_entries_search_get_terms(void); + /* Convenience function: Appends list of current * search terms to specified string */ void menu_entries_search_append_terms_string(char *s, size_t len); + +menu_search_terms_t *menu_entries_search_get_terms_internal(void); + /* Searches current menu list for specified 'needle' * string. If string is found, returns true and sets * 'idx' to the matching list entry index. */ diff --git a/retroarch.c b/retroarch.c index 74408b5fe4..b65a0345fe 100644 --- a/retroarch.c +++ b/retroarch.c @@ -2349,7 +2349,7 @@ bool menu_entries_ctl(enum menu_entries_ctl_state state, void *data) return true; } -static menu_search_terms_t *menu_entries_search_get_terms_internal(void) +menu_search_terms_t *menu_entries_search_get_terms_internal(void) { struct rarch_state *p_rarch = &rarch_st; struct menu_state *menu_st = &p_rarch->menu_driver_state; @@ -2368,99 +2368,6 @@ static menu_search_terms_t *menu_entries_search_get_terms_internal(void) return &cbs->search; } -bool menu_entries_search_push(const char *search_term) -{ - menu_search_terms_t *search = menu_entries_search_get_terms_internal(); - char search_term_clipped[MENU_SEARCH_FILTER_MAX_LENGTH]; - size_t i; - - search_term_clipped[0] = '\0'; - - /* Sanity check + verify whether we have reached - * the maximum number of allowed search terms */ - if (!search || - string_is_empty(search_term) || - (search->size >= MENU_SEARCH_FILTER_MAX_TERMS)) - return false; - - /* Check whether search term already exists - * > Note that we clip the input search term - * to MENU_SEARCH_FILTER_MAX_LENGTH characters - * *before* comparing existing entries */ - strlcpy(search_term_clipped, search_term, - sizeof(search_term_clipped)); - - for (i = 0; i < search->size; i++) - { - if (string_is_equal(search_term_clipped, - search->terms[i])) - return false; - } - - /* Add search term */ - strlcpy(search->terms[search->size], search_term_clipped, - sizeof(search->terms[search->size])); - search->size++; - - return true; -} - -bool menu_entries_search_pop(void) -{ - menu_search_terms_t *search = menu_entries_search_get_terms_internal(); - - /* Do nothing if list of search terms is empty */ - if (!search || - (search->size == 0)) - return false; - - /* Remove last item from the list */ - search->size--; - search->terms[search->size][0] = '\0'; - - return true; -} - -menu_search_terms_t *menu_entries_search_get_terms(void) -{ - menu_search_terms_t *search = menu_entries_search_get_terms_internal(); - - if (!search || - (search->size == 0)) - return NULL; - - return search; -} - -/* Convenience function: Appends list of current - * search terms to specified string */ -void menu_entries_search_append_terms_string(char *s, size_t len) -{ - menu_search_terms_t *search = menu_entries_search_get_terms_internal(); - - if (search && - (search->size > 0) && - s) - { - size_t current_len = strlen_size(s, len); - size_t i; - - /* If buffer is already 'full', nothing - * further can be added */ - if (current_len >= len) - return; - - s += current_len; - len -= current_len; - - for (i = 0; i < search->size; i++) - { - strlcat(s, " > ", len); - strlcat(s, search->terms[i], len); - } - } -} - /* Searches current menu list for specified 'needle' * string. If string is found, returns true and sets * 'idx' to the matching list entry index. */ @@ -2475,10 +2382,10 @@ bool menu_entries_list_search(const char *needle, size_t *idx) char needle_char = 0; size_t i; - if (!list || - string_is_empty(needle) || - !idx) - goto end; + if ( !list + || string_is_empty(needle) + || !idx) + return match_found; /* Check if we are searching for a single * Latin alphabet character */ @@ -2558,7 +2465,6 @@ bool menu_entries_list_search(const char *needle, size_t *idx) } } -end: return match_found; } @@ -2626,20 +2532,6 @@ void menu_display_handle_wallpaper_upload( MENU_IMAGE_WALLPAPER); } -/** - * config_get_menu_driver_options: - * - * Get an enumerated list of all menu driver names, - * separated by '|'. - * - * Returns: string listing of all menu driver names, - * separated by '|'. - **/ -const char *config_get_menu_driver_options(void) -{ - return char_list_new_special(STRING_LIST_MENU_DRIVERS, NULL); -} - #ifdef HAVE_COMPRESSION /* This function gets called at first startup on Android/iOS * when we need to extract the APK contents/zip file. This