diff --git a/include/llist.h b/include/llist.h index 9c3a5c0..9e6b721 100644 --- a/include/llist.h +++ b/include/llist.h @@ -35,7 +35,7 @@ typedef struct } why2_list_t; //SINGLE LINKED LIST MADE OF why2_node_t //FUNCTIONS -void why2_list_push(why2_list_t *list, void *value); //PUSH ELEMENT TO LIST BACK +void why2_list_push(why2_list_t *list, void *value, unsigned long size); //PUSH ELEMENT TO LIST BACK void why2_list_remove(why2_list_t *list, why2_node_t *node); //REMOVE ELEMENT void why2_list_remove_back(why2_list_t *list); //REMOVE LAST ELEMENT why2_node_t *why2_list_find(why2_list_t *list, void *value); //FIND ELEMENT IN LIST diff --git a/src/core/lib/utils/llist.c b/src/core/lib/utils/llist.c index bfe1e25..b316e72 100644 --- a/src/core/lib/utils/llist.c +++ b/src/core/lib/utils/llist.c @@ -22,26 +22,29 @@ along with this program. If not, see . #include #include -void why2_list_push(why2_list_t *list, void *value) +void why2_list_push(why2_list_t *list, void *value, unsigned long size) { //CREATE NODE why2_node_t *head = list -> head; why2_node_t *new_node = malloc(sizeof(why2_node_t)); + new_node -> value = malloc(size); //TODO: Deallocation why2_node_t *buffer = head; //INSERT DATA - new_node -> value = value; + memcpy(new_node -> value, value, size); new_node -> next = NULL; if (head == NULL) //INIT LIST { - head = new_node; + buffer = new_node; } else { while (buffer -> next != NULL) buffer = buffer -> next; //GET TO THE END OF LIST buffer -> next = new_node; //LINK } + + list -> head = buffer; //TODO: Unused? } void why2_list_remove(why2_list_t *list, why2_node_t *node) @@ -77,6 +80,7 @@ void why2_list_remove(why2_list_t *list, why2_node_t *node) } //DEALLOCATION + free(node -> value); free(node); }