90049ed951d072fc356294b22717abb41cbd8384
braney
  Mon Feb 6 14:26:22 2012 -0800
fix up assert to be accurate, and break out of two loops when we've put out the limit of items (#6851)
diff --git src/lib/bwgQuery.c src/lib/bwgQuery.c
index a2e9a00..f8e7582 100644
--- src/lib/bwgQuery.c
+++ src/lib/bwgQuery.c
@@ -128,31 +128,31 @@
 		    gotStart = TRUE;
 		    }
 		fprintf(out, "%g\n", val);
 		++outCount;
 		if (maxCount != 0 && outCount >= maxCount)
 		    break;
 		}
 	    start += head.itemStep;
 	    }
 	break;
 	}
     default:
         internalErr();
 	break;
     }
-assert(blockPt == blockEnd);
+assert( (maxCount != 0 && outCount >= maxCount) || (blockPt == blockEnd));
 return outCount;
 }
 
 struct bbiInterval *bigWigIntervalQuery(struct bbiFile *bwf, char *chrom, bits32 start, bits32 end,
 	struct lm *lm)
 /* Get data for interval.  Return list allocated out of lm. */
 {
 if (bwf->typeSig != bigWigSig)
    errAbort("Trying to do bigWigIntervalQuery on a non big-wig file.");
 bbiAttachUnzoomedCir(bwf);
 struct bbiInterval *el, *list = NULL;
 struct fileOffsetSize *blockList = bbiOverlappingBlocks(bwf, bwf->unzoomedCir, 
 	chrom, start, end, NULL);
 struct fileOffsetSize *block, *beforeGap, *afterGap;
 struct udcFile *udc = bwf->udc;
@@ -324,31 +324,35 @@
 	else
 	    {
 	    blockPt = blockBuf;
 	    blockEnd = blockPt + block->size;
 	    }
 
 	/* Do the actual dump. */
 	int oneCount = bigWigBlockDumpIntersectingRange(bwf->isSwapped, blockPt, blockEnd, 
 		chrom, start, end, maxCount, out);
 
 	/* Keep track of how many dumped, not exceeding maximum. */
 	printCount += oneCount;
 	if (maxCount != 0)
 	    {
 	    if (oneCount >= maxCount)
+		{
+		block = NULL;	 // we want to drop out of the outer loop too
 		break;
+		}
+
 	    maxCount -= oneCount;
 	    }
 	blockBuf += block->size;
 	}
     freeMem(mergedBuf);
     }
 freeMem(uncompressBuf);
 
 slFreeList(&blockList);
 return printCount;
 }
 
 boolean bigWigSummaryArray(struct bbiFile *bwf, char *chrom, bits32 start, bits32 end,
 	enum bbiSummaryType summaryType, int summarySize, double *summaryValues)
 /* Fill in summaryValues with  data from indicated chromosome range in bigWig file.