aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlessandro Iezzi <aiezzi@alessandroiezzi.it>2023-05-17 16:51:48 +0200
committerAlessandro Iezzi <aiezzi@alessandroiezzi.it>2023-05-17 16:51:48 +0200
commitfb1efe264854e2539d62da1d9dc019ffa8a899da (patch)
tree7f2e2dc2ac900bf9595e3cb5988ebb9cbae6a611 /src
parentaa22d43ec96ce932cda68717deb3a414291b084b (diff)
downloadutils-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.c23
-rw-r--r--src/utils.h3
2 files changed, 18 insertions, 8 deletions
diff --git a/src/list.c b/src/list.c
index 01a6822..38957e8 100644
--- a/src/list.c
+++ b/src/list.c
@@ -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 *);