diff options
Diffstat (limited to 'src/util/container_slist.c')
-rw-r--r-- | src/util/container_slist.c | 63 |
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 | */ |
160 | void | 161 | void |
161 | GNUNET_CONTAINER_slist_add_end (struct GNUNET_CONTAINER_SList *l, | 162 | GNUNET_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 | */ |
182 | void | 183 | void |
183 | GNUNET_CONTAINER_slist_append (struct GNUNET_CONTAINER_SList *dst, struct GNUNET_CONTAINER_SList *src) | 184 | GNUNET_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 | */ |
396 | void | 400 | void |
397 | GNUNET_CONTAINER_slist_iter_destroy (struct GNUNET_CONTAINER_SList_Iterator | 401 | GNUNET_CONTAINER_slist_iter_destroy (struct GNUNET_CONTAINER_SList_Iterator *i) |
398 | *i) | ||
399 | { | 402 | { |
400 | GNUNET_free (i); | 403 | GNUNET_free (i); |
401 | } | 404 | } |