summaryrefslogtreecommitdiffstats
path: root/src/utils/list.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils/list.c')
-rw-r--r--src/utils/list.c29
1 files changed, 23 insertions, 6 deletions
diff --git a/src/utils/list.c b/src/utils/list.c
index c5152a3..030c759 100644
--- a/src/utils/list.c
+++ b/src/utils/list.c
@@ -25,14 +25,31 @@ void destroy_list(struct list* l)
struct list* save;
while (l != NULL) {
save = l->next;
+ free(l->key);
free(l);
l = save;
}
}
-void add_elt(struct list** l, const char* key, json_object* value)
+void add_elt(struct list** l, const char* key, const char* suffix, json_object* value)
{
- struct list* new_elt;
+ struct list* new_elt = NULL;
+ char *suffixed_key = NULL;
+ size_t key_len = strlen(key), suffix_len = -1;
+
+ if (suffix == NULL) {
+ suffix = "";
+ suffix_len=0;
+ } else {
+ suffix_len = strlen(suffix);
+ }
+ suffixed_key = malloc(key_len + suffix_len + 1);
+ if (!suffixed_key) {
+ fprintf(stderr, "list.c, add_elt() : can't allocate 'suffixed_key' (out of memory)");
+ exit(1);
+ }
+ strncpy(suffixed_key, key, key_len);
+ strncpy(suffixed_key+key_len, suffix, suffix_len+1);
// search tail
new_elt = *l;
@@ -44,19 +61,19 @@ void add_elt(struct list** l, const char* key, json_object* value)
// alloc new elem
new_elt = malloc(sizeof(struct list));
if (!new_elt) {
- fprintf(stderr, "OUT of memory");
+ fprintf(stderr, "list.c, add_elt() : can't allocate 'new_elt' (out of memory)");
exit(1);
}
*l = new_elt;
- new_elt->key = key;
+ new_elt->key = suffixed_key;
new_elt->value = value;
new_elt->next = NULL;
}
-void add_key(struct list** l, const char* key)
+void add_key(struct list** l, const char* key, const char* suffix)
{
- add_elt(l, key, NULL);
+ add_elt(l, key, suffix, NULL);
}
int set_value(struct list* l, json_object* val, int index)