From f7d4cc25e51cdc2e2478d3f0f1ab8793ae890354 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sun, 20 Mar 2016 15:56:33 +0100 Subject: [PATCH] (libretro-common) file_list.c --- libretro-common/include/lists/file_list.h | 2 +- libretro-common/lists/file_list.c | 50 +++++++++++++++++------ 2 files changed, 39 insertions(+), 13 deletions(-) diff --git a/libretro-common/include/lists/file_list.h b/libretro-common/include/lists/file_list.h index b47b13311d..a50dbe8ba7 100644 --- a/libretro-common/include/lists/file_list.h +++ b/libretro-common/include/lists/file_list.h @@ -61,7 +61,7 @@ void *file_list_get_actiondata_at_offset(const file_list_t *list, void file_list_free(file_list_t *list); -void file_list_push(file_list_t *userdata, const char *path, +bool file_list_push(file_list_t *userdata, const char *path, const char *label, unsigned type, size_t current_directory_ptr, size_t entry_index); diff --git a/libretro-common/lists/file_list.c b/libretro-common/lists/file_list.c index e713bdf836..34de124ae3 100644 --- a/libretro-common/lists/file_list.c +++ b/libretro-common/lists/file_list.c @@ -20,29 +20,53 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +#include #include #include +#include #include #include #include -void file_list_push(file_list_t *list, +/** + * string_list_capacity: + * @list : pointer to string list + * @cap : new capacity for string list. + * + * Change maximum capacity of string list's size. + * + * Returns: true (1) if successful, otherwise false (0). + **/ +static bool file_list_capacity(file_list_t *list, size_t cap) +{ + struct item_file *new_data = NULL; + retro_assert(cap > list->size); + + new_data = (struct item_file*)realloc(list->list, + cap * sizeof(struct item_file)); + + if (!new_data) + return false; + + if (cap > list->capacity) + memset(&new_data[list->capacity], 0, + sizeof(*new_data) * (cap - list->capacity)); + + list->list = new_data; + list->capacity = cap; + + return true; +} + +bool file_list_push(file_list_t *list, const char *path, const char *label, unsigned type, size_t directory_ptr, size_t entry_idx) { - if (list->size >= 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; - } + if (list->size >= list->capacity && + !file_list_capacity(list, list->capacity * 2 + 1)) + return false; list->list[list->size].label = NULL; list->list[list->size].path = NULL; @@ -59,6 +83,8 @@ void file_list_push(file_list_t *list, list->list[list->size].path = strdup(path); list->size++; + + return true; } size_t file_list_get_size(const file_list_t *list)