diff options
author | 2023-05-17 16:51:48 +0200 | |
---|---|---|
committer | 2023-05-17 16:51:48 +0200 | |
commit | fb1efe264854e2539d62da1d9dc019ffa8a899da (patch) | |
tree | 7f2e2dc2ac900bf9595e3cb5988ebb9cbae6a611 /src | |
parent | aa22d43ec96ce932cda68717deb3a414291b084b (diff) | |
download | utils-fb1efe264854e2539d62da1d9dc019ffa8a899da.tar.gz utils-fb1efe264854e2539d62da1d9dc019ffa8a899da.zip |
Divide in two functions the clist_add
In some cases, I need to retrieve the original pointer in list_item. So, the
clist_add() just adds the pointer to the list, and, clist_add_s() adds a
copy of that pointer to the list.
Diffstat (limited to 'src')
-rw-r--r-- | src/list.c | 23 | ||||
-rw-r--r-- | src/utils.h | 3 |
2 files changed, 18 insertions, 8 deletions
@@ -18,15 +18,11 @@ clist_create() void clist_add(list_t *list, - void *data, - size_t data_s) + void *data) { struct list_item_t *item = malloc(sizeof(struct list_item_t)); - void *dest = malloc(data_s); /* allocates memory like data parameter */ - memcpy(dest, data, data_s); /* copies data inside dest */ - item->data = dest; - item->data_s = data_s; + item->data = data; item->next = NULL; if (list->first == NULL) @@ -39,6 +35,19 @@ clist_add(list_t *list, list->size ++; } +void +clist_add_s(list_t *list, + void *data, + size_t data_s) +{ + void *dest = malloc(data_s); /* allocates memory like data parameter */ + memcpy(dest, data, data_s); /* copies data inside dest */ + + clist_add(list, dest); + + list->last->data_s = data_s; +} + void clist_add_all(list_t *dest, list_t *other) { @@ -48,7 +57,7 @@ void clist_add_all(list_t *dest, iterator_t i = clist_iterator(other); while (clist_iterator_has_next(i)) { list_item_t *item = clist_iterator_next_item(&i); - clist_add(dest, item->data, item->data_s); + clist_add_s(dest, item->data, item->data_s); } } diff --git a/src/utils.h b/src/utils.h index 6c5db92..b92ca1c 100644 --- a/src/utils.h +++ b/src/utils.h @@ -20,7 +20,8 @@ typedef struct iterator_t { } iterator_t; list_t clist_create (void); -void clist_add (list_t *, void *, size_t); +void clist_add (list_t *, void *); +void clist_add_s (list_t *, void *, size_t); void clist_add_all (list_t *, list_t *); void clist_remove (list_t *, list_item_t *); iterator_t clist_iterator (list_t *); |