607c224716976855955947c30bb6e525d0c79daa
braney
  Wed May 22 10:27:40 2019 -0700
check in a fix that Daniel Zerbino made to keep offsets in 64 bit land
rather than casting them down to shorts

diff --git src/lib/bPlusTree.c src/lib/bPlusTree.c
index 50bc929..1275f3e 100644
--- src/lib/bPlusTree.c
+++ src/lib/bPlusTree.c
@@ -418,33 +418,33 @@
 }
 
 static int bptCountLevels(int maxBlockSize, int itemCount)
 /* Count up number of levels needed in tree of given maximum block size. */
 {
 int levels = 1;
 while (itemCount > maxBlockSize)
     {
     itemCount = (itemCount + maxBlockSize - 1)  / maxBlockSize;
     levels += 1;
     }
 return levels;
 }
 
 
-static bits32 writeIndexLevel(bits16 blockSize, 
+static bits64 writeIndexLevel(bits16 blockSize, 
 	void *itemArray, int itemSize, long itemCount, 
-	bits32 indexOffset, int level, 
+	bits64 indexOffset, int level, 
 	void (*fetchKey)(const void *va, char *keyBuf), bits32 keySize, bits32 valSize,
 	FILE *f)
 /* Write out a non-leaf level. */
 {
 char *items = itemArray;
 
 /* Calculate number of nodes to write at this level. */
 long slotSizePer = xToY(blockSize, level);   // Number of items per slot in node
 long nodeSizePer = slotSizePer * blockSize;  // Number of items per node
 long nodeCount = (itemCount + nodeSizePer - 1)/nodeSizePer;	
 
 
 /* Calculate sizes and offsets. */
 long bytesInIndexBlock = (bptBlockHeaderSize + blockSize * (keySize+sizeof(bits64)));
 long bytesInLeafBlock = (bptBlockHeaderSize + blockSize * (keySize+valSize));
@@ -553,31 +553,31 @@
 bits32 reserved = 0;
 writeOne(f, magic);
 writeOne(f, blockSize);
 writeOne(f, keySize);
 writeOne(f, valSize);
 writeOne(f, itemCount);
 writeOne(f, reserved);
 writeOne(f, reserved);
 bits64 indexOffset = ftell(f);
 
 /* Write non-leaf nodes. */
 int levels = bptCountLevels(blockSize, itemCount);
 int i;
 for (i=levels-1; i > 0; --i)
     {
-    bits32 endLevelOffset = writeIndexLevel(blockSize, itemArray, itemSize, itemCount, indexOffset, 
+    bits64 endLevelOffset = writeIndexLevel(blockSize, itemArray, itemSize, itemCount, indexOffset, 
     	i, fetchKey, keySize, valSize, f);
     indexOffset = ftell(f);
     if (endLevelOffset != indexOffset)
         internalErr();
     }
 
 /* Write leaf nodes */
 writeLeafLevel(blockSize, itemArray, itemSize, itemCount, 
 	fetchKey, keySize, fetchVal, valSize, f);
 }
 
 void bptFileCreate(
 	void *itemArray, 	/* Sorted array of things to index. */
 	int itemSize, 		/* Size of each element in array. */
 	bits64 itemCount, 	/* Number of elements in array. */