From 2156bb43a1dea5f6ce35046ed69f4449f1dc4556 Mon Sep 17 00:00:00 2001 From: twinaphex <libretro@gmail.com> Date: Sun, 25 Dec 2016 01:46:32 +0100 Subject: [PATCH] Be more careful with allocation and assignment --- core_info.c | 31 ++++++++++++++++++------------- playlist.c | 37 ++++++++++++++++++------------------- 2 files changed, 36 insertions(+), 32 deletions(-) diff --git a/core_info.c b/core_info.c index cfde9a16b8..6239581762 100644 --- a/core_info.c +++ b/core_info.c @@ -45,7 +45,9 @@ static core_info_list_t *core_info_curr_list = NULL; static void core_info_list_resolve_all_extensions( core_info_list_t *core_info_list) { - size_t i, all_ext_len = 0; + size_t i = 0; + size_t all_ext_len = 0; + char *all_ext = NULL; if (!core_info_list) return; @@ -58,11 +60,13 @@ static void core_info_list_resolve_all_extensions( } if (all_ext_len) - core_info_list->all_ext = (char*)calloc(1, all_ext_len); + all_ext = (char*)calloc(1, all_ext_len); - if (!core_info_list->all_ext) + if (!all_ext) return; + core_info_list->all_ext = all_ext; + for (i = 0; i < core_info_list->count; i++) { if (!core_info_list->list[i].supported_extensions) @@ -80,24 +84,23 @@ static void core_info_list_resolve_all_firmware( size_t i; unsigned c; - if (!core_info_list) - return; - for (i = 0; i < core_info_list->count; i++) { - unsigned count = 0; - core_info_t *info = (core_info_t*)&core_info_list->list[i]; - config_file_t *config = (config_file_t*)info->config_data; + unsigned count = 0; + core_info_firmware_t *firmware = NULL; + core_info_t *info = (core_info_t*)&core_info_list->list[i]; + config_file_t *config = (config_file_t*)info->config_data; if (!config || !config_get_uint(config, "firmware_count", &count)) continue; - info->firmware = (core_info_firmware_t*) - calloc(count, sizeof(*info->firmware)); + firmware = (core_info_firmware_t*)calloc(count, sizeof(*firmware)); - if (!info->firmware) + if (!firmware) continue; + info->firmware = firmware; + for (c = 0; c < count; c++) { char path_key[64]; @@ -366,7 +369,9 @@ static core_info_list_t *core_info_list_new(const char *path) } core_info_list_resolve_all_extensions(core_info_list); - core_info_list_resolve_all_firmware(core_info_list); + + if (core_info_list) + core_info_list_resolve_all_firmware(core_info_list); dir_list_free(contents); return core_info_list; diff --git a/playlist.c b/playlist.c index e9407feb16..034987fc31 100644 --- a/playlist.c +++ b/playlist.c @@ -310,16 +310,16 @@ bool playlist_push(playlist_t *playlist, memmove(playlist->entries + 1, playlist->entries, (playlist->cap - 1) * sizeof(struct playlist_entry)); - playlist->entries[0].path = NULL; - playlist->entries[0].label = NULL; - playlist->entries[0].core_path = NULL; - playlist->entries[0].core_name = NULL; - playlist->entries[0].db_name = NULL; - playlist->entries[0].crc32 = NULL; + playlist->entries[0].path = NULL; + playlist->entries[0].label = NULL; + playlist->entries[0].core_path = NULL; + playlist->entries[0].core_name = NULL; + playlist->entries[0].db_name = NULL; + playlist->entries[0].crc32 = NULL; if (!string_is_empty(path)) - playlist->entries[0].path = strdup(path); + playlist->entries[0].path = strdup(path); if (!string_is_empty(label)) - playlist->entries[0].label = strdup(label); + playlist->entries[0].label = strdup(label); if (!string_is_empty(core_path)) playlist->entries[0].core_path = strdup(core_path); if (!string_is_empty(core_name)) @@ -507,26 +507,25 @@ end: **/ playlist_t *playlist_init(const char *path, size_t size) { - playlist_t *playlist = (playlist_t*) - calloc(1, sizeof(*playlist)); + struct playlist_entry *entries = NULL; + playlist_t *playlist = (playlist_t*)calloc(1, sizeof(*playlist)); if (!playlist) return NULL; - playlist->entries = (struct playlist_entry*)calloc(size, - sizeof(*playlist->entries)); - if (!playlist->entries) - goto error; + entries = (struct playlist_entry*)calloc(size, sizeof(*entries)); + if (!entries) + { + free(playlist); + return NULL; + } - playlist->cap = size; + playlist->entries = entries; + playlist->cap = size; playlist_read_file(playlist, path); playlist->conf_path = strdup(path); return playlist; - -error: - playlist_free(playlist); - return NULL; } static int playlist_qsort_func(const struct playlist_entry *a,