5 #include "stringlist.h"
8 DYNAMIC_API stringlist_t *new_stringlist(const char *value)
10 stringlist_t *result = (stringlist_t *) calloc(1, sizeof(stringlist_t));
11 if (result && value) {
12 result->value = strdup(value);
13 assert(result->value);
14 if (result->value == 0) {
22 DYNAMIC_API stringlist_t *stringlist_dup(const stringlist_t *src)
28 stringlist_t *dst = new_stringlist(src->value);
33 dst->next = stringlist_dup(src->next);
34 if (dst->next == NULL) {
43 DYNAMIC_API stringlist_t *stringlist_add(stringlist_t *stringlist, const char *value)
47 if (stringlist == NULL)
48 return new_stringlist(value);
50 if (stringlist->next != NULL)
51 return stringlist_add(stringlist->next, value);
52 if (stringlist->value == NULL) {
53 stringlist->value = strdup(value);
54 assert(stringlist->value);
55 if (stringlist->value == NULL)
60 stringlist->next = new_stringlist(value);
61 assert(stringlist->next);
62 if (stringlist->next == NULL)
65 return stringlist->next;
68 DYNAMIC_API stringlist_t *stringlist_append(stringlist_t *stringlist,
73 if (second == NULL || second->value == NULL)
76 stringlist_t *_s = stringlist;
78 for (_s2 = second; _s2 != NULL; _s2 = _s2->next) {
79 _s = stringlist_add(_s, _s2->value);
86 DYNAMIC_API int stringlist_length(const stringlist_t *stringlist)
89 stringlist_t *_stringlist;
93 if (stringlist->value == NULL)
96 for (_stringlist=stringlist->next; _stringlist!=NULL; _stringlist=_stringlist->next)
102 DYNAMIC_API void free_stringlist(stringlist_t *stringlist)
105 free_stringlist(stringlist->next);
106 free(stringlist->value);