From ca2231587ad412064b97c161ccd3c47ee23cfeec Mon Sep 17 00:00:00 2001 From: David Renshaw Date: Sat, 10 May 2014 22:33:24 -0400 Subject: [PATCH] fixing bugs --- src/capnp/InputStreamMessageReader.java | 10 ++++++++-- src/capnp/StructPointer.java | 11 ++++++----- src/capnp/WireHelpers.java | 4 ++-- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/capnp/InputStreamMessageReader.java b/src/capnp/InputStreamMessageReader.java index 3060007..44b1592 100644 --- a/src/capnp/InputStreamMessageReader.java +++ b/src/capnp/InputStreamMessageReader.java @@ -26,20 +26,26 @@ public class InputStreamMessageReader { static ByteBuffer makeByteBuffer(byte[] bytes) { ByteBuffer result = ByteBuffer.wrap(bytes); - result.order(ByteOrder.LITTLE_ENDIAN); + + // something odd is happening here. + // result.order(ByteOrder.LITTLE_ENDIAN); return result; } public static MessageReader create(InputStream is) throws IOException { ByteBuffer firstWord = makeByteBuffer(readExact(is, 8)); - int segmentCount = 1 + firstWord.getInt(); + int segmentCount = 1 + firstWord.getInt(0); + + System.out.println("segmentCount = " + segmentCount); int segment0Size = 0; if (segmentCount > 0) { segment0Size = firstWord.getInt(1); } + System.out.println("segment0Size = " + segment0Size); + int totalWords = segment0Size; if (segmentCount > 512) { diff --git a/src/capnp/StructPointer.java b/src/capnp/StructPointer.java index 1e23ad3..e22795f 100644 --- a/src/capnp/StructPointer.java +++ b/src/capnp/StructPointer.java @@ -2,18 +2,19 @@ package capnp; import java.nio.ByteBuffer; -class StructPointer extends WirePointer { +class StructPointer{ + public WirePointer ptr; - public StructPointer(ByteBuffer buffer, int buffer_offset) { - super(buffer, buffer_offset); + public StructPointer(WirePointer ptr) { + this.ptr = ptr; } public short dataSize() { - return this.buffer.getShort(this.buffer_offset * 4 + 2); + return this.ptr.buffer.getShort(this.ptr.buffer_offset * 4 + 2); } public short ptrCount() { - return this.buffer.getShort(this.buffer_offset * 4 + 3); + return this.ptr.buffer.getShort(this.ptr.buffer_offset * 4 + 3); } public int wordSize() { diff --git a/src/capnp/WireHelpers.java b/src/capnp/WireHelpers.java index 92169ed..6673c83 100644 --- a/src/capnp/WireHelpers.java +++ b/src/capnp/WireHelpers.java @@ -9,7 +9,7 @@ class WireHelpers { // TODO error handling WordPointer ptr = ref.target(); - StructPointer structPtr = (StructPointer)ref; + StructPointer structPtr = new StructPointer(ref); int dataSizeWords = structPtr.dataSize(); return new StructReader(segment, @@ -44,7 +44,7 @@ class WireHelpers { // TODO bounds check int size = tag.inlineCompositeListElementCount(); - StructPointer structPtr = (StructPointer)tag; + StructPointer structPtr = new StructPointer(tag); int wordsPerElement = structPtr.wordSize(); // TODO check that elemements do not overrun word count