diff options
-rw-r--r-- | include/config.h | 1 | ||||
-rw-r--r-- | src/config.c | 25 | ||||
-rw-r--r-- | src/main.c | 21 |
3 files changed, 27 insertions, 20 deletions
diff --git a/include/config.h b/include/config.h index 4451054..911a59c 100644 --- a/include/config.h +++ b/include/config.h @@ -13,6 +13,7 @@ typedef struct { } config_t; config_t *config_parse(char *content); +void config_delete(config_t *config); config_t *config_fetch_and_parse(char *path); #endif diff --git a/src/config.c b/src/config.c index 46a3ad2..94eb18d 100644 --- a/src/config.c +++ b/src/config.c @@ -62,6 +62,31 @@ config_parse(char *content) return config; } +void +config_delete(config_t *config) +{ + for (size_t i = 0; i < config->keys->size; i++) { + ptr_wrapper_t *wrapper; + + wrapper = list_get(config->values, i); + if (wrapper->ptr != NULL) + free(wrapper->ptr); + + list_t *l = list_get(config->array_values, i); + for (size_t y = 0; y < l->size; y++) { + wrapper = list_get(l, y); + + if (wrapper->ptr != NULL) + free(wrapper->ptr); + } + } + + list_delete(config->keys); + list_delete(config->values); + list_delete(config->array_values); + free(config); +} + config_t * config_fetch_and_parse(char *path) { @@ -129,26 +129,7 @@ main(int argc, char **argv) handle_file(path); } - for (size_t i = 0; i < config->keys->size; i++) { - ptr_wrapper_t *wrapper; - - wrapper = list_get(config->values, i); - if (wrapper->ptr != NULL) - free(wrapper->ptr); - - list_t *l = list_get(config->array_values, i); - for (size_t y = 0; y < l->size; y++) { - wrapper = list_get(l, y); - - if (wrapper->ptr != NULL) - free(wrapper->ptr); - } - } - - list_delete(config->keys); - list_delete(config->values); - list_delete(config->array_values); - free(config); + config_delete(config); return EXIT_SUCCESS; } |