5c213974bb28e98d1b10ad9a86063101e684e5e3 braney Mon Oct 31 12:16:52 2022 -0700 add Jim's track duplication code diff --git src/hg/lib/cart.c src/hg/lib/cart.c index 0eb3012..7d33939 100644 --- src/hg/lib/cart.c +++ src/hg/lib/cart.c @@ -1657,30 +1657,49 @@ struct slPair *cartVarsWithPrefix(struct cart *cart, char *prefix) /* Return a slPair list of cart vars that begin with prefix */ { struct slPair *cartVars = NULL; struct hashEl *el, *elList = hashElListHash(cart->hash); slSort(&elList, hashElCmp); for (el = elList; el != NULL; el = el->next) { if (startsWith(prefix, el->name)) slAddHead(&cartVars,slPairNew(el->name,el->val)); } hashElFreeList(&elList); return cartVars; } +void cartCloneVarsWithPrefix(struct cart *cart, char *prefix, char *newPrefix) +/* Add a copy of all vars that start with prefix to cart. The new vars will + * start with newPrefix instead of prefix */ +{ +int prefixSize = strlen(prefix); +struct dyString *buf = dyStringNew(0); +struct slPair *pair, *pairList = cartVarsWithPrefix(cart, prefix); +for (pair = pairList; pair != NULL; pair = pair->next) + { + dyStringClear(buf); + dyStringAppend(buf, newPrefix); + dyStringAppend(buf, pair->name + prefixSize); + cartAddString(cart, buf->string, pair->val); + } +slFreeList(&pairList); +dyStringFree(&buf); +} + + struct slPair *cartVarsWithPrefixLm(struct cart *cart, char *prefix, struct lm *lm) /* Return list of cart vars that begin with prefix allocated in local memory. * Quite a lot faster than cartVarsWithPrefix. */ { struct slPair *cartVars = NULL; struct hash *hash = cart->hash; int hashSize = hash->size; struct hashEl *hel; int i; for (i=0; i<hashSize; ++i) { for (hel = hash->table[i]; hel != NULL; hel = hel->next) { if (startsWith(prefix, hel->name)) {