diff --git a/libretro-common/file/file_list.c b/libretro-common/file/file_list.c index d8c18c09a4..2a59da0df4 100644 --- a/libretro-common/file/file_list.c +++ b/libretro-common/file/file_list.c @@ -32,10 +32,14 @@ void file_list_push(file_list_t *list, { if (list->size >= list->capacity) { - list->capacity++; + list->capacity += 1; list->capacity *= 2; + list->list = (struct item_file*)realloc(list->list, list->capacity * sizeof(struct item_file)); + + if (!list->list) + return; } list->list[list->size].label = NULL; @@ -68,6 +72,9 @@ size_t file_list_get_directory_ptr(const file_list_t *list) void file_list_pop(file_list_t *list, size_t *directory_ptr) { + if (!list) + return; + if (list->size != 0) { --list->size; @@ -116,6 +123,9 @@ void file_list_clear(file_list_t *list) { size_t i; + if (!list) + return; + for (i = 0; i < list->size; i++) { if (list->list[i].path) @@ -138,12 +148,18 @@ void file_list_copy(file_list_t *list, file_list_t *list_old) { size_t i; + if (!list) + return; + list_old->size = list->size; list_old->capacity = list->capacity; list_old->list = (struct item_file*)realloc(list_old->list, list_old->capacity * sizeof(struct item_file)); + if (!list_old->list) + return; + for (i = 0; i < list->size; i++) { list_old->list[i].path = NULL; @@ -166,6 +182,9 @@ void file_list_copy(file_list_t *list, file_list_t *list_old) void file_list_set_label_at_offset(file_list_t *list, size_t idx, const char *label) { + if (!list) + return; + if (list->list[idx].label) free(list->list[idx].label); list->list[idx].alt = NULL; @@ -177,7 +196,7 @@ void file_list_set_label_at_offset(file_list_t *list, size_t idx, void file_list_get_label_at_offset(const file_list_t *list, size_t idx, const char **label) { - if (!label) + if (!label || !list) return; *label = list->list[idx].path; @@ -188,6 +207,9 @@ void file_list_get_label_at_offset(const file_list_t *list, size_t idx, void file_list_set_alt_at_offset(file_list_t *list, size_t idx, const char *alt) { + if (!list) + return; + if (list->list[idx].alt) free(list->list[idx].alt); list->list[idx].alt = NULL; @@ -199,6 +221,9 @@ void file_list_set_alt_at_offset(file_list_t *list, size_t idx, void file_list_get_alt_at_offset(const file_list_t *list, size_t idx, const char **alt) { + if (!list) + return; + if (alt) *alt = list->list[idx].alt ? list->list[idx].alt : list->list[idx].path; @@ -259,6 +284,9 @@ void *file_list_get_last_actiondata(const file_list_t *list) void file_list_get_at_offset(const file_list_t *list, size_t idx, const char **path, const char **label, unsigned *file_type) { + if (!list) + return; + if (path) *path = list->list[idx].path; if (label) @@ -271,6 +299,9 @@ void file_list_get_last(const file_list_t *list, const char **path, const char **label, unsigned *file_type) { + if (!list) + return; + if (list->size) file_list_get_at_offset(list, list->size - 1, path, label, file_type); } @@ -281,6 +312,9 @@ bool file_list_search(const file_list_t *list, const char *needle, size_t *idx) const char *alt; bool ret = false; + if (!list) + return false; + for (i = 0; i < list->size; i++) { const char *str;