diff --git a/include/bongoutil.h b/include/bongoutil.h index 4c3ccdf..2c7288a 100644 --- a/include/bongoutil.h +++ b/include/bongoutil.h @@ -332,6 +332,7 @@ BongoList *BongoListReverse(BongoList *list); void BongoListFree(BongoList *list); void BongoListFreeDeep(BongoList *list); int BongoListLength(BongoList *list); +BOOL BongoListDelete(BongoList *list, void *data); BongoSList *BongoSListCopy(BongoSList *slist); BongoSList *BongoSListAppend(BongoSList *slist, void *data); @@ -341,6 +342,7 @@ BongoSList *BongoSListReverse(BongoSList *slist); void BongoSListFree(BongoSList *slist); void BongoSListFreeDeep(BongoSList *slist); int BongoSListLength(BongoSList *slist); +BOOL BongoSListDelete(BongoSList *list, void *data); /** end lists.c **/ diff --git a/src/libs/bongoutil/lists.c b/src/libs/bongoutil/lists.c index 66ec2d4..4e1dee2 100644 --- a/src/libs/bongoutil/lists.c +++ b/src/libs/bongoutil/lists.c @@ -18,6 +18,7 @@ * may find current contact information at www.novell.com. * ****************************************************************************/ +// (C) 2008 Patrick Felt #include #include @@ -158,6 +159,34 @@ BongoSListLength(BongoSList *slist) return i; } +BOOL +BongoSListDelete(BongoSList *list, void *data) +{ + BongoSList *cur=list; + BongoSList *prev=NULL; + BOOL result=FALSE; + + if (!list) { + return result; + } + + while (cur) { + if (cur->data == data) { + result=TRUE; + /* unlink this item */ + if (prev) { + prev->next = cur->next; + } + + MemFree(cur); + break; + } + prev=cur; + cur=cur->next; + } + + return result; +} BongoList * BongoListCopy(BongoList *list) @@ -298,3 +327,33 @@ BongoListLength(BongoList *list) } return i; } + +BOOL +BongoListDelete(BongoList *list, void *data) +{ + BOOL result=FALSE; + BongoList *cur=list; + + if (!list) { + return result; + } + + while (cur) { + if (cur->data == data) { + result=TRUE; + /* unlink this item */ + if (cur->prev) { + cur->prev->next = cur->next; + } + + if (cur->next) { + cur->next->prev = cur->prev; + } + MemFree(cur); + break; + } + cur = cur->next; + } + + return result; +}