diff --git a/libretro-common/file/file_list.c b/libretro-common/file/file_list.c index a2e534d8e4..e0509a3de4 100644 --- a/libretro-common/file/file_list.c +++ b/libretro-common/file/file_list.c @@ -111,6 +111,9 @@ void file_list_free(file_list_t *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; @@ -286,6 +289,24 @@ void *file_list_get_actiondata_at_offset(const file_list_t *list, size_t idx) return list->list[idx].actiondata; } +void file_list_free_actiondata(const file_list_t *list, size_t idx) +{ + if (!list) + return; + if (list->list[idx].actiondata) + free(list->list[idx].actiondata); + list->list[idx].actiondata = NULL; +} + +void file_list_free_userdata(const file_list_t *list, size_t idx) +{ + if (!list) + return; + if (list->list[idx].userdata) + free(list->list[idx].userdata); + list->list[idx].userdata = NULL; +} + void *file_list_get_last_actiondata(const file_list_t *list) { if (!list) diff --git a/libretro-common/include/file/file_list.h b/libretro-common/include/file/file_list.h index 616d5f139c..007b2a151e 100644 --- a/libretro-common/include/file/file_list.h +++ b/libretro-common/include/file/file_list.h @@ -83,6 +83,10 @@ size_t file_list_get_directory_ptr(const file_list_t *list); void file_list_get_at_offset(const file_list_t *list, size_t index, const char **path, const char **label, unsigned *type, size_t *entry_idx); + +void file_list_free_userdata(const file_list_t *list, size_t index); + +void file_list_free_actiondata(const file_list_t *list, size_t idx); void file_list_set_label_at_offset(file_list_t *list, size_t index, const char *label);