37977956905d588f73ee5f635fae2f609cb40842 angie Wed Aug 9 12:52:00 2017 -0700 Assorted little util functions in support of adding HGVS output to hgVai -- refs #19968 diff --git src/lib/common.c src/lib/common.c index 8f1921e..a6ad49e 100644 --- src/lib/common.c +++ src/lib/common.c @@ -978,37 +978,58 @@ } void slPairFreeList(struct slPair **pList) /* Free up list. (Don't free up values.) */ { struct slPair *el, *next; for (el = *pList; el != NULL; el = next) { next = el->next; slPairFree(&el); } *pList = NULL; } -void slPairFreeVals(struct slPair *list) -/* Free up all values on list. */ +void slPairFreeValsExt(struct slPair *list, void (*freeFunc)()) +/* Free up all values on list using freeFunc. + * freeFunc should take a simple pointer to free an item, and can be NULL. */ { struct slPair *el; for (el = list; el != NULL; el = el->next) + { + if (freeFunc) + freeFunc(el->val); + else freez(&el->val); } +} + +void slPairFreeVals(struct slPair *list) +/* Free up all values on list. */ +{ +slPairFreeValsExt(list, NULL); +} + +void slPairFreeValsAndListExt(struct slPair **pList, void (*freeFunc)()) +/* Free up all values on list using freeFunc and list itself. + * freeFunc should take a simple pointer to free an item, and can be NULL. */ +{ +if (pList) + slPairFreeValsExt(*pList, freeFunc); +slPairFreeList(pList); +} void slPairFreeValsAndList(struct slPair **pList) /* Free up all values on list and list itself */ { slPairFreeVals(*pList); slPairFreeList(pList); } struct slPair *slPairFind(struct slPair *list, char *name) /* Return list element of given name, or NULL if not found. */ { struct slPair *el; for (el = list; el != NULL; el = el->next) if (sameString(name, el->name)) break;