[kaffe] java.nio.ByteBuffer#compact() does not set position and limit

Ito Kazumitsu ito.kazumitsu at hidec.co.jp
Tue Dec 28 20:55:57 PST 2004


Hi,

java.nio.ByteBuffer#compact() must set the position to the
end of the moved bytes and the limit to the capacity.

But this method of kaffe's, that is GNU Classpath's,  does not do so
when the buffer is already compact.

Test program:

import java.nio.ByteBuffer;
public class TestByteBufferCompact {
    public static void main(String[] args) {
        ByteBuffer buffer = ByteBuffer.allocate(10);
        buffer.position(0);
        buffer.limit(3);
        buffer.compact();
        System.out.println("position=" + buffer.position() +
            " limit=" + buffer.limit());
    }
}

Run it with Sun's java:

bash$ java TestByteBufferCompact     
position=3 limit=10

Run it with Kaffe:

bash$ kaffe TestByteBufferCompact     
position=0 limit=3

Patch:

--- java/nio/ByteBufferImpl.java.orig	Wed Jun 16 02:39:09 2004
+++ java/nio/ByteBufferImpl.java	Wed Dec 29 13:45:52 2004
@@ -120,6 +120,11 @@
 	position(count);
 	limit(capacity());
       }
+    else
+      {
+        position(limit());
+        limit(capacity());
+      }
     return this;
   }
   




More information about the kaffe mailing list