OutputStreamWriter.java (writeChars): Use a 'do' loop.
* java/io/OutputStreamWriter.java (writeChars): Use a 'do' loop. Set 'out.count' earlier. (close): Call setFinished on converter. (flush): Always write work buffer. * java/io/PrintStream.java (writeChars): Do 'do' loop. (close): Call setFinished on converter. Write a 'flush' array. * java/lang/natString.cc (getBytes): Call setFinished on converter. * gnu/gcj/convert/CharsetToBytesAdaptor.java (hasBytes): New field. (write): Set hasBytes. Changed 'finished' logic. (havePendingBytes): Rewrote. (setFinished): New method. * gnu/gcj/convert/UnicodeToBytes.java (setFinished): New method. * testsuite/libjava.lang/RH194522.java: New file. * testsuite/libjava.lang/RH194522.out: New file. From-SVN: r115039
This commit is contained in:
@@ -38,6 +38,11 @@ public class CharsetToBytesAdaptor extends UnicodeToBytes
|
||||
*/
|
||||
private boolean closedEncoder;
|
||||
|
||||
/**
|
||||
* True if there are bytes pending in the encoder.
|
||||
*/
|
||||
private boolean hasBytes;
|
||||
|
||||
/**
|
||||
* True if we're finished.
|
||||
*/
|
||||
@@ -112,20 +117,16 @@ public class CharsetToBytesAdaptor extends UnicodeToBytes
|
||||
// Set the current position.
|
||||
outBuf.position(count);
|
||||
|
||||
// If we've already said that there is no more input available,
|
||||
// then we simply try to flush again.
|
||||
// Do the conversion.
|
||||
CoderResult result = encoder.encode(inBuf, outBuf, closedEncoder);
|
||||
hasBytes = result == CoderResult.OVERFLOW;
|
||||
if (closedEncoder)
|
||||
{
|
||||
CoderResult result = encoder.flush(outBuf);
|
||||
result = encoder.flush(outBuf);
|
||||
if (result == CoderResult.UNDERFLOW)
|
||||
finished = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Do the conversion. If there are no characters to write,
|
||||
// then we are finished.
|
||||
closedEncoder = ! inBuf.hasRemaining();
|
||||
encoder.encode(inBuf, outBuf, closedEncoder);
|
||||
else
|
||||
hasBytes = true;
|
||||
}
|
||||
|
||||
// Mark the new end of buf.
|
||||
@@ -140,7 +141,12 @@ public class CharsetToBytesAdaptor extends UnicodeToBytes
|
||||
*/
|
||||
public boolean havePendingBytes()
|
||||
{
|
||||
return ! finished;
|
||||
return hasBytes;
|
||||
}
|
||||
|
||||
public void setFinished()
|
||||
{
|
||||
closedEncoder = true;
|
||||
}
|
||||
|
||||
// These aren't cached.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1999, 2000, 2001, 2003, 2005 Free Software Foundation
|
||||
/* Copyright (C) 1999, 2000, 2001, 2003, 2005, 2006 Free Software Foundation
|
||||
|
||||
This file is part of libgcj.
|
||||
|
||||
@@ -172,6 +172,15 @@ public abstract class UnicodeToBytes extends IOConverter
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Users should call this method when the input is coming to an
|
||||
* end. This signals that the next write (which might be
|
||||
* zero-length) ought to flush any internal state.
|
||||
*/
|
||||
public void setFinished()
|
||||
{
|
||||
}
|
||||
|
||||
/** Indicate that the converter is resuable.
|
||||
* This class keeps track of converters on a per-encoding basis.
|
||||
* When done with an encoder you may call this method to indicate
|
||||
|
||||
Reference in New Issue
Block a user