]> source.dussan.org Git - jackcess.git/commitdiff
better max size calculation
authorJames Ahlborn <jtahlborn@yahoo.com>
Tue, 25 Mar 2008 01:47:11 +0000 (01:47 +0000)
committerJames Ahlborn <jtahlborn@yahoo.com>
Tue, 25 Mar 2008 01:47:11 +0000 (01:47 +0000)
git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/trunk@299 f203690c-595d-4dc9-a70b-905162fa7fd2

src/java/com/healthmarketscience/jackcess/Index.java

index 020f42f90d74bc3d7dbc748b6d6a5ec021a535c9..b462b779c6d87a21c0ef49761446b9412efa8be5 100644 (file)
@@ -334,15 +334,16 @@ public class Index implements Comparable<Index> {
     buffer.put((byte) 0); //Unknown
     buffer.put((byte) 0); //Unknown
     byte[] entryMask = new byte[getFormat().SIZE_INDEX_ENTRY_MASK];
+    int maxTotalSize = getFormat().PAGE_SIZE -
+      (getFormat().OFFSET_INDEX_ENTRY_MASK + entryMask.length);
     int totalSize = 0;
     for(Entry entry : _entries) {
-      int size = entry.size();
-      totalSize += size;
-      int idx = totalSize  / 8;
-      if(idx >= entryMask.length) {
+      totalSize += entry.size();
+      if(totalSize > maxTotalSize) {
         throw new UnsupportedOperationException(
             "FIXME cannot write large index yet");
       }
+      int idx = totalSize / 8;
       entryMask[idx] |= (1 << (totalSize % 8));
     }
     buffer.put(entryMask);
@@ -499,7 +500,7 @@ public class Index implements Comparable<Index> {
         indexPage, getFormat().OFFSET_INDEX_COMPRESSED_BYTE_COUNT);
     int entryMaskLength = getFormat().SIZE_INDEX_ENTRY_MASK;
     int entryMaskPos = getFormat().OFFSET_INDEX_ENTRY_MASK;
-    int entryPos = entryMaskPos + getFormat().SIZE_INDEX_ENTRY_MASK;
+    int entryPos = entryMaskPos + entryMaskLength;
     int lastStart = 0;
     byte[] valuePrefix = null;
     boolean firstEntry = true;