From 46dc8642589272afcd993b364cc127489f571230 Mon Sep 17 00:00:00 2001 From: aliaspider Date: Tue, 26 Jan 2016 02:02:37 +0100 Subject: [PATCH] (libretro-db) c_converter: refactor creation/deletion of match_key objects. --- libretro-db/c_converter.c | 89 +++++++++++++++++++++------------------ 1 file changed, 49 insertions(+), 40 deletions(-) diff --git a/libretro-db/c_converter.c b/libretro-db/c_converter.c index 0cdf9dc5fc..306b4e587f 100644 --- a/libretro-db/c_converter.c +++ b/libretro-db/c_converter.c @@ -84,12 +84,6 @@ struct dat_converter_bt_node_t dat_converter_bt_node_t* left; }; -static int dat_converter_cmp_func(const void* a, const void* b, void* ctx) -{ - return strcmp(a, b); -} - - static dat_converter_list_t* dat_converter_list_create(dat_converter_list_enum type) { dat_converter_list_t* list = malloc(sizeof(*list)); @@ -365,7 +359,51 @@ struct dat_converter_match_key_t dat_converter_match_key_t* next; }; -static const char* dat_converter_get_match_key(dat_converter_list_t* list, dat_converter_match_key_t* match_key) +static dat_converter_match_key_t* dat_converter_match_key_create(const char* format) +{ + dat_converter_match_key_t* match_key; + dat_converter_match_key_t* current_mk; + char* dot; + + match_key = malloc(sizeof(*match_key)); + match_key->value = strdup(format); + match_key->next = NULL; + current_mk = match_key; + + dot = match_key->value; + while (*dot++) + { + if (*dot == '.') + { + *dot++ = '\0'; + current_mk->hash = djb2_calculate(current_mk->value); + current_mk->next = malloc(sizeof(*match_key)); + current_mk = current_mk->next; + current_mk->value = dot; + current_mk->next = NULL; + } + } + current_mk->hash = djb2_calculate(current_mk->value); + + return match_key; +} + +static void dat_converter_match_key_free(dat_converter_match_key_t* match_key) +{ + if(!match_key) + return; + + free(match_key->value); + + while(match_key) + { + dat_converter_match_key_t* next = match_key->next; + free(match_key); + match_key = next; + } +} + +static const char* dat_converter_get_match(dat_converter_list_t* list, dat_converter_match_key_t* match_key) { int i; @@ -381,7 +419,7 @@ static const char* dat_converter_get_match_key(dat_converter_list_t* list, dat_c assert(!strcmp(list->values[i].map.key, match_key->value)); if(match_key->next) - return dat_converter_get_match_key(list->values[i].map.value.list, match_key->next); + return dat_converter_get_match(list->values[i].map.value.list, match_key->next); else if ((list->values[i].map.type == DAT_CONVERTER_STRING_MAP)) return list->values[i].map.value.string; else @@ -431,7 +469,7 @@ static dat_converter_list_t* dat_converter_parser(dat_converter_list_t* target, { if (match_key) { - map.key = dat_converter_get_match_key(map.value.list, match_key); + map.key = dat_converter_get_match(map.value.list, match_key); if (!map.key) { printf("missing match key '"); @@ -690,29 +728,7 @@ int main(int argc, char** argv) if (argc > 1 && **argv) { - dat_converter_match_key_t* current_mk; - char* dot; - - match_key = malloc(sizeof(*match_key)); - match_key->value = strdup(*argv); - match_key->next = NULL; - current_mk = match_key; - - dot = match_key->value; - while (*dot++) - { - if (*dot == '.') - { - *dot++ = '\0'; - current_mk->hash = djb2_calculate(current_mk->value); - current_mk->next = malloc(sizeof(*match_key)); - current_mk = current_mk->next; - current_mk->value = dot; - current_mk->next = NULL; - } - } - current_mk->hash = djb2_calculate(current_mk->value); - + match_key = dat_converter_match_key_create(*argv); argc--; argv++; } @@ -775,15 +791,8 @@ int main(int argc, char** argv) free(dat_buffers[dat_count]); free(dat_buffers); - if(match_key) - free(match_key->value); + dat_converter_match_key_free(match_key); - while(match_key) - { - dat_converter_match_key_t* next = match_key->next; - free(match_key); - match_key = next; - } return 0; }