From 1abda4d6d97c3386694f85fe5f7cc6844ade67c2 Mon Sep 17 00:00:00 2001 From: bpc2003 Date: Tue, 20 May 2025 14:03:29 -0400 Subject: Add freemap function --- src/include/xml/free.c | 36 ++++++++++++++++++++++++++++++++++++ src/test.c | 15 +-------------- 2 files changed, 37 insertions(+), 14 deletions(-) create mode 100644 src/include/xml/free.c (limited to 'src') diff --git a/src/include/xml/free.c b/src/include/xml/free.c new file mode 100644 index 0000000..bbf3369 --- /dev/null +++ b/src/include/xml/free.c @@ -0,0 +1,36 @@ +#include + +#include "xml.h" + +void freemap(map_t *map) +{ + if (map->n_attrs) { + for (int i = 0; i < map->n_attrs; ++i) { + free(map->attrs[i].id); + free(map->attrs[i].value); + } + free(map->attrs); + } + if(map->size == sizeof(map_t)) { + for (int i = 0; i < map->n; ++i) { + map_t *pl = (map_t *)map->payload; + if (pl[i].n_attrs) { + for (int j = 0; j < pl[i].n_attrs; ++j) { + free(pl[i].attrs[j].id); + free(pl[i].attrs[j].value); + } + free(pl[i].attrs); + } + if (pl[i].size == sizeof(map_t)) + freemap(pl[i].payload); + else + free(pl[i].payload); + free(pl[i].tag); + } + free(map->payload); + } + else + free(map->payload); + free(map->tag); + free(map); +} diff --git a/src/test.c b/src/test.c index 80e8b39..c6e7f22 100644 --- a/src/test.c +++ b/src/test.c @@ -268,20 +268,7 @@ void test_decode(void) map_t *map = decode(xml, &start, &len); printf("%s\n", (xml = encode(map, 1))); free(xml); - // TODO: create a freemap function - free(map->tag); - free(map->attrs[0].id); - free(map->attrs[0].value); - free(map->attrs[1].id); - free(map->attrs[1].value); - free(map->attrs); - map_t *pl = (map_t *) map->payload; - free(pl[0].tag); - free(pl[1].tag); - free(pl[0].payload); - free(pl[1].payload); - free(map->payload); - free(map); + freemap(map); } int main(void) -- cgit v1.2.3