diff options
author | bpc2003 <wpesfriendnva@gmail.com> | 2025-05-20 14:40:47 -0400 |
---|---|---|
committer | bpc2003 <wpesfriendnva@gmail.com> | 2025-05-20 14:40:47 -0400 |
commit | bf76b8c582ed9c541438ebe90fc6415fb82f2ed3 (patch) | |
tree | a5cd3d6e77c21867784c34d0728046d202a08d34 /src/include/xml | |
parent | 1abda4d6d97c3386694f85fe5f7cc6844ade67c2 (diff) |
Add Formatting
Diffstat (limited to 'src/include/xml')
-rw-r--r-- | src/include/xml/decode.c | 44 | ||||
-rw-r--r-- | src/include/xml/encode.c | 79 | ||||
-rw-r--r-- | src/include/xml/free.c | 8 | ||||
-rw-r--r-- | src/include/xml/xml.h | 19 |
4 files changed, 71 insertions, 79 deletions
diff --git a/src/include/xml/decode.c b/src/include/xml/decode.c index 6a163bb..14af551 100644 --- a/src/include/xml/decode.c +++ b/src/include/xml/decode.c @@ -10,10 +10,11 @@ static int check_closing_tag(char *xml, int *pos, char *tag, int *err); static void set_tag(char *xml, map_t **map, int *closed, int *pos); static void set_value(char *xml, int *pos, map_t **map); -map_t *decode(char *xml, int *pos, int *len) -{ - if (*len) ++(*len); - else *len = 1; +map_t *decode(char *xml, int *pos, int *len) { + if (*len) + ++(*len); + else + *len = 1; map_t *decoded = calloc(1, sizeof(map_t)); int err = 0, closed = 1; @@ -28,10 +29,11 @@ map_t *decode(char *xml, int *pos, int *len) map_t *ndec = decode(xml, &i, &(decoded->n)); decoded->size = sizeof(map_t); if (decoded->n > 1) - decoded->payload = realloc(decoded->payload, decoded->n * sizeof(map_t)); + decoded->payload = + realloc(decoded->payload, decoded->n * sizeof(map_t)); else decoded->payload = calloc(1, sizeof(map_t)); - ((map_t *) decoded->payload)[decoded->n - 1] = *ndec; + ((map_t *)decoded->payload)[decoded->n - 1] = *ndec; free(ndec); } else set_value(xml, &i, &decoded); @@ -43,8 +45,7 @@ map_t *decode(char *xml, int *pos, int *len) return decoded; } -static char *get_tag(char *xml, int *pos) -{ +static char *get_tag(char *xml, int *pos) { int len, i; for (i = *pos, len = 0; xml[i] != '>' && i < strlen(xml); ++i, ++len) ; @@ -56,8 +57,7 @@ static char *get_tag(char *xml, int *pos) return title; } -static void set_value(char *xml, int *pos, map_t **map) -{ +static void set_value(char *xml, int *pos, map_t **map) { int len, i; for (i = *pos, len = 0; xml[i] != '<' && i < strlen(xml); ++i, ++len) ; @@ -71,8 +71,7 @@ static void set_value(char *xml, int *pos, map_t **map) *pos += len - 1; } -static attr_t *get_attrs(char *parsed, char **tag, int *n_attrs) -{ +static attr_t *get_attrs(char *parsed, char **tag, int *n_attrs) { attr_t *attrs; char *iter = strtok(parsed, " "); *tag = calloc(strlen(iter) + 1, sizeof(char)); @@ -84,7 +83,7 @@ static attr_t *get_attrs(char *parsed, char **tag, int *n_attrs) free(parsed); return NULL; } - + int pos = 0; do { if (!iter) @@ -92,14 +91,13 @@ static attr_t *get_attrs(char *parsed, char **tag, int *n_attrs) int i, len = strlen(iter); for (i = 0; i < len && iter[i] != '='; ++i) ; - if (i >= len || - (iter[i] == '=' && i >= len - 1) || + if (i >= len || (iter[i] == '=' && i >= len - 1) || (iter[i + 1] != '\'' && iter[i + 1] != '"')) { free(parsed); free(attrs); return NULL; } - + char *name = calloc(i + 1, sizeof(char)); char *value = calloc(len - i, sizeof(char)); strncpy(name, iter, i); @@ -110,23 +108,21 @@ static attr_t *get_attrs(char *parsed, char **tag, int *n_attrs) attrs = realloc(attrs, (*n_attrs *= 2) * sizeof(attr_t)); attrs[pos].id = name; attrs[pos++].value = value; - } while((iter = strtok(NULL, " "))); - + } while ((iter = strtok(NULL, " "))); + *n_attrs = pos; free(parsed); return attrs; } -static void set_tag(char *xml, map_t **map, int *closed, int *pos) -{ +static void set_tag(char *xml, map_t **map, int *closed, int *pos) { (*pos)++; - (*map)->attrs = get_attrs(get_tag(xml, pos), - &((*map)->tag), &((*map)->n_attrs)); + (*map)->attrs = + get_attrs(get_tag(xml, pos), &((*map)->tag), &((*map)->n_attrs)); *closed = 0; } -static int check_closing_tag(char *xml, int *pos, char *tag, int *err) -{ +static int check_closing_tag(char *xml, int *pos, char *tag, int *err) { if (!strncmp(xml + *pos, "</", 2)) { *pos += 2; char *tmp = get_tag(xml, pos); diff --git a/src/include/xml/encode.c b/src/include/xml/encode.c index 9e76c69..60e418d 100644 --- a/src/include/xml/encode.c +++ b/src/include/xml/encode.c @@ -1,52 +1,49 @@ #include <stdio.h> -#include <string.h> #include <stdlib.h> +#include <string.h> #include "xml.h" static void check(char **str, int *len, int *used, int n); -char *encode(map_t *map, int len) -{ - int slen = 128, used = 0; - char *str = calloc(slen, sizeof(char)); +char *encode(map_t *map, int len) { + int slen = 128, used = 0; + char *str = calloc(slen, sizeof(char)); - char buf[64]; - for (int i = 0; i < len; ++i) { - check(&str, &slen, &used, snprintf(buf, 64, "<%s", map[i].tag)); - strcat(str, buf); - if (map[i].attrs != NULL) { - for (int j = 0; j < map[i].n_attrs; ++j) { - check(&str, &slen, &used, - snprintf(buf, 64, " %s='%s'", - map[i].attrs[j].id, map[i].attrs[j].value)); - strcat(str, buf); - } - } - check(&str, &slen, &used, 1); - strcat(str, ">"); - if (map[i].size == sizeof(map_t)) { - char *rt = encode((map_t *) map[i].payload, map[i].n); - if (rt == NULL) - return NULL; - check(&str, &slen, &used, strlen(rt)); - strcat(str, rt); - free(rt); - } else if (map[i].size == sizeof(char)) { - check(&str, &slen, &used, map[i].n); - strcat(str, map[i].payload); - } - else - return NULL; - check(&str, &slen, &used, snprintf(buf, 64, "</%s>", map[i].tag)); - strcat(str, buf); - } - return str; + char buf[64]; + for (int i = 0; i < len; ++i) { + check(&str, &slen, &used, snprintf(buf, 64, "<%s", map[i].tag)); + strcat(str, buf); + if (map[i].attrs != NULL) { + for (int j = 0; j < map[i].n_attrs; ++j) { + check(&str, &slen, &used, + snprintf(buf, 64, " %s='%s'", map[i].attrs[j].id, + map[i].attrs[j].value)); + strcat(str, buf); + } + } + check(&str, &slen, &used, 1); + strcat(str, ">"); + if (map[i].size == sizeof(map_t)) { + char *rt = encode((map_t *)map[i].payload, map[i].n); + if (rt == NULL) + return NULL; + check(&str, &slen, &used, strlen(rt)); + strcat(str, rt); + free(rt); + } else if (map[i].size == sizeof(char)) { + check(&str, &slen, &used, map[i].n); + strcat(str, map[i].payload); + } else + return NULL; + check(&str, &slen, &used, snprintf(buf, 64, "</%s>", map[i].tag)); + strcat(str, buf); + } + return str; } -static void check(char **str, int *len, int *used, int n) -{ - if (*used + n >= *len) - *str = realloc(*str, (*len *= 2)); - *used += n; +static void check(char **str, int *len, int *used, int n) { + if (*used + n >= *len) + *str = realloc(*str, (*len *= 2)); + *used += n; } diff --git a/src/include/xml/free.c b/src/include/xml/free.c index bbf3369..b23b379 100644 --- a/src/include/xml/free.c +++ b/src/include/xml/free.c @@ -2,8 +2,7 @@ #include "xml.h" -void freemap(map_t *map) -{ +void freemap(map_t *map) { if (map->n_attrs) { for (int i = 0; i < map->n_attrs; ++i) { free(map->attrs[i].id); @@ -11,7 +10,7 @@ void freemap(map_t *map) } free(map->attrs); } - if(map->size == sizeof(map_t)) { + 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) { @@ -28,8 +27,7 @@ void freemap(map_t *map) free(pl[i].tag); } free(map->payload); - } - else + } else free(map->payload); free(map->tag); free(map); diff --git a/src/include/xml/xml.h b/src/include/xml/xml.h index ff64796..c812005 100644 --- a/src/include/xml/xml.h +++ b/src/include/xml/xml.h @@ -3,21 +3,22 @@ #include <stdio.h> - typedef struct { - char *id; - char *value; + char *id; + char *value; } attr_t; typedef struct { - char *tag; - void *payload; - size_t size; - int n; - attr_t *attrs; - int n_attrs; + char *tag; + void *payload; + size_t size; + int n; + attr_t *attrs; + int n_attrs; } map_t; +// TODO: make encode more reliant on helpers +// to make function more private /* decode: decodes the provided xml statement into a map_t */ map_t *decode(char *xml, int *pos, int *len); |