#ident "$URL: svn://elmer/devel/SVN/SDDAS/trunk/libant/LinkRemove.c $ %D% SwRI" /* LinkRemove.c -- remove nodess from list */ #include #include #include "LinkList.h" /* LinkRemoveNoFree -- find and remove item from linked list (1st only) */ LinkList LinkRemoveNoFree(LinkList list,void *data) { LinkList prev,This; if (list == NULL) return NULL; for (prev=NULL,This=list; This != NULL; prev=This,This=This->next) if (data == This->data) { if (This == list) list = list->next; else prev->next = This->next; break; } return list; } /* LinkRemove -- find and remove data from linked list (1st only) */ LinkList LinkRemove(LinkList list,void *data) { LinkList prev,This; if (list == NULL) return NULL; for (prev=NULL,This=list; This != NULL; prev=This,This=This->next) if (data == This->data) { if (This == list) list = list->next; else prev->next = This->next; free((char*)This); break; } return list; } /* LinkRemoveIf -- find and remove data from linked list (1st only) */ LinkList LinkRemoveIf(LinkList list,void *data,LinkFun compare) { LinkList prev,This; if (list == NULL) return NULL; for (prev=NULL,This=list; This != NULL; prev=This,This=This->next) if (!(*compare)(data,This->data)) { if (This == list) list = list->next; else prev->next = This->next; free((char*)This); break; } return list; }