diff --git a/menu/menu_driver.h b/menu/menu_driver.h index df0325ee64..aa8e92a069 100644 --- a/menu/menu_driver.h +++ b/menu/menu_driver.h @@ -474,6 +474,8 @@ void menu_display_handle_wallpaper_upload(retro_task_t *task, void *task_data, void *user_data, const char *err); +void menu_explore_free(void); + menu_handle_t *menu_driver_get_ptr(void); enum action_iterate_type diff --git a/menu/menu_explore.c b/menu/menu_explore.c index 1b128aa74a..8dd4bd1862 100644 --- a/menu/menu_explore.c +++ b/menu/menu_explore.c @@ -499,12 +499,7 @@ static void explore_build_list(void) const char *directory_database = settings->paths.path_content_database; libretro_vfs_implementation_dir *dir = NULL; - if (explore_state) - { - explore_free(explore_state); - free(explore_state); - explore_state = NULL; - } + menu_explore_free(); explore_state = (explore_state_t*)calloc( 1, sizeof(explore_state_t)); @@ -744,7 +739,10 @@ static void explore_build_list(void) { uint32_t idx; size_t len = EX_BUF_LEN(explore_state->by[i]); - qsort(explore_state->by[i], len, sizeof(*explore_state->by[i]), explore_qsort_func_strings); + + if (explore_state->by[i]) + qsort(explore_state->by[i], len, sizeof(*explore_state->by[i]), explore_qsort_func_strings); + for (idx = 0; idx != len; idx++) explore_state->by[i][idx]->idx = idx; @@ -1161,3 +1159,13 @@ SKIP_ENTRY:; return list->size; } + +void menu_explore_free(void) +{ + if (explore_state) + { + explore_free(explore_state); + free(explore_state); + explore_state = NULL; + } +} diff --git a/retroarch.c b/retroarch.c index 2e0c2efdd3..546718e2b8 100644 --- a/retroarch.c +++ b/retroarch.c @@ -7355,6 +7355,9 @@ bool menu_driver_ctl(enum rarch_menu_ctl_state state, void *data) #ifdef HAVE_NETWORKING core_updater_list_free_cached(); #endif +#ifdef HAVE_LIBRETRODB + menu_explore_free(); +#endif if (p_rarch->menu_driver_data) {