diff --git a/src/xpdev/link_list.c b/src/xpdev/link_list.c index ab4ecf0dd7d6b91c8f4d04aa616a9de727b114d0..9c449199325447e235f53f30dbebe75386a0adce 100644 --- a/src/xpdev/link_list.c +++ b/src/xpdev/link_list.c @@ -569,7 +569,7 @@ static list_node_t* list_add_node(link_list_t* list, list_node_t* node, list_nod return node; } -list_node_t* listAddNode(link_list_t* list, void* data, list_node_tag_t tag, list_node_t* after) +list_node_t* listAddNodeWithFlags(link_list_t* list, void* data, list_node_tag_t tag, long flags, list_node_t* after) { list_node_t* node; @@ -582,10 +582,16 @@ list_node_t* listAddNode(link_list_t* list, void* data, list_node_tag_t tag, lis memset(node, 0, sizeof(list_node_t)); node->data = data; node->tag = tag; + node->flags = flags; return list_add_node(list, node, after); } +list_node_t* listAddNode(link_list_t* list, void* data, list_node_tag_t tag, list_node_t* after) +{ + return listAddNodeWithFlags(list, data, tag, 0, after); +} + long listAddNodes(link_list_t* list, void** data, list_node_tag_t* tag, list_node_t* after) { long i; @@ -610,11 +616,10 @@ list_node_t* listAddNodeData(link_list_t* list, const void* data, size_t length, return NULL; memcpy(buf, data, length); - if ((node = listAddNode(list, buf, tag, after)) == NULL) { + if ((node = listAddNodeWithFlags(list, buf, tag, LINK_LIST_MALLOC, after)) == NULL) { free(buf); return NULL; } - node->flags |= LINK_LIST_MALLOC; return node; } @@ -630,11 +635,10 @@ list_node_t* listAddNodeString(link_list_t* list, const char* str, list_node_tag if ((buf = strdup(str)) == NULL) return NULL; - if ((node = listAddNode(list, buf, tag, after)) == NULL) { + if ((node = listAddNodeWithFlags(list, buf, tag, LINK_LIST_MALLOC, after)) == NULL) { free(buf); return NULL; } - node->flags |= LINK_LIST_MALLOC; return node; } @@ -668,9 +672,8 @@ long listAddNodeList(link_list_t* list, const link_list_t* src, list_node_t* aft return -1; for (src_node = src->first; src_node != NULL; src_node = src_node->next, count++) { - if ((node = listAddNode(list, src_node->data, src_node->tag, node == NULL ? after:node)) == NULL) + if ((node = listAddNodeWithFlags(list, src_node->data, src_node->tag, src_node->flags, node == NULL ? after:node)) == NULL) return count; - node->flags = src_node->flags; } return count; diff --git a/src/xpdev/link_list.h b/src/xpdev/link_list.h index 61d2f3c304672ce7a53b8887948a9744d8de0a1a..3a12ffc0f5f7af34bcd0809e801195099b910a63 100644 --- a/src/xpdev/link_list.h +++ b/src/xpdev/link_list.h @@ -148,6 +148,9 @@ DLLEXPORT bool listNodeIsLocked(const list_node_t*); /* Add node to list, returns pointer to new node or NULL on error */ DLLEXPORT list_node_t* listAddNode(link_list_t*, void* data, list_node_tag_t, list_node_t * after /* NULL=insert */); +/* Add node to list with flags, returns pointer to new node or NULL on error */ +DLLEXPORT list_node_t* listAddNodeWithFlags(link_list_t*, void* data, list_node_tag_t, long flags, list_node_t * after /* NULL=insert */); + /* Add array of node data to list, returns number of nodes added (or negative on error) */ /* tag array may be NULL */ DLLEXPORT long listAddNodes(link_list_t*, void** data, list_node_tag_t*, list_node_t* after /* NULL=insert */);