mirror of
https://github.com/libretro/RetroArch
synced 2025-04-10 06:44:27 +00:00
Add file_list_deinitialize - does everything that file_list_free
does except for freeing the passed struct pointer
This commit is contained in:
parent
c2a8a0f04e
commit
93fa9a0194
@ -70,6 +70,8 @@ void *file_list_get_actiondata_at_offset(const file_list_t *list,
|
|||||||
*/
|
*/
|
||||||
void file_list_free(file_list_t *list);
|
void file_list_free(file_list_t *list);
|
||||||
|
|
||||||
|
bool file_list_deinitialize(file_list_t *list);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief makes the list big enough to contain at least nitems
|
* @brief makes the list big enough to contain at least nitems
|
||||||
*
|
*
|
||||||
|
@ -29,6 +29,32 @@
|
|||||||
#include <string/stdstring.h>
|
#include <string/stdstring.h>
|
||||||
#include <compat/strcasestr.h>
|
#include <compat/strcasestr.h>
|
||||||
|
|
||||||
|
static bool file_list_deinitialize_internal(file_list_t *list)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
for (i = 0; i < list->size; i++)
|
||||||
|
{
|
||||||
|
file_list_free_userdata(list, i);
|
||||||
|
file_list_free_actiondata(list, i);
|
||||||
|
|
||||||
|
if (list->list[i].path)
|
||||||
|
free(list->list[i].path);
|
||||||
|
list->list[i].path = NULL;
|
||||||
|
|
||||||
|
if (list->list[i].label)
|
||||||
|
free(list->list[i].label);
|
||||||
|
list->list[i].label = NULL;
|
||||||
|
|
||||||
|
if (list->list[i].alt)
|
||||||
|
free(list->list[i].alt);
|
||||||
|
list->list[i].alt = NULL;
|
||||||
|
}
|
||||||
|
if (list->list)
|
||||||
|
free(list->list);
|
||||||
|
list->list = NULL;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool file_list_reserve(file_list_t *list, size_t nitems)
|
bool file_list_reserve(file_list_t *list, size_t nitems)
|
||||||
{
|
{
|
||||||
const size_t item_size = sizeof(struct item_file);
|
const size_t item_size = sizeof(struct item_file);
|
||||||
@ -182,34 +208,23 @@ void file_list_pop(file_list_t *list, size_t *directory_ptr)
|
|||||||
|
|
||||||
void file_list_free(file_list_t *list)
|
void file_list_free(file_list_t *list)
|
||||||
{
|
{
|
||||||
size_t i;
|
|
||||||
|
|
||||||
if (!list)
|
if (!list)
|
||||||
return;
|
return;
|
||||||
|
file_list_deinitialize_internal(list);
|
||||||
for (i = 0; i < list->size; i++)
|
|
||||||
{
|
|
||||||
file_list_free_userdata(list, i);
|
|
||||||
file_list_free_actiondata(list, i);
|
|
||||||
|
|
||||||
if (list->list[i].path)
|
|
||||||
free(list->list[i].path);
|
|
||||||
list->list[i].path = NULL;
|
|
||||||
|
|
||||||
if (list->list[i].label)
|
|
||||||
free(list->list[i].label);
|
|
||||||
list->list[i].label = NULL;
|
|
||||||
|
|
||||||
if (list->list[i].alt)
|
|
||||||
free(list->list[i].alt);
|
|
||||||
list->list[i].alt = NULL;
|
|
||||||
}
|
|
||||||
if (list->list)
|
|
||||||
free(list->list);
|
|
||||||
list->list = NULL;
|
|
||||||
free(list);
|
free(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool file_list_deinitialize(file_list_t *list)
|
||||||
|
{
|
||||||
|
if (!list)
|
||||||
|
return false;
|
||||||
|
if (!file_list_deinitialize_internal(list))
|
||||||
|
return false;
|
||||||
|
list->capacity = 0;
|
||||||
|
list->size = 0;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void file_list_clear(file_list_t *list)
|
void file_list_clear(file_list_t *list)
|
||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
|
@ -267,7 +267,7 @@ typedef struct xmb_handle
|
|||||||
char *bg_file_path;
|
char *bg_file_path;
|
||||||
|
|
||||||
file_list_t *selection_buf_old;
|
file_list_t *selection_buf_old;
|
||||||
file_list_t *horizontal_list;
|
file_list_t horizontal_list; /* ptr alignment */
|
||||||
|
|
||||||
xmb_node_t main_menu_node;
|
xmb_node_t main_menu_node;
|
||||||
#ifdef HAVE_IMAGEVIEWER
|
#ifdef HAVE_IMAGEVIEWER
|
||||||
@ -719,9 +719,7 @@ static size_t xmb_list_get_size(void *data, enum menu_list_type type)
|
|||||||
case MENU_LIST_PLAIN:
|
case MENU_LIST_PLAIN:
|
||||||
return menu_entries_get_stack_size(0);
|
return menu_entries_get_stack_size(0);
|
||||||
case MENU_LIST_HORIZONTAL:
|
case MENU_LIST_HORIZONTAL:
|
||||||
if (xmb && xmb->horizontal_list)
|
return file_list_get_size(&xmb->horizontal_list);
|
||||||
return file_list_get_size(xmb->horizontal_list);
|
|
||||||
break;
|
|
||||||
case MENU_LIST_TABS:
|
case MENU_LIST_TABS:
|
||||||
return xmb->system_tab_end;
|
return xmb->system_tab_end;
|
||||||
}
|
}
|
||||||
@ -746,10 +744,9 @@ static void *xmb_list_get_entry(void *data,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MENU_LIST_HORIZONTAL:
|
case MENU_LIST_HORIZONTAL:
|
||||||
if (xmb && xmb->horizontal_list)
|
list_size = file_list_get_size(&xmb->horizontal_list);
|
||||||
list_size = file_list_get_size(xmb->horizontal_list);
|
|
||||||
if (i < list_size)
|
if (i < list_size)
|
||||||
return (void*)&xmb->horizontal_list->list[i];
|
return (void*)&xmb->horizontal_list.list[i];
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -1683,10 +1680,10 @@ static xmb_node_t *xmb_node_allocate_userdata(
|
|||||||
}
|
}
|
||||||
|
|
||||||
tmp = (xmb_node_t*)file_list_get_userdata_at_offset(
|
tmp = (xmb_node_t*)file_list_get_userdata_at_offset(
|
||||||
xmb->horizontal_list, i);
|
&xmb->horizontal_list, i);
|
||||||
xmb_free_node(tmp);
|
xmb_free_node(tmp);
|
||||||
|
|
||||||
file_list_set_userdata(xmb->horizontal_list, i, node);
|
file_list_set_userdata(&xmb->horizontal_list, i, node);
|
||||||
|
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
@ -1695,7 +1692,7 @@ static xmb_node_t* xmb_get_userdata_from_horizontal_list(
|
|||||||
xmb_handle_t *xmb, unsigned i)
|
xmb_handle_t *xmb, unsigned i)
|
||||||
{
|
{
|
||||||
return (xmb_node_t*)
|
return (xmb_node_t*)
|
||||||
file_list_get_userdata_at_offset(xmb->horizontal_list, i);
|
file_list_get_userdata_at_offset(&xmb->horizontal_list, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void xmb_push_animations(xmb_node_t *node,
|
static void xmb_push_animations(xmb_node_t *node,
|
||||||
@ -1844,7 +1841,7 @@ static void xmb_set_title(xmb_handle_t *xmb)
|
|||||||
const char *path = NULL;
|
const char *path = NULL;
|
||||||
|
|
||||||
menu_entries_get_at_offset(
|
menu_entries_get_at_offset(
|
||||||
xmb->horizontal_list,
|
&xmb->horizontal_list,
|
||||||
xmb->categories_selection_ptr - (xmb->system_tab_end + 1),
|
xmb->categories_selection_ptr - (xmb->system_tab_end + 1),
|
||||||
&path, NULL, NULL, NULL, NULL);
|
&path, NULL, NULL, NULL, NULL);
|
||||||
|
|
||||||
@ -2057,7 +2054,7 @@ static void xmb_context_destroy_horizontal_list(xmb_handle_t *xmb)
|
|||||||
if (!node)
|
if (!node)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
file_list_get_at_offset(xmb->horizontal_list, i,
|
file_list_get_at_offset(&xmb->horizontal_list, i,
|
||||||
&path, NULL, NULL, NULL);
|
&path, NULL, NULL, NULL);
|
||||||
|
|
||||||
if (!path || !string_ends_with_size(path, ".lpl",
|
if (!path || !string_ends_with_size(path, ".lpl",
|
||||||
@ -2078,9 +2075,9 @@ static void xmb_init_horizontal_list(xmb_handle_t *xmb)
|
|||||||
|
|
||||||
menu_displaylist_info_init(&info);
|
menu_displaylist_info_init(&info);
|
||||||
|
|
||||||
info.list = xmb->horizontal_list;
|
info.list = &xmb->horizontal_list;
|
||||||
info.path = strdup(dir_playlist);
|
info.path = strdup(dir_playlist);
|
||||||
info.label = strdup(
|
info.label = strdup(
|
||||||
msg_hash_to_str(MENU_ENUM_LABEL_PLAYLISTS_TAB));
|
msg_hash_to_str(MENU_ENUM_LABEL_PLAYLISTS_TAB));
|
||||||
info.exts = strdup("lpl");
|
info.exts = strdup("lpl");
|
||||||
info.type_default = FILE_TYPE_PLAIN;
|
info.type_default = FILE_TYPE_PLAIN;
|
||||||
@ -2091,7 +2088,7 @@ static void xmb_init_horizontal_list(xmb_handle_t *xmb)
|
|||||||
if (menu_displaylist_ctl(DISPLAYLIST_DATABASE_PLAYLISTS_HORIZONTAL, &info))
|
if (menu_displaylist_ctl(DISPLAYLIST_DATABASE_PLAYLISTS_HORIZONTAL, &info))
|
||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
for (i = 0; i < xmb->horizontal_list->size; i++)
|
for (i = 0; i < xmb->horizontal_list.size; i++)
|
||||||
xmb_node_allocate_userdata(xmb, (unsigned)i);
|
xmb_node_allocate_userdata(xmb, (unsigned)i);
|
||||||
menu_displaylist_process(&info);
|
menu_displaylist_process(&info);
|
||||||
}
|
}
|
||||||
@ -2154,7 +2151,7 @@ static void xmb_context_reset_horizontal_list(
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
file_list_get_at_offset(xmb->horizontal_list, i,
|
file_list_get_at_offset(&xmb->horizontal_list, i,
|
||||||
&path, NULL, NULL, NULL);
|
&path, NULL, NULL, NULL);
|
||||||
|
|
||||||
if (!path)
|
if (!path)
|
||||||
@ -2236,24 +2233,13 @@ static void xmb_context_reset_horizontal_list(
|
|||||||
static void xmb_refresh_horizontal_list(xmb_handle_t *xmb)
|
static void xmb_refresh_horizontal_list(xmb_handle_t *xmb)
|
||||||
{
|
{
|
||||||
xmb_context_destroy_horizontal_list(xmb);
|
xmb_context_destroy_horizontal_list(xmb);
|
||||||
if (xmb->horizontal_list)
|
|
||||||
{
|
xmb_free_list_nodes(&xmb->horizontal_list, false);
|
||||||
xmb_free_list_nodes(xmb->horizontal_list, false);
|
file_list_deinitialize(&xmb->horizontal_list);
|
||||||
file_list_free(xmb->horizontal_list);
|
|
||||||
}
|
|
||||||
xmb->horizontal_list = NULL;
|
|
||||||
|
|
||||||
menu_driver_ctl(RARCH_MENU_CTL_SET_PREVENT_POPULATE, NULL);
|
menu_driver_ctl(RARCH_MENU_CTL_SET_PREVENT_POPULATE, NULL);
|
||||||
|
|
||||||
xmb->horizontal_list = (file_list_t*)
|
xmb_init_horizontal_list(xmb);
|
||||||
malloc(sizeof(file_list_t));
|
|
||||||
|
|
||||||
xmb->horizontal_list->list = NULL;
|
|
||||||
xmb->horizontal_list->capacity = 0;
|
|
||||||
xmb->horizontal_list->size = 0;
|
|
||||||
|
|
||||||
if (xmb->horizontal_list)
|
|
||||||
xmb_init_horizontal_list(xmb);
|
|
||||||
|
|
||||||
xmb_context_reset_horizontal_list(xmb);
|
xmb_context_reset_horizontal_list(xmb);
|
||||||
}
|
}
|
||||||
@ -5497,14 +5483,11 @@ static void *xmb_init(void **userdata, bool video_is_threaded)
|
|||||||
|
|
||||||
gfx_display_allocate_white_texture();
|
gfx_display_allocate_white_texture();
|
||||||
|
|
||||||
xmb->horizontal_list = (file_list_t*)malloc(sizeof(file_list_t));
|
xmb->horizontal_list.list = NULL;
|
||||||
|
xmb->horizontal_list.capacity = 0;
|
||||||
|
xmb->horizontal_list.size = 0;
|
||||||
|
|
||||||
xmb->horizontal_list->list = NULL;
|
xmb_init_horizontal_list(xmb);
|
||||||
xmb->horizontal_list->capacity = 0;
|
|
||||||
xmb->horizontal_list->size = 0;
|
|
||||||
|
|
||||||
if (xmb->horizontal_list)
|
|
||||||
xmb_init_horizontal_list(xmb);
|
|
||||||
|
|
||||||
xmb_init_ribbon(xmb);
|
xmb_init_ribbon(xmb);
|
||||||
|
|
||||||
@ -5540,12 +5523,9 @@ error:
|
|||||||
if (xmb->selection_buf_old)
|
if (xmb->selection_buf_old)
|
||||||
free(xmb->selection_buf_old);
|
free(xmb->selection_buf_old);
|
||||||
xmb->selection_buf_old = NULL;
|
xmb->selection_buf_old = NULL;
|
||||||
if (xmb->horizontal_list)
|
|
||||||
{
|
xmb_free_list_nodes(&xmb->horizontal_list, false);
|
||||||
xmb_free_list_nodes(xmb->horizontal_list, false);
|
file_list_deinitialize(&xmb->horizontal_list);
|
||||||
file_list_free(xmb->horizontal_list);
|
|
||||||
}
|
|
||||||
xmb->horizontal_list = NULL;
|
|
||||||
gfx_animation_unset_update_time_cb();
|
gfx_animation_unset_update_time_cb();
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -5562,14 +5542,10 @@ static void xmb_free(void *data)
|
|||||||
file_list_free(xmb->selection_buf_old);
|
file_list_free(xmb->selection_buf_old);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (xmb->horizontal_list)
|
xmb_free_list_nodes(&xmb->horizontal_list, false);
|
||||||
{
|
file_list_deinitialize(&xmb->horizontal_list);
|
||||||
xmb_free_list_nodes(xmb->horizontal_list, false);
|
|
||||||
file_list_free(xmb->horizontal_list);
|
|
||||||
}
|
|
||||||
|
|
||||||
xmb->selection_buf_old = NULL;
|
xmb->selection_buf_old = NULL;
|
||||||
xmb->horizontal_list = NULL;
|
|
||||||
|
|
||||||
video_coord_array_free(&xmb->raster_block.carr);
|
video_coord_array_free(&xmb->raster_block.carr);
|
||||||
video_coord_array_free(&xmb->raster_block2.carr);
|
video_coord_array_free(&xmb->raster_block2.carr);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user