1 #include "pEp_internal.h"
7 #include "stringpair.h"
9 DYNAMIC_API stringpair_t * new_stringpair(const char *key, const char *value)
11 stringpair_t *pair = NULL;
16 pair = calloc(1, sizeof(stringpair_t));
21 pair->key = strdup(key);
23 if (pair->key == NULL)
26 pair->value = strdup(value);
28 if (pair->value == NULL)
34 free_stringpair(pair);
38 DYNAMIC_API void free_stringpair(stringpair_t * pair)
47 DYNAMIC_API stringpair_t * stringpair_dup(const stringpair_t *src)
50 return new_stringpair(src->key, src->value);
53 DYNAMIC_API stringpair_list_t *new_stringpair_list(stringpair_t *value)
55 stringpair_list_t *result = calloc(1, sizeof(stringpair_list_t));
59 result->value = value;
64 DYNAMIC_API stringpair_list_t *stringpair_list_dup(
65 const stringpair_list_t *src
72 stringpair_list_t *dst = new_stringpair_list(src->value);
77 dst->next = stringpair_list_dup(src->next);
78 if (dst->next == NULL) {
79 free_stringpair_list(dst);
87 DYNAMIC_API stringpair_list_t *stringpair_list_add(
88 stringpair_list_t *stringpair_list,
94 if (stringpair_list == NULL)
95 return new_stringpair_list(value);
97 if (stringpair_list->next)
98 return stringpair_list_add(stringpair_list->next, value);
100 if (stringpair_list->value == NULL) {
101 stringpair_list->value = value;
102 return stringpair_list;
105 stringpair_list->next = new_stringpair_list(value);
106 if (stringpair_list->next == NULL)
109 return stringpair_list->next;
112 DYNAMIC_API stringpair_list_t *stringpair_list_append(
113 stringpair_list_t *stringpair_list,
114 stringpair_list_t *second
117 assert(stringpair_list);
119 if (second == NULL || second->value == NULL)
120 return stringpair_list;
122 stringpair_list_t *_s = stringpair_list;
123 stringpair_list_t *_s2;
124 for (_s2 = second; _s2 != NULL; _s2 = _s2->next) {
125 _s = stringpair_list_add(_s, _s2->value);
132 DYNAMIC_API int stringpair_list_length(
133 const stringpair_list_t *stringpair_list
137 stringpair_list_t *_stringpair_list;
139 assert(stringpair_list);
141 if (stringpair_list->value == NULL)
144 for (_stringpair_list=stringpair_list->next; _stringpair_list!=NULL;
145 _stringpair_list=_stringpair_list->next)
151 DYNAMIC_API void free_stringpair_list(stringpair_list_t *stringpair_list)
153 if (stringpair_list) {
154 free_stringpair_list(stringpair_list->next);
155 free_stringpair(stringpair_list->value);
156 free(stringpair_list);
160 DYNAMIC_API stringpair_list_t *stringpair_list_find(
161 stringpair_list_t *stringpair_list,
167 stringpair_list_t *_l;
168 for (_l = stringpair_list; _l; _l = _l->next) {
169 if (strcoll(key, _l->value->key) == 0)