--- old/src/share/classes/java/nio/ByteBufferAs-X-Buffer.java Tue Mar 24 08:38:25 2009 +++ new/src/share/classes/java/nio/ByteBufferAs-X-Buffer.java Tue Mar 24 08:38:24 2009 @@ -196,10 +196,12 @@ if ((start < 0) || (end > len) || (start > end)) throw new IndexOutOfBoundsException(); - int sublen = end - start; - int off = offset + ((pos + start) << $LG_BYTES_PER_VALUE$); - assert (off >= 0); - return new ByteBufferAsCharBuffer$RW$$BO$(bb, -1, 0, sublen, sublen, off); + return new ByteBufferAsCharBuffer$RW$$BO$(bb, + -1, + pos + start, + pos + end, + capacity(), + offset); } #end[char] --- old/src/share/classes/java/nio/Direct-X-Buffer.java Tue Mar 24 08:38:27 2009 +++ new/src/share/classes/java/nio/Direct-X-Buffer.java Tue Mar 24 08:38:26 2009 @@ -412,10 +412,12 @@ if ((start < 0) || (end > len) || (start > end)) throw new IndexOutOfBoundsException(); - int sublen = end - start; - int off = (pos + start) << $LG_BYTES_PER_VALUE$; - assert (off >= 0); - return new DirectCharBuffer$RW$$BO$(this, -1, 0, sublen, sublen, off); + return new DirectCharBuffer$RW$$BO$(this, + -1, + pos + start, + pos + end, + capacity(), + offset); } #end[char] --- old/src/share/classes/java/nio/Heap-X-Buffer.java Tue Mar 24 08:38:29 2009 +++ new/src/share/classes/java/nio/Heap-X-Buffer.java Tue Mar 24 08:38:28 2009 @@ -572,10 +572,13 @@ || (end > length()) || (start > end)) throw new IndexOutOfBoundsException(); - int len = end - start; + int pos = position(); return new HeapCharBuffer$RW$(hb, - -1, 0, len, len, - offset + position() + start); + -1, + pos + start, + pos + end, + capacity(), + offset); } #end[char] --- old/src/share/classes/java/nio/StringCharBuffer.java Tue Mar 24 08:38:31 2009 +++ new/src/share/classes/java/nio/StringCharBuffer.java Tue Mar 24 08:38:30 2009 @@ -102,10 +102,12 @@ public final CharBuffer subSequence(int start, int end) { try { int pos = position(); - return new StringCharBuffer(str, -1, + return new StringCharBuffer(str, + -1, pos + checkIndex(start, pos), pos + checkIndex(end, pos), - remaining(), offset); + capacity(), + offset); } catch (IllegalArgumentException x) { throw new IndexOutOfBoundsException(); } --- old/test/java/nio/Buffer/Basic-X.java Tue Mar 24 08:38:33 2009 +++ new/test/java/nio/Buffer/Basic-X.java Tue Mar 24 08:38:32 2009 @@ -365,8 +365,11 @@ b.position(2); ck(b, b.charAt(1), 'd'); - CharBuffer c = (CharBuffer)b.subSequence(1, 4); - ck(b, b.subSequence(1, 4).toString().equals("def")); + CharBuffer c = b.subSequence(1, 4); + ck(c, c.capacity(), b.capacity()); + ck(c, c.position(), b.position()+1); + ck(c, c.limit(), b.position()+4); + ck(c, b.subSequence(1, 4).toString().equals("def")); // 4938424 b.position(4); @@ -722,6 +725,8 @@ ck(b, start, b.position()); ck(b, end, b.limit()); ck(b, s.length(), b.capacity()); + b.position(6); + ck(b, b.subSequence(0,3).toString().equals("ghi")); // The index, relative to the position, must be non-negative and // smaller than remaining(). --- old/test/java/nio/Buffer/Basic.java Tue Mar 24 08:38:35 2009 +++ new/test/java/nio/Buffer/Basic.java Tue Mar 24 08:38:34 2009 @@ -25,7 +25,7 @@ * @summary Unit test for buffers * @bug 4413135 4414911 4416536 4416562 4418782 4471053 4472779 4490253 4523725 * 4526177 4463011 4660660 4661219 4663521 4782970 4804304 4938424 6231529 - * 6221101 6234263 6535542 6591971 6593946 + * 6221101 6234263 6535542 6591971 6593946 6795561 * @author Mark Reinhold */ --- old/test/java/nio/Buffer/BasicByte.java Tue Mar 24 08:38:37 2009 +++ new/test/java/nio/Buffer/BasicByte.java Tue Mar 24 08:38:36 2009 @@ -375,6 +375,9 @@ + + + // Compact relPut(b); @@ -705,6 +708,8 @@ } + + --- old/test/java/nio/Buffer/BasicChar.java Tue Mar 24 08:38:39 2009 +++ new/test/java/nio/Buffer/BasicChar.java Tue Mar 24 08:38:38 2009 @@ -365,8 +365,11 @@ b.position(2); ck(b, b.charAt(1), 'd'); - CharBuffer c = (CharBuffer)b.subSequence(1, 4); - ck(b, b.subSequence(1, 4).toString().equals("def")); + CharBuffer c = b.subSequence(1, 4); + ck(c, c.capacity(), b.capacity()); + ck(c, c.position(), b.position()+1); + ck(c, c.limit(), b.position()+4); + ck(c, b.subSequence(1, 4).toString().equals("def")); // 4938424 b.position(4); @@ -722,6 +725,8 @@ ck(b, start, b.position()); ck(b, end, b.limit()); ck(b, s.length(), b.capacity()); + b.position(6); + ck(b, b.subSequence(0,3).toString().equals("ghi")); // The index, relative to the position, must be non-negative and // smaller than remaining(). --- old/test/java/nio/Buffer/BasicDouble.java Tue Mar 24 08:38:41 2009 +++ new/test/java/nio/Buffer/BasicDouble.java Tue Mar 24 08:38:40 2009 @@ -375,6 +375,9 @@ + + + // Compact relPut(b); @@ -705,6 +708,8 @@ } + + --- old/test/java/nio/Buffer/BasicFloat.java Tue Mar 24 08:38:43 2009 +++ new/test/java/nio/Buffer/BasicFloat.java Tue Mar 24 08:38:42 2009 @@ -375,6 +375,9 @@ + + + // Compact relPut(b); @@ -705,6 +708,8 @@ } + + --- old/test/java/nio/Buffer/BasicInt.java Tue Mar 24 08:38:45 2009 +++ new/test/java/nio/Buffer/BasicInt.java Tue Mar 24 08:38:44 2009 @@ -375,6 +375,9 @@ + + + // Compact relPut(b); @@ -705,6 +708,8 @@ } + + --- old/test/java/nio/Buffer/BasicLong.java Tue Mar 24 08:38:47 2009 +++ new/test/java/nio/Buffer/BasicLong.java Tue Mar 24 08:38:46 2009 @@ -375,6 +375,9 @@ + + + // Compact relPut(b); @@ -705,6 +708,8 @@ } + + --- old/test/java/nio/Buffer/BasicShort.java Tue Mar 24 08:38:49 2009 +++ new/test/java/nio/Buffer/BasicShort.java Tue Mar 24 08:38:48 2009 @@ -375,6 +375,9 @@ + + + // Compact relPut(b); @@ -705,6 +708,8 @@ } + +