summaryrefslogtreecommitdiff
path: root/src/include/xml/free.c
diff options
context:
space:
mode:
authorbpc2003 <wpesfriendnva@gmail.com>2025-05-20 14:03:29 -0400
committerbpc2003 <wpesfriendnva@gmail.com>2025-05-20 14:03:29 -0400
commit1abda4d6d97c3386694f85fe5f7cc6844ade67c2 (patch)
treea4352fbac2513c90c5e33de21e39e90117c7ea02 /src/include/xml/free.c
parentd697d2c3b3d74e642691d8be36ff771485e02924 (diff)
Add freemap function
Diffstat (limited to 'src/include/xml/free.c')
-rw-r--r--src/include/xml/free.c36
1 files changed, 36 insertions, 0 deletions
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 <stdlib.h>
+
+#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);
+}