diff options
author | Shawn O. Pearce <spearce@spearce.org> | 2011-08-05 18:18:16 -0700 |
---|---|---|
committer | Shawn O. Pearce <spearce@spearce.org> | 2011-08-08 16:36:56 -0700 |
commit | 3bac5b1d7d85aba3ec4aea0286eabbc8b326208b (patch) | |
tree | 9d39de52f8169916e67903219329961872d5e3a2 | |
parent | 86ecf141b6e94f18702224e60e8992cafe4d02bc (diff) | |
download | jgit-3bac5b1d7d85aba3ec4aea0286eabbc8b326208b.tar.gz jgit-3bac5b1d7d85aba3ec4aea0286eabbc8b326208b.zip |
Fix offset64 creation for objects at 2 GiB
The offset32 format is used for objects <= 2^31-1, while the offset64
format is used for all other objects. This condition was missing
the = needed to ensure an object placed exactly at 2^31 would have
its 64 bit offset in the index.
Change-Id: I293fac0e829c9baa12cb59411dffde666051d6c5
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/storage/file/PackIndexWriterV2.java | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/PackIndexWriterV2.java b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/PackIndexWriterV2.java index 21ebd1ca9c..7671cd6f1c 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/PackIndexWriterV2.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/PackIndexWriterV2.java @@ -56,6 +56,9 @@ import org.eclipse.jgit.util.NB; * @see PackIndexV2 */ class PackIndexWriterV2 extends PackIndexWriter { + private static final int MAX_OFFSET_32 = 0x7fffffff; + private static final int IS_OFFSET_64 = 0x80000000; + PackIndexWriterV2(final OutputStream dst) { super(dst); } @@ -87,10 +90,10 @@ class PackIndexWriterV2 extends PackIndexWriter { int o64 = 0; for (final PackedObjectInfo oe : entries) { final long o = oe.getOffset(); - if (o < Integer.MAX_VALUE) + if (o <= MAX_OFFSET_32) NB.encodeInt32(tmp, 0, (int) o); else - NB.encodeInt32(tmp, 0, (1 << 31) | o64++); + NB.encodeInt32(tmp, 0, IS_OFFSET_64 | o64++); out.write(tmp, 0, 4); } } @@ -98,7 +101,7 @@ class PackIndexWriterV2 extends PackIndexWriter { private void writeOffset64() throws IOException { for (final PackedObjectInfo oe : entries) { final long o = oe.getOffset(); - if (o > Integer.MAX_VALUE) { + if (MAX_OFFSET_32 < o) { NB.encodeInt64(tmp, 0, o); out.write(tmp, 0, 8); } |