diff options
Diffstat (limited to 'src/config.c')
-rw-r--r-- | src/config.c | 150 |
1 files changed, 75 insertions, 75 deletions
diff --git a/src/config.c b/src/config.c index 0d09bb1..1ca48a4 100644 --- a/src/config.c +++ b/src/config.c @@ -29,97 +29,97 @@ config_t * config_parse(char *content) { - list_t *keys = list_create(sizeof(ptr_wrapper_t)); - list_t *values = list_create(sizeof(ptr_wrapper_t)); - list_t *array_values = list_create(sizeof(ptr_wrapper_t)); - - char *buffer = strdup(content); - /* For free() */ - char *x = buffer; - - char *key = trim(strsep(&buffer, DELIM)); - - while (buffer != NULL) { - buffer = ltrim(buffer); - list_wrap_and_add(keys, strdup(key)); - - if (*buffer == '{') { - buffer++; - list_t *l = list_create(sizeof(ptr_wrapper_t)); - char *raw_array = strsep(&buffer, "}"); - - char *value = strsep(&raw_array, DELIM_ARRAY); - while (value != NULL) { - list_wrap_and_add(l, strdup(trim(value))); - value = strsep(&raw_array, DELIM_ARRAY); - } - - list_wrap_and_add(array_values, l); - list_wrap_and_add(values, NULL); - } else { - char *value = trim(strsep(&buffer, "\n")); - - list_wrap_and_add(array_values, NULL); - list_wrap_and_add(values, strdup(value)); - } + list_t *keys = list_create(sizeof(ptr_wrapper_t)); + list_t *values = list_create(sizeof(ptr_wrapper_t)); + list_t *array_values = list_create(sizeof(ptr_wrapper_t)); + + char *buffer = strdup(content); + /* For free() */ + char *x = buffer; + + char *key = trim(strsep(&buffer, DELIM)); + + while (buffer != NULL) { + buffer = ltrim(buffer); + list_wrap_and_add(keys, strdup(key)); + + if (*buffer == '{') { + buffer++; + list_t *l = list_create(sizeof(ptr_wrapper_t)); + char *raw_array = strsep(&buffer, "}"); - key = trim(strsep(&buffer, DELIM)); - } + char *value = strsep(&raw_array, DELIM_ARRAY); + while (value != NULL) { + list_wrap_and_add(l, strdup(trim(value))); + value = strsep(&raw_array, DELIM_ARRAY); + } - free(x); + list_wrap_and_add(array_values, l); + list_wrap_and_add(values, NULL); + } else { + char *value = trim(strsep(&buffer, "\n")); - config_t *config = malloc(sizeof(config_t)); - config->keys = keys; - config->values = values; - config->array_values = array_values; - return config; + list_wrap_and_add(array_values, NULL); + list_wrap_and_add(values, strdup(value)); + } + + key = trim(strsep(&buffer, DELIM)); + } + + free(x); + + config_t *config = malloc(sizeof(config_t)); + config->keys = keys; + config->values = values; + config->array_values = array_values; + 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->keys, i); - if (wrapper->ptr != NULL) - free(wrapper->ptr); - - wrapper = list_get(config->values, i); - if (wrapper->ptr != NULL) - free(wrapper->ptr); - - list_t *l = unwrap(list_get(config->array_values, i)); - if (l != NULL) { - for (size_t y = 0; y < l->size; y++) { - wrapper = list_get(l, y); - free(wrapper->ptr); - } - list_delete(l); + for (size_t i = 0; i < config->keys->size; i++) { + ptr_wrapper_t *wrapper; + + wrapper = list_get(config->keys, i); + if (wrapper->ptr != NULL) + free(wrapper->ptr); + + wrapper = list_get(config->values, i); + if (wrapper->ptr != NULL) + free(wrapper->ptr); + + list_t *l = unwrap(list_get(config->array_values, i)); + if (l != NULL) { + for (size_t y = 0; y < l->size; y++) { + wrapper = list_get(l, y); + free(wrapper->ptr); + } + list_delete(l); + } } - } - list_delete(config->keys); - list_delete(config->values); - list_delete(config->array_values); - free(config); + list_delete(config->keys); + list_delete(config->values); + list_delete(config->array_values); + free(config); } config_t * config_fetch_and_parse(char *path) { - FILE *f = fopen(path, "r"); - if (f == NULL) { - printf("Could not open %s\n", path); - return NULL; - } + FILE *f = fopen(path, "r"); + if (f == NULL) { + printf("Could not open %s\n", path); + return NULL; + } - size_t s = fsize(f); - char *content = fcontent(f, s); - fclose(f); + size_t s = fsize(f); + char *content = fcontent(f, s); + fclose(f); - config_t *config = config_parse(content); - free(content); + config_t *config = config_parse(content); + free(content); - return config; + return config; } |