aboutsummaryrefslogtreecommitdiff
path: root/src/util/container_slist.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/container_slist.c')
-rw-r--r--src/util/container_slist.c63
1 files changed, 33 insertions, 30 deletions
diff --git a/src/util/container_slist.c b/src/util/container_slist.c
index cecc74ce2..c06d70e91 100644
--- a/src/util/container_slist.c
+++ b/src/util/container_slist.c
@@ -113,16 +113,16 @@ create_elem (enum GNUNET_CONTAINER_SListDisposition disp,
113 struct GNUNET_CONTAINER_SList_Elem *e; 113 struct GNUNET_CONTAINER_SList_Elem *e;
114 114
115 if (disp == GNUNET_CONTAINER_SLIST_DISPOSITION_TRANSIENT) 115 if (disp == GNUNET_CONTAINER_SLIST_DISPOSITION_TRANSIENT)
116 { 116 {
117 e = GNUNET_malloc (sizeof (struct GNUNET_CONTAINER_SList_Elem) + len); 117 e = GNUNET_malloc (sizeof (struct GNUNET_CONTAINER_SList_Elem) + len);
118 memcpy (&e[1], buf, len); 118 memcpy (&e[1], buf, len);
119 e->elem = (void *) &e[1]; 119 e->elem = (void *) &e[1];
120 } 120 }
121 else 121 else
122 { 122 {
123 e = GNUNET_malloc (sizeof (struct GNUNET_CONTAINER_SList_Elem)); 123 e = GNUNET_malloc (sizeof (struct GNUNET_CONTAINER_SList_Elem));
124 e->elem = (void *) buf; 124 e->elem = (void *) buf;
125 } 125 }
126 e->disp = disp; 126 e->disp = disp;
127 e->len = len; 127 e->len = len;
128 return e; 128 return e;
@@ -146,7 +146,8 @@ GNUNET_CONTAINER_slist_add (struct GNUNET_CONTAINER_SList *l,
146 e = create_elem (disp, buf, len); 146 e = create_elem (disp, buf, len);
147 e->next = l->head; 147 e->next = l->head;
148 l->head = e; 148 l->head = e;
149 if (l->tail == NULL) l->tail = e; 149 if (l->tail == NULL)
150 l->tail = e;
150 l->length++; 151 l->length++;
151} 152}
152 153
@@ -159,8 +160,8 @@ GNUNET_CONTAINER_slist_add (struct GNUNET_CONTAINER_SList *l,
159 */ 160 */
160void 161void
161GNUNET_CONTAINER_slist_add_end (struct GNUNET_CONTAINER_SList *l, 162GNUNET_CONTAINER_slist_add_end (struct GNUNET_CONTAINER_SList *l,
162 enum GNUNET_CONTAINER_SListDisposition disp, 163 enum GNUNET_CONTAINER_SListDisposition disp,
163 const void *buf, size_t len) 164 const void *buf, size_t len)
164{ 165{
165 struct GNUNET_CONTAINER_SList_Elem *e; 166 struct GNUNET_CONTAINER_SList_Elem *e;
166 167
@@ -180,19 +181,22 @@ GNUNET_CONTAINER_slist_add_end (struct GNUNET_CONTAINER_SList *l,
180 * @param src source 181 * @param src source
181 */ 182 */
182void 183void
183GNUNET_CONTAINER_slist_append (struct GNUNET_CONTAINER_SList *dst, struct GNUNET_CONTAINER_SList *src) 184GNUNET_CONTAINER_slist_append (struct GNUNET_CONTAINER_SList *dst,
185 struct GNUNET_CONTAINER_SList *src)
184{ 186{
185 struct GNUNET_CONTAINER_SList_Iterator *i; 187 struct GNUNET_CONTAINER_SList_Iterator *i;
186 188
187 for (i = GNUNET_CONTAINER_slist_begin (src); GNUNET_CONTAINER_slist_end (i) != 189 for (i = GNUNET_CONTAINER_slist_begin (src); GNUNET_CONTAINER_slist_end (i) !=
188 GNUNET_YES; GNUNET_CONTAINER_slist_next (i)) 190 GNUNET_YES; GNUNET_CONTAINER_slist_next (i))
189 191
190 { 192 {
191 GNUNET_CONTAINER_slist_add (dst, 193 GNUNET_CONTAINER_slist_add (dst,
192 (i->elem->disp == GNUNET_CONTAINER_SLIST_DISPOSITION_STATIC) ? GNUNET_CONTAINER_SLIST_DISPOSITION_STATIC 194 (i->elem->disp ==
193 : GNUNET_CONTAINER_SLIST_DISPOSITION_TRANSIENT, i->elem->elem, 195 GNUNET_CONTAINER_SLIST_DISPOSITION_STATIC) ?
194 i->elem->len); 196 GNUNET_CONTAINER_SLIST_DISPOSITION_STATIC :
195 } 197 GNUNET_CONTAINER_SLIST_DISPOSITION_TRANSIENT,
198 i->elem->elem, i->elem->len);
199 }
196 GNUNET_CONTAINER_slist_iter_destroy (i); 200 GNUNET_CONTAINER_slist_iter_destroy (i);
197} 201}
198 202
@@ -249,13 +253,13 @@ GNUNET_CONTAINER_slist_clear (struct GNUNET_CONTAINER_SList *l)
249 253
250 e = l->head; 254 e = l->head;
251 while (e != NULL) 255 while (e != NULL)
252 { 256 {
253 n = e->next; 257 n = e->next;
254 if (e->disp == GNUNET_CONTAINER_SLIST_DISPOSITION_DYNAMIC) 258 if (e->disp == GNUNET_CONTAINER_SLIST_DISPOSITION_DYNAMIC)
255 GNUNET_free (e->elem); 259 GNUNET_free (e->elem);
256 GNUNET_free (e); 260 GNUNET_free (e);
257 e = n; 261 e = n;
258 } 262 }
259 l->head = NULL; 263 l->head = NULL;
260 l->tail = NULL; 264 l->tail = NULL;
261 l->length = 0; 265 l->length = 0;
@@ -394,8 +398,7 @@ GNUNET_CONTAINER_slist_get (const struct GNUNET_CONTAINER_SList_Iterator *i,
394 * @param i iterator 398 * @param i iterator
395 */ 399 */
396void 400void
397GNUNET_CONTAINER_slist_iter_destroy (struct GNUNET_CONTAINER_SList_Iterator 401GNUNET_CONTAINER_slist_iter_destroy (struct GNUNET_CONTAINER_SList_Iterator *i)
398 *i)
399{ 402{
400 GNUNET_free (i); 403 GNUNET_free (i);
401} 404}