diff options
author | Mark Wielaard <mark@gcc.gnu.org> | 2003-06-07 18:35:00 +0000 |
---|---|---|
committer | Mark Wielaard <mark@gcc.gnu.org> | 2003-06-07 18:35:00 +0000 |
commit | 60e9f0d726fd28b960c5674a3c7beaf7015dbd34 (patch) | |
tree | 4416490914744db9c6d980b6558414bd86715239 /libjava/java/lang/natString.cc | |
parent | ddc612a2ba3864c86a0e9c0b30811727096c1772 (diff) | |
download | gcc-60e9f0d726fd28b960c5674a3c7beaf7015dbd34.zip gcc-60e9f0d726fd28b960c5674a3c7beaf7015dbd34.tar.gz gcc-60e9f0d726fd28b960c5674a3c7beaf7015dbd34.tar.bz2 |
re PR libgcj/8738 (java.io.CharArrayWriter's write methods erroneously throw IOExceptions)
2002-06-06 James Clark <jjc@jclark.com>
Fix for PR libgcj/8738:
* gnu/gcj/convert/UnicodeToBytes.java (havePendingBytes): New method.
* gnu/gcj/convert/Output_SJIS.java (havePendingBytes): Likewise.
* gnu/gcj/convert/Output_EUCJIS.java (havePendingBytes): Likewise.
* gnu/gcj/convert/Output_UTF8.java (havePendingBytes): Likewise.
(write): Always decrease avail when count is increased.
* java/lang/natString.cc (getBytes): Check converter havePendingBytes()
and whether output buffer is full before increasing size.
2002-06-06 Mark Wielaard <mark@klomp dot org>
* java/io/PrintStream.java (writeChars(char[],int, int)):
Check converter.havePendingBytes().
(writeChars(String,int,int)): Likewise.
* java/io/OutputStreamWriter.java (writeChars(char[], int, int)):
Check converter.havePendingBytes() and flush buffer when stalled.
From-SVN: r67595
Diffstat (limited to 'libjava/java/lang/natString.cc')
-rw-r--r-- | libjava/java/lang/natString.cc | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/libjava/java/lang/natString.cc b/libjava/java/lang/natString.cc index 8c9789e..98309cf 100644 --- a/libjava/java/lang/natString.cc +++ b/libjava/java/lang/natString.cc @@ -602,12 +602,12 @@ java::lang::String::getBytes (jstring enc) jint offset = 0; gnu::gcj::convert::UnicodeToBytes *converter = gnu::gcj::convert::UnicodeToBytes::getEncoder(enc); - while (todo > 0) + while (todo > 0 || converter->havePendingBytes()) { converter->setOutput(buffer, bufpos); int converted = converter->write(this, offset, todo, NULL); bufpos = converter->count; - if (converted == 0) + if (converted == 0 && bufpos == converter->count) { buflen *= 2; jbyteArray newbuffer = JvNewByteArray(buflen); @@ -615,10 +615,10 @@ java::lang::String::getBytes (jstring enc) buffer = newbuffer; } else - { - offset += converted; - todo -= converted; - } + bufpos = converter->count; + + offset += converted; + todo -= converted; } converter->done (); if (bufpos == buflen) |