aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/config.c7
-rw-r--r--src/main.c19
2 files changed, 25 insertions, 1 deletions
diff --git a/src/config.c b/src/config.c
index 88f4c84..b268057 100644
--- a/src/config.c
+++ b/src/config.c
@@ -37,11 +37,16 @@ config_parse(char *content)
list_add(array_values, l);
list_add(values, wrap_ptr(NULL));
+
+ free(l);
} else {
+ list_t *l = list_create(sizeof(ptr_wrapper_t));
char *value = trim(strsep(&buffer, "\n"));
- list_add(array_values, wrap_ptr(NULL));
+ list_add(array_values, l);
list_add(values, wrap_ptr(strdup(value)));
+
+ free(l);
}
key = trim(strsep(&buffer, DELIM));
diff --git a/src/main.c b/src/main.c
index d783f1a..e0dac0d 100644
--- a/src/main.c
+++ b/src/main.c
@@ -135,6 +135,25 @@ 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);
return EXIT_SUCCESS;