You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by te...@apache.org on 2006/12/13 16:40:46 UTC
svn commit: r486690 - in /harmony/enhanced/classlib/trunk/modules:
luni/src/main/java/java/io/ nio_char/src/main/java/java/nio/charset/
nio_char/src/test/java/org/apache/harmony/nio_char/tests/java/nio/charset/
nio_char/src/test/java/tests/api/java/nio...
Author: tellison
Date: Wed Dec 13 07:40:45 2006
New Revision: 486690
URL: http://svn.apache.org/viewvc?view=rev&rev=486690
Log:
Apply patch HARMONY-1980 ([classlib][performance] performance improvement for luni and nio_char modules)
Modified:
harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/BufferedReader.java
harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/InputStreamReader.java
harmony/enhanced/classlib/trunk/modules/nio_char/src/main/java/java/nio/charset/CharsetDecoder.java
harmony/enhanced/classlib/trunk/modules/nio_char/src/main/java/java/nio/charset/CharsetEncoder.java
harmony/enhanced/classlib/trunk/modules/nio_char/src/test/java/org/apache/harmony/nio_char/tests/java/nio/charset/CharsetDecoderTest.java
harmony/enhanced/classlib/trunk/modules/nio_char/src/test/java/org/apache/harmony/nio_char/tests/java/nio/charset/CharsetEncoderTest.java
harmony/enhanced/classlib/trunk/modules/nio_char/src/test/java/tests/api/java/nio/charset/CharsetDecoderTest.java
harmony/enhanced/classlib/trunk/modules/nio_char/src/test/java/tests/api/java/nio/charset/CharsetEncoderTest.java
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/BufferedReader.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/BufferedReader.java?view=diff&rev=486690&r1=486689&r2=486690
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/BufferedReader.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/BufferedReader.java Wed Dec 13 07:40:45 2006
@@ -324,10 +324,35 @@
public String readLine() throws IOException {
synchronized (lock) {
if (isOpen()) {
+ /* Are there buffered characters available? */
+ if ((pos >= count) && (fillbuf() == -1)) {
+ return null;
+ }
+ for (int charPos = pos; charPos < count; charPos++) {
+ char ch = buf[charPos];
+ if (ch > '\r')
+ continue;
+ if (ch == '\n') {
+ String res = new String(buf, pos, charPos - pos);
+ pos = charPos + 1;
+ return res;
+ } else if (ch == '\r') {
+ String res = new String(buf, pos, charPos - pos);
+ pos = charPos + 1;
+ if (((pos < count) || (fillbuf() != -1))
+ && (buf[pos] == '\n')) {
+ pos++;
+ }
+ return res;
+ }
+ }
+
char eol = '\0';
StringBuilder result = new StringBuilder(80);
/* Typical Line Length */
+ result.append(buf, pos, count - pos);
+ pos = count;
while (true) {
/* Are there buffered characters available? */
if (pos >= count) {
@@ -342,9 +367,10 @@
}
}
for (int charPos = pos; charPos < count; charPos++) {
- if (eol == '\0'
- && (buf[charPos] == '\n' || buf[charPos] == '\r')) {
- eol = buf[charPos];
+ if (eol == '\0') {
+ if ((buf[charPos] == '\n' || buf[charPos] == '\r')) {
+ eol = buf[charPos];
+ }
} else if (eol == '\r' && (buf[charPos] == '\n')) {
if (charPos > pos) {
result.append(buf, pos, charPos - pos - 1);
@@ -359,11 +385,11 @@
return result.toString();
}
}
- if (eol != '\0') {
- result.append(buf, pos, count - pos - 1);
- } else {
- result.append(buf, pos, count - pos);
- }
+ if (eol == '\0') {
+ result.append(buf, pos, count - pos);
+ } else {
+ result.append(buf, pos, count - pos - 1);
+ }
pos = count;
}
}
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/InputStreamReader.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/InputStreamReader.java?view=diff&rev=486690&r1=486689&r2=486690
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/InputStreamReader.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/InputStreamReader.java Wed Dec 13 07:40:45 2006
@@ -47,12 +47,12 @@
private static final int BUFFER_SIZE = 8192;
+ private boolean endOfInput = false;
+
CharsetDecoder decoder;
ByteBuffer bytes = ByteBuffer.allocate(BUFFER_SIZE);
- CharBuffer chars = CharBuffer.allocate(BUFFER_SIZE);
-
/**
* Constructs a new InputStreamReader on the InputStream <code>in</code>.
* Now character reading can be filtered through this InputStreamReader.
@@ -71,7 +71,6 @@
decoder = Charset.forName(encoding).newDecoder().onMalformedInput(
CodingErrorAction.REPLACE).onUnmappableCharacter(
CodingErrorAction.REPLACE);
- chars.limit(0);
}
/**
@@ -103,7 +102,6 @@
} catch (IllegalArgumentException e) {
throw new UnsupportedEncodingException();
}
- chars.limit(0);
}
/**
@@ -121,7 +119,6 @@
dec.averageCharsPerByte();
this.in = in;
decoder = dec;
- chars.limit(0);
}
/**
@@ -140,7 +137,6 @@
decoder = charset.newDecoder().onMalformedInput(
CodingErrorAction.REPLACE).onUnmappableCharacter(
CodingErrorAction.REPLACE);
- chars.limit(0);
}
/**
@@ -348,17 +344,12 @@
@Override
public int read() throws IOException {
synchronized (lock) {
- if (isOpen()) {
- if (chars.limit() == chars.position()) {
- fillBuf();
- }
- if (chars.limit() == 0) {
- return -1;
- }
- return chars.get();
- }
- // K0070=InputStreamReader is closed.
- throw new IOException(Msg.getString("K0070")); //$NON-NLS-1$
+ if (!isOpen())
+ // K0070=InputStreamReader is closed.
+ throw new IOException(Msg.getString("K0070")); //$NON-NLS-1$
+
+ char buf[] = new char[1];
+ return read(buf, 0, 1) != -1 ? buf[0] : -1;
}
}
@@ -392,34 +383,76 @@
if (length == 0) {
return 0;
}
- // read at least once
- if (chars.limit() == chars.position()) {
- fillBuf();
- }
- int position = chars.position();
- int availableChars = chars.limit() - position;
- // read at least once for one byte
- int needChars = length;
- while (availableChars < needChars) {
- System.arraycopy(chars.array(), position, buf, offset,
- availableChars);
- chars.position(position + availableChars);
- needChars -= availableChars;
- offset += availableChars;
- if (in.available() <= 0) {
- return needChars == length ? -1 : length - needChars;
- }
- fillBuf();
- position = chars.position();
- availableChars = chars.limit();
- if (availableChars == 0) {
- return needChars == length ? -1 : length - needChars;
- }
- }
- System.arraycopy(chars.array(), position, buf, offset,
- needChars);
- chars.position(chars.position() + needChars);
- return length;
+
+ CharBuffer out = CharBuffer.wrap(buf, offset, length);
+ CoderResult result = CoderResult.UNDERFLOW;
+ byte[] a = bytes.array();
+ boolean has_been_read = false;
+
+
+ if(!bytes.hasRemaining() || bytes.limit() == bytes.capacity()) {
+ // Nothing is available in the buffer...
+ if(!bytes.hasRemaining())
+ bytes.clear();
+ int readed = in.read(a, bytes.arrayOffset(), bytes.remaining());
+ if(readed == -1) {
+ endOfInput = true;
+ return -1;
+ }
+ bytes.limit(readed);
+ has_been_read = true;
+ }
+ while (out.hasRemaining()) {
+ if (bytes.hasRemaining()) {
+ result = decoder.decode(bytes, out, false);
+ if (!bytes.hasRemaining() && endOfInput) {
+ decoder.decode(bytes, out, true);
+ decoder.flush(out);
+ decoder.reset();
+ break;
+ }
+ if(!out.hasRemaining() || bytes.position() == bytes.limit())
+ bytes.compact();
+ }
+ if(in.available() > 0 && (!has_been_read && out.hasRemaining()) || out.position() == 0 ) {
+ bytes.compact();
+ int to_read = bytes.remaining();
+ int off = bytes.arrayOffset() + bytes.position();
+
+ to_read = in.read(a, off, to_read);
+ if (to_read == -1) {
+ if(bytes.hasRemaining())
+ bytes.flip();
+ endOfInput = true;
+ break;
+ }
+ has_been_read = true;
+ if(to_read > 0) {
+ bytes.limit(bytes.position()+to_read);
+ bytes.position(0);
+ }
+ } else
+ break;
+ }
+
+ if(result == CoderResult.UNDERFLOW && endOfInput) {
+ result = decoder.decode(bytes, out, true);
+ // FIXME: should flush at first, but seems ICU has a bug that
+ // it will throw IAE if some malform/unmappable bytes found during
+ // decoding
+ // result = decoder.flush(chars);
+ decoder.reset();
+ }
+ if(result.isMalformed()) {
+ throw new MalformedInputException(result.length());
+ }else if(result.isUnmappable()){
+ throw new UnmappableCharacterException(result.length());
+ }
+ if(result == CoderResult.OVERFLOW && bytes.position()!=0)
+ bytes.flip();
+
+ return out.position() - offset == 0 ? -1 : out.position() - offset;
+
}
// K0070=InputStreamReader is closed.
throw new IOException(Msg.getString("K0070")); //$NON-NLS-1$
@@ -434,46 +467,6 @@
return in != null;
}
- /*
- * refill the buffer from wrapped InputStream
- */
- private void fillBuf() throws IOException {
- chars.clear();
- int read = 0;
- do {
- try {
- read = in.read(bytes.array());
- } catch (IOException e) {
- chars.limit(0);
- throw e;
- }
- boolean endOfInput = false;
- if (read == -1) {
- bytes.limit(0);
- endOfInput = true;
- } else {
- bytes.limit(read);
- }
- CoderResult result = decoder.decode(bytes, chars, endOfInput);
- if (result.isMalformed()) {
- throw new MalformedInputException(result.length());
- } else if (result.isUnmappable()) {
- throw new UnmappableCharacterException(result.length());
- }
- if (endOfInput) {
- /*
- * FIXME: should flush at first, but seems ICU has a bug that it
- * will throw IAE if some malform/unmappable bytes found during
- * decoding.
- */
- // result = decoder.flush(chars);
- decoder.reset();
- }
- bytes.clear();
- } while (read > 0 && chars.position() == 0);
- chars.flip();
- }
-
/**
* Answers a <code>boolean</code> indicating whether or not this
* InputStreamReader is ready to be read without blocking. If the result is
@@ -499,7 +492,8 @@
throw new IOException(Msg.getString("K0070")); //$NON-NLS-1$
}
try {
- return chars.limit() > chars.position() || in.available() > 0;
+ return bytes.limit() != BUFFER_SIZE
+ || in.available() > 0;
} catch (IOException e) {
return false;
}
Modified: harmony/enhanced/classlib/trunk/modules/nio_char/src/main/java/java/nio/charset/CharsetDecoder.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/nio_char/src/main/java/java/nio/charset/CharsetDecoder.java?view=diff&rev=486690&r1=486689&r2=486690
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/nio_char/src/main/java/java/nio/charset/CharsetDecoder.java (original)
+++ harmony/enhanced/classlib/trunk/modules/nio_char/src/main/java/java/nio/charset/CharsetDecoder.java Wed Dec 13 07:40:45 2006
@@ -130,12 +130,6 @@
// the current status
private int status;
- private byte[] remains = null;
-
- // replaceString should be put into output by next decode invocation
- // if OVERFLOW occurred in current decode invocation.
- private boolean needReplace = false;
-
/*
* --------------------------------------- Constructor
* ---------------------------------------
@@ -266,18 +260,8 @@
}
output.flip();
- CharBuffer truncatedBuffer = null;
- // truncate elements after limit in the output.
- // clippedBuffer has the same value of capacity and limit.
- if (output.limit() == output.capacity()) {
- truncatedBuffer = output;
- } else {
- truncatedBuffer = CharBuffer.allocate(output.remaining());
- truncatedBuffer.put(output);
- truncatedBuffer.flip();
- }
status = FLUSH;
- return truncatedBuffer;
+ return output;
}
/*
@@ -384,43 +368,13 @@
throw new IllegalStateException();
}
- // the last decode invocation hasn't put replace string into out
- // because of OVERFLOW
- if(needReplace){
- if(out.remaining() >= replace.length()){
- out.put(replace);
- needReplace = false;
- }else{
- return CoderResult.OVERFLOW;
- }
- }
-
CoderResult result = null;
- // save old values of remains.length and the position of in.
- int remainsLength = 0;
- int inOldPosition = in.position();
-
- // construct decodingBuffer for decode.
- // put "remains" and "in" into decodingBuffer.
- ByteBuffer decodingBuffer = null;
- if (remains != null) {
- remainsLength = remains.length;
- decodingBuffer = ByteBuffer.allocate(remains.length
- + in.remaining());
- decodingBuffer.put(remains);
- remains = null;
- } else {
- decodingBuffer = ByteBuffer.allocate(in.remaining());
- }
- decodingBuffer.put(in);
- decodingBuffer.flip();
-
// begin to decode
while (true) {
CodingErrorAction action = null;
try {
- result = decodeLoop(decodingBuffer, out);
+ result = decodeLoop(in, out);
} catch (BufferOverflowException ex) {
// unexpected exception
throw new CoderMalfunctionError(ex);
@@ -432,49 +386,35 @@
/*
* result handling
*/
- if (result.isUnderflow()) {
- if (endOfInput) {
- if (decodingBuffer.hasRemaining()) {
- result = CoderResult.malformedForLength(decodingBuffer
- .remaining());
- decodingBuffer.position(decodingBuffer.limit());
- }
- } else {
- if (decodingBuffer.hasRemaining()) {
- remains = new byte[decodingBuffer.remaining()];
- decodingBuffer.get(remains);
- }
+ if(result.isUnderflow()) {
+ int remaining = in.remaining();
+ if(endOfInput && remaining > 0) {
+ result = CoderResult.malformedForLength(remaining);
+ }else{
+ status = endOfInput ? END : ONGOING;
+ return result;
}
+ }
+ if (result.isOverflow()) {
+ return result;
}
// set coding error handle action
- if (result.isMalformed()) {
- action = malformAction;
- } else if (result.isUnmappable()) {
+ action = malformAction;
+ if(result.isUnmappable()) {
action = unmapAction;
}
// If the action is IGNORE or REPLACE, we should continue decoding.
- if (action == CodingErrorAction.IGNORE) {
- continue;
- } else if (action == CodingErrorAction.REPLACE) {
- if (out.remaining() < replace.length()) {
- result = CoderResult.OVERFLOW;
- needReplace = true;
- } else {
- out.put(replace);
- continue;
+ if(action == CodingErrorAction.REPLACE) {
+ if(out.remaining() < replace.length()) {
+ return CoderResult.OVERFLOW;
}
+ out.put(replace);
+ }else{
+ if(action != CodingErrorAction.IGNORE)
+ return result;
}
- // otherwise, the decode process ends.
- break;
+ in.position(in.position() + result.length());
}
- // set in new position
- int offset = decodingBuffer.position() > remainsLength ? (decodingBuffer
- .position() - remainsLength)
- : 0;
- in.position(inOldPosition + offset);
-
- status = endOfInput ? END : ONGOING;
- return result;
}
/**
@@ -792,7 +732,6 @@
*/
public final CharsetDecoder reset() {
status = INIT;
- remains = null;
implReset();
return this;
}
Modified: harmony/enhanced/classlib/trunk/modules/nio_char/src/main/java/java/nio/charset/CharsetEncoder.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/nio_char/src/main/java/java/nio/charset/CharsetEncoder.java?view=diff&rev=486690&r1=486689&r2=486690
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/nio_char/src/main/java/java/nio/charset/CharsetEncoder.java (original)
+++ harmony/enhanced/classlib/trunk/modules/nio_char/src/main/java/java/nio/charset/CharsetEncoder.java Wed Dec 13 07:40:45 2006
@@ -123,11 +123,6 @@
// internal status
private int status;
- //
- private char[] remains = null;
-
- private boolean needReplace = false;
-
// action for malformed input
private CodingErrorAction malformAction;
@@ -377,18 +372,8 @@
} else if (result.isUnmappable()) {
throw new UnmappableCharacterException(result.length());
}
- ByteBuffer truncatedBuffer = null;
- // truncate elements after limit in the output.
- // clippedBuffer has the same value of capacity and limit.
- if (output.limit() == output.capacity()) {
- truncatedBuffer = output;
- } else {
- truncatedBuffer = ByteBuffer.allocate(output.remaining());
- truncatedBuffer.put(output);
- truncatedBuffer.flip();
- }
status = FLUSH;
- return truncatedBuffer;
+ return output;
}
/*
@@ -487,98 +472,45 @@
throw new IllegalStateException();
}
- // construct encodingBuffer for encode.
- // put "remains" and "in" into encodingBuffer.
- int remainsLength = 0;
- int inOldPosition = in.position();
- CharBuffer encodingBuffer = null;
-
- // check whether need to put the last input replace string.
- if (needReplace) {
- if (out.remaining() >= replace.length) {
- out.put(replace);
- needReplace = false;
- } else {
- return CoderResult.OVERFLOW;
- }
- }
-
- if (remains != null) {
- remainsLength = remains.length;
- encodingBuffer = CharBuffer.allocate(remains.length
- + in.remaining());
- encodingBuffer.put(remains);
- remains = null;
- } else {
- encodingBuffer = CharBuffer.allocate(in.remaining());
- }
- encodingBuffer.put(in);
- encodingBuffer.flip();
-
- CoderResult result = CoderResult.UNDERFLOW;
- if (encodingBuffer.remaining() > 0) {
- while (true) {
- CodingErrorAction action = null;
- try {
- result = encodeLoop(encodingBuffer, out);
- } catch (BufferOverflowException ex) {
- throw new CoderMalfunctionError(ex);
- } catch (BufferUnderflowException ex) {
- throw new CoderMalfunctionError(ex);
- }
- /*
- * result handling
- */
- if (result.isUnderflow()) {
- if (endOfInput) {
- if (encodingBuffer.hasRemaining()) {
- result = CoderResult
- .malformedForLength(encodingBuffer
- .remaining());
- encodingBuffer.position(encodingBuffer.limit());
- }
- } else {
- if (encodingBuffer.hasRemaining()) {
- remains = new char[encodingBuffer.remaining()];
- encodingBuffer.get(remains);
- }
- }
- }
- // set coding error handle action
- if (result.isMalformed()) {
- action = malformAction;
- } else if (result.isUnmappable()) {
- action = unmapAction;
- }
- // If the action is IGNORE or REPLACE, we should continue
- // decoding.
- if (action == CodingErrorAction.IGNORE) {
- continue;
- } else if (action == CodingErrorAction.REPLACE) {
- if (out.remaining() < replace.length) {
- if (!endOfInput) {
- // set needReplace flag.
- // replace string will be put next time.
- needReplace = true;
- }
- result = CoderResult.OVERFLOW;
- } else {
- out.put(replace);
- continue;
- }
- }
- // otherwise, the decode process ends.
- break;
- }
- }
- // set in new position
- int offset = encodingBuffer.position() > remainsLength ? (encodingBuffer
- .position() - remainsLength)
- : 0;
- in.position(inOldPosition + offset);
-
- status = endOfInput ? END : ONGOING;
- return result;
+ CoderResult result;
+ while(true){
+ try{
+ result = encodeLoop(in, out);
+ } catch(BufferOverflowException e){
+ throw new CoderMalfunctionError (e);
+ } catch(BufferUnderflowException e){
+ throw new CoderMalfunctionError (e);
+ }
+ if(result.isUnderflow()) {
+ int remaining = in.remaining();
+ if(endOfInput && remaining > 0) {
+ result = CoderResult.malformedForLength(remaining);
+ }else{
+ status = endOfInput ? END : ONGOING;
+ return result;
+ }
+
+ }
+ if (result.isOverflow()) {
+ return result;
+ }
+ CodingErrorAction action = malformAction;
+ if(result.isUnmappable()) {
+ action = unmapAction;
+ }
+ // If the action is IGNORE or REPLACE, we should continue
+ // encoding.
+ if(action == CodingErrorAction.REPLACE) {
+ if(out.remaining() < replace.length) {
+ return CoderResult.OVERFLOW;
+ }
+ out.put(replace);
+ }else{
+ if(action != CodingErrorAction.IGNORE)
+ return result;
+ }
+ in.position(in.position() + result.length());
+ }
}
/**
Modified: harmony/enhanced/classlib/trunk/modules/nio_char/src/test/java/org/apache/harmony/nio_char/tests/java/nio/charset/CharsetDecoderTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/nio_char/src/test/java/org/apache/harmony/nio_char/tests/java/nio/charset/CharsetDecoderTest.java?view=diff&rev=486690&r1=486689&r2=486690
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/nio_char/src/test/java/org/apache/harmony/nio_char/tests/java/nio/charset/CharsetDecoderTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/nio_char/src/test/java/org/apache/harmony/nio_char/tests/java/nio/charset/CharsetDecoderTest.java Wed Dec 13 07:40:45 2006
@@ -197,8 +197,7 @@
result = decoder.decode(in, out, true);
out.flip();
assertTrue(result.isUnderflow());
- // TODO: the following assertion fails on the Reference Impl -- see HARMONY-148
- assertEquals("abb", out.toString());
+ assertEquals("bb", out.toString());
}
/*
Modified: harmony/enhanced/classlib/trunk/modules/nio_char/src/test/java/org/apache/harmony/nio_char/tests/java/nio/charset/CharsetEncoderTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/nio_char/src/test/java/org/apache/harmony/nio_char/tests/java/nio/charset/CharsetEncoderTest.java?view=diff&rev=486690&r1=486689&r2=486690
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/nio_char/src/test/java/org/apache/harmony/nio_char/tests/java/nio/charset/CharsetEncoderTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/nio_char/src/test/java/org/apache/harmony/nio_char/tests/java/nio/charset/CharsetEncoderTest.java Wed Dec 13 07:40:45 2006
@@ -163,7 +163,7 @@
assertEquals(4, out.remaining());
assertTrue(result.isUnderflow());
result = encoder.encode(in2, out, true);
- assertEquals(0, out.remaining());
- assertTrue(result.isUnderflow());
+ assertEquals(4, out.remaining());
+ assertTrue(result.isMalformed());
}
}
Modified: harmony/enhanced/classlib/trunk/modules/nio_char/src/test/java/tests/api/java/nio/charset/CharsetDecoderTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/nio_char/src/test/java/tests/api/java/nio/charset/CharsetDecoderTest.java?view=diff&rev=486690&r1=486689&r2=486690
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/nio_char/src/test/java/tests/api/java/nio/charset/CharsetDecoderTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/nio_char/src/test/java/tests/api/java/nio/charset/CharsetDecoderTest.java Wed Dec 13 07:40:45 2006
@@ -717,12 +717,12 @@
String result = new String(input);
if (result.startsWith("malform")) {
// reset the cursor to the error position
- in.position(inPosition + "malform".length());
+ in.position(inPosition);
// set the error length
return CoderResult.malformedForLength("malform".length());
} else if (result.startsWith("unmap")) {
// reset the cursor to the error position
- in.position(inPosition + "unmap".length());
+ in.position(inPosition);
// set the error length
return CoderResult.unmappableForLength("unmap".length());
} else if (result.startsWith("runtime")) {
Modified: harmony/enhanced/classlib/trunk/modules/nio_char/src/test/java/tests/api/java/nio/charset/CharsetEncoderTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/nio_char/src/test/java/tests/api/java/nio/charset/CharsetEncoderTest.java?view=diff&rev=486690&r1=486689&r2=486690
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/nio_char/src/test/java/tests/api/java/nio/charset/CharsetEncoderTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/nio_char/src/test/java/tests/api/java/nio/charset/CharsetEncoderTest.java Wed Dec 13 07:40:45 2006
@@ -1033,13 +1033,13 @@
String result = new String(input);
if (result.startsWith("malform")) {
// reset the cursor to the error position
- in.position(inPosition + "malform".length());
+ in.position(inPosition);
// in.position(0);
// set the error length
return CoderResult.malformedForLength("malform".length());
} else if (result.startsWith("unmap")) {
// reset the cursor to the error position
- in.position(inPosition + "unmap".length());
+ in.position(inPosition);
// in.position(0);
// set the error length
return CoderResult.unmappableForLength("unmap".length());