diff --git a/src/xpdev/link_list.c b/src/xpdev/link_list.c index c564edc343a3a91e5af46b6ec3ccc9bf2df19a48..dadfe1d8717b4e86f528d638720c3d779cc09eba 100644 --- a/src/xpdev/link_list.c +++ b/src/xpdev/link_list.c @@ -258,7 +258,7 @@ long listCountNodes(const link_list_t* list) return(count); } -list_node_t* listFindNode(const link_list_t* list, void* data, size_t length) +list_node_t* listFindNode(const link_list_t* list, const void* data, size_t length) { list_node_t* node; @@ -642,7 +642,7 @@ void* listRemoveNode(link_list_t* list, list_node_t* node) list->last = node->prev; if((list->flags&LINK_LIST_ALWAYS_FREE || node->flags&LINK_LIST_MALLOC) - && !(list->flags&LINK_LIST_NEVER_FREE)) + && !(list->flags&LINK_LIST_DONT_FREE)) listFreeNodeData(node); data = node->data; diff --git a/src/xpdev/link_list.h b/src/xpdev/link_list.h index ee44b041ccdf729bdb4bda12df7dcc897c508f91..b68cba34e4c24dea8b09ad0c9cc87f5f4e1127aa 100644 --- a/src/xpdev/link_list.h +++ b/src/xpdev/link_list.h @@ -54,12 +54,13 @@ extern "C" { /* Valid link_list_t.flags bits */ #define LINK_LIST_MALLOC (1<<0) /* List/node allocated with malloc() */ -#define LINK_LIST_ALWAYS_FREE (1<<1) /* ALWAYS free node data when removing */ -#define LINK_LIST_NEVER_FREE (1<<2) /* NEVER free node data when removing */ -#define LINK_LIST_MUTEX (1<<3) /* Mutex-protected linked-list */ -#define LINK_LIST_SEMAPHORE (1<<4) /* Semaphore attached to linked-list */ -#define LINK_LIST_NODE_LOCKED (1<<5) /* Node is locked */ -#define LINK_LIST_ATTACH (1<<6) /* Attach during init */ +#define LINK_LIST_DONT_FREE (1<<1) /* Don't free node data when removing */ +#define LINK_LIST_ALWAYS_FREE (1<<2) /* ALWAYS free node data when removing */ +#define LINK_LIST_NEVER_FREE (1<<3) /* NEVER free node data (careful of memory leaks!) */ +#define LINK_LIST_MUTEX (1<<4) /* Mutex-protected linked-list */ +#define LINK_LIST_SEMAPHORE (1<<5) /* Semaphore attached to linked-list */ +#define LINK_LIST_NODE_LOCKED (1<<6) /* Node is locked */ +#define LINK_LIST_ATTACH (1<<7) /* Attach during init */ typedef struct list_node { void* data; /* pointer to some kind of data */ @@ -123,7 +124,7 @@ link_list_t* listExtract(link_list_t* dest_list, const list_node_t* src_node, lo /* Simple search functions returning found node or NULL on error */ list_node_t* listNodeAt(const link_list_t*, long index); -list_node_t* listFindNode(const link_list_t*, void* data, size_t length); +list_node_t* listFindNode(const link_list_t*, const void* data, size_t length); /* Convenience functions */ list_node_t* listFirstNode(const link_list_t*); @@ -172,6 +173,7 @@ BOOL listSwapNodes(list_node_t* node1, list_node_t* node2); #define listPushStringList(list, str_list) listAddStringList(list, str_list, listLastNode(list)) #define listInsertStringList(list, str_list) listAddStringList(list, str_list, FIRST_NODE) #define listPopNode(list) listRemoveNode(list, listLastNode(list)) +#define listPopFirstNode(list) listRemoveNode(list, FIRST_NODE) /* Remove node from list, returning the node's data (if not free'd) */ void* listRemoveNode(link_list_t*, list_node_t* /* NULL=first */);