5ed1001df4467a7644b485f82f1b3be3e59180c5 kent Wed Feb 27 22:06:31 2013 -0800 Fixing bug in rFindMulti that was making bigBed name index crash on uc021tvv.1 in ucscGenes.bb diff --git src/lib/bPlusTree.c src/lib/bPlusTree.c index fcffba8..c017b2d 100644 --- src/lib/bPlusTree.c +++ src/lib/bPlusTree.c @@ -197,31 +197,35 @@ else { /* Read first key and first file offset. */ udcMustRead(bpt->udc, keyBuf, keySize); bits64 lastFileOffset = udcReadBits64(bpt->udc, isSwapped); bits64 fileOffset = lastFileOffset; int lastCmp = memcmp(key, keyBuf, keySize); /* Loop through remainder. */ for (i=1; i<childCount; ++i) { udcMustRead(bpt->udc, keyBuf, keySize); fileOffset = udcReadBits64(bpt->udc, isSwapped); int cmp = memcmp(key, keyBuf, keySize); if (lastCmp >= 0 && cmp <= 0) + { + bits64 curPos = udcTell(bpt->udc); rFindMulti(bpt, lastFileOffset, key, pList); + udcSeek(bpt->udc, curPos); + } if (cmp < 0) return; lastCmp = cmp; lastFileOffset = fileOffset; } /* If made it all the way to end, do last one too. */ rFindMulti(bpt, fileOffset, key, pList); } } static void rTraverse(struct bptFile *bpt, bits64 blockStart, void *context, void (*callback)(void *context, void *key, int keySize, void *val, int valSize) ) /* Recursively go across tree, calling callback at leaves. */ {