aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libjava/ChangeLog6
-rw-r--r--libjava/gnu/gcj/convert/IOConverter.java4
-rw-r--r--libjava/java/io/InputStreamReader.java20
3 files changed, 26 insertions, 4 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 39e2fd0..657e238 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,5 +1,11 @@
2005-07-06 Tom Tromey <tromey@redhat.com>
+ * java/io/InputStreamReader.java (refill): Handle no-progress
+ case correctly.
+ * gnu/gcj/convert/IOConverter.java: Add 'utf8' alias.
+
+2005-07-06 Tom Tromey <tromey@redhat.com>
+
* testsuite/libjava.jacks/jacks.xfail: Removed 9.1.3-body-5.
2005-07-05 Bryce McKinlay <mckinlay@redhat.com>
diff --git a/libjava/gnu/gcj/convert/IOConverter.java b/libjava/gnu/gcj/convert/IOConverter.java
index ba3260a..2c6849c 100644
--- a/libjava/gnu/gcj/convert/IOConverter.java
+++ b/libjava/gnu/gcj/convert/IOConverter.java
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000, 2001 Free Software Foundation
+/* Copyright (C) 2000, 2001, 2005 Free Software Foundation
This file is part of libgcj.
@@ -28,6 +28,8 @@ public abstract class IOConverter
// canonical name.
hash.put ("iso-latin-1", "8859_1");
hash.put ("iso8859_1", "8859_1");
+ // At least one build script out there uses 'utf8'.
+ hash.put ("utf8", "UTF8");
// On Solaris the default encoding, as returned by nl_langinfo(),
// is `646' (aka ASCII), but the Solaris iconv_open() doesn't
// understand that. We work around the problem by adding an
diff --git a/libjava/java/io/InputStreamReader.java b/libjava/java/io/InputStreamReader.java
index f8ad53c..e55f135 100644
--- a/libjava/java/io/InputStreamReader.java
+++ b/libjava/java/io/InputStreamReader.java
@@ -289,9 +289,23 @@ public class InputStreamReader extends Reader
return -1;
converter.setInput(in.buf, in.pos, in.count);
int count = converter.read(buf, offset, length);
- in.skip(converter.inpos - in.pos);
- if (count > 0)
- return count;
+
+ // We might have bytes but not have made any progress. In
+ // this case we try to refill. If refilling fails, we assume
+ // we have a malformed character at the end of the stream.
+ if (count == 0 && converter.inpos == in.pos)
+ {
+ in.mark(in.count);
+ if (! in.refill ())
+ throw new CharConversionException ();
+ in.reset();
+ }
+ else
+ {
+ in.skip(converter.inpos - in.pos);
+ if (count > 0)
+ return count;
+ }
}
}
}