PatchSet 5837 
Date: 2005/01/12 16:18:42
Author: kaz
Branch: HEAD
Tag: (none) 
Log:
2005-01-12  Ito Kazumitsu  <[EMAIL PROTECTED]>

        * libraries/clib/native/CharToByteIconv.c
        (Java_kaffe_io_CharToByteIconv_convert):
        Check whether errno == EILSEQ.

        * libraries/javalib/all.files:
        Add kaffe/libraries/javalib/kaffe/io/KaffeCharset.java and
        kaffe/libraries/javalib/kaffe/io/KaffeCharsetProvider.java.

        * libraries/javalib/gnu/java/nio/channels/FileChannelImpl.java
        (write(ByteBuffer)): Move the position of the source buffer forward.

        * kaffe/libraries/javalib/kaffe/io/KaffeCharset.java:
        Initial bugs fixed.

Members: 
        ChangeLog:1.3381->1.3382 
        libraries/clib/native/CharToByteIconv.c:1.10->1.11 
        libraries/javalib/all.files:1.70->1.71 
        libraries/javalib/gnu/java/nio/channels/FileChannelImpl.java:1.2->1.3 
        libraries/javalib/kaffe/io/KaffeCharset.java:1.1->1.2 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.3381 kaffe/ChangeLog:1.3382
--- kaffe/ChangeLog:1.3381      Wed Jan 12 13:20:53 2005
+++ kaffe/ChangeLog     Wed Jan 12 16:18:42 2005
@@ -1,3 +1,19 @@
+2005-01-12  Ito Kazumitsu  <[EMAIL PROTECTED]>
+
+       * libraries/clib/native/CharToByteIconv.c
+       (Java_kaffe_io_CharToByteIconv_convert):
+       Check whether errno == EILSEQ.
+
+       * libraries/javalib/all.files:
+       Add kaffe/libraries/javalib/kaffe/io/KaffeCharset.java and
+       kaffe/libraries/javalib/kaffe/io/KaffeCharsetProvider.java.
+
+       * libraries/javalib/gnu/java/nio/channels/FileChannelImpl.java
+       (write(ByteBuffer)): Move the position of the source buffer forward.
+
+       * kaffe/libraries/javalib/kaffe/io/KaffeCharset.java:
+       Initial bugs fixed.
+
 2005-01-12  Guilhem Lavaux  <[EMAIL PROTECTED]>
 
        * libraries/javalib/gnu/java/io/EncodingManager.java
Index: kaffe/libraries/clib/native/CharToByteIconv.c
diff -u kaffe/libraries/clib/native/CharToByteIconv.c:1.10 
kaffe/libraries/clib/native/CharToByteIconv.c:1.11
--- kaffe/libraries/clib/native/CharToByteIconv.c:1.10  Tue Dec 21 05:49:58 2004
+++ kaffe/libraries/clib/native/CharToByteIconv.c       Wed Jan 12 16:18:46 2005
@@ -25,6 +25,8 @@
 #include <unistd.h>
 #endif
 
+#include <errno.h>
+
 static jfieldID cd_id;
 static jmethodID carry_id;
 
@@ -82,6 +84,15 @@
     int                ret;
 
     ret = iconv (cd, (ICONV_CONST char **) &icv_in, &icv_inlen, &icv_out, 
&icv_outlen);
+    if (ret < 0) {
+       /* convert the unmappable character to '?' */
+       if (errno == EILSEQ && icv_outlen > 0) {
+               icv_in += 2;
+               icv_inlen -= 2;
+               *(icv_out++) = '?';
+               icv_outlen--;
+       }
+    }
     if (icv_inlen > 0) {
        /* In case we have some bytes left, save them */
        (*env)->CallVoidMethod(env, _this, carry_id,
Index: kaffe/libraries/javalib/all.files
diff -u kaffe/libraries/javalib/all.files:1.70 
kaffe/libraries/javalib/all.files:1.71
--- kaffe/libraries/javalib/all.files:1.70      Sun Jan  9 21:05:43 2005
+++ kaffe/libraries/javalib/all.files   Wed Jan 12 16:18:48 2005
@@ -3381,6 +3381,8 @@
 kaffe/io/CircularBuffer.java
 kaffe/io/ClassLoaderObjectInputStream.java
 kaffe/io/ConverterAlias.java
+kaffe/io/KaffeCharset.java
+kaffe/io/KaffeCharsetProvider.java
 kaffe/io/NullOutputStream.java
 kaffe/io/StdErrorStream.java
 kaffe/io/StdInputStream.java
Index: kaffe/libraries/javalib/gnu/java/nio/channels/FileChannelImpl.java
diff -u kaffe/libraries/javalib/gnu/java/nio/channels/FileChannelImpl.java:1.2 
kaffe/libraries/javalib/gnu/java/nio/channels/FileChannelImpl.java:1.3
--- kaffe/libraries/javalib/gnu/java/nio/channels/FileChannelImpl.java:1.2      
Tue May 18 16:13:29 2004
+++ kaffe/libraries/javalib/gnu/java/nio/channels/FileChannelImpl.java  Wed Jan 
12 16:18:50 2005
@@ -191,6 +191,7 @@
       {
        byte[] buffer = src.array();
        write(buffer, src.arrayOffset() + src.position(), len);
+        src.position(src.position() + len);
       }
     else
       {
Index: kaffe/libraries/javalib/kaffe/io/KaffeCharset.java
diff -u kaffe/libraries/javalib/kaffe/io/KaffeCharset.java:1.1 
kaffe/libraries/javalib/kaffe/io/KaffeCharset.java:1.2
--- kaffe/libraries/javalib/kaffe/io/KaffeCharset.java:1.1      Mon Jan 10 
15:13:34 2005
+++ kaffe/libraries/javalib/kaffe/io/KaffeCharset.java  Wed Jan 12 16:18:52 2005
@@ -46,7 +46,7 @@
   // I know nothing about any charset other than myself.
   public boolean contains (Charset cs)
   {
-    return this.getClass().isInstance(cs);
+    return this.name().equalsIgnoreCase(cs.name());
   }
 
   private static final class Decoder extends CharsetDecoder
@@ -68,6 +68,8 @@
 
     private kaffe.io.ByteToCharConverter b2c;
 
+    // Kaffe's BytetoCharConverter cannot report byte sequence being
+    // malformed. Undecodable bytes are always converted to '?'.
     protected CoderResult decodeLoop (ByteBuffer in, CharBuffer out)
     {
       byte[] inbuf = null;
@@ -80,7 +82,7 @@
       if (in.hasArray())
         {
           inbuf = in.array();
-          inPos = in.position();
+          inPos = in.arrayOffset() + in.position();
           inLen = in.remaining();
           in.position(in.limit());
         }
@@ -94,7 +96,7 @@
       if (out.hasArray())
         {
           outbuf = out.array();
-          outPos = out.position();
+          outPos = out.arrayOffset() + out.position();
           outLen = out.remaining();
         }
       else {
@@ -107,7 +109,7 @@
 
       if (out.hasArray())
         {
-          out.position(outPos + l);
+          out.position(out.position() + l);
         }
       else
         {
@@ -155,6 +157,8 @@
 
     private kaffe.io.CharToByteConverter c2b;
 
+    // Kaffe's CharToByteConverter cannot report characters being unmappable.
+    // Unmappable characters are always converted to '?'.
     protected CoderResult encodeLoop (CharBuffer in, ByteBuffer out)
     {
       char[] inbuf = null;
@@ -167,7 +171,7 @@
       if (in.hasArray())
         {
           inbuf = in.array();
-          inPos = in.position();
+          inPos = in.arrayOffset() + in.position();
           inLen = in.remaining();
           in.position(in.limit());
         }
@@ -181,11 +185,11 @@
       if (out.hasArray())
         {
           outbuf = out.array();
-          outPos = out.position();
+          outPos = out.arrayOffset() + out.position();
           outLen = out.remaining();
         }
-else {
-  outbuf = new byte[out.remaining()];
+      else {
+          outbuf = new byte[out.remaining()];
           outPos = 0;
           outLen = outbuf.length;
         }
@@ -194,7 +198,7 @@
 
       if (out.hasArray())
         {
-          out.position(outPos + l);
+          out.position(out.position() + l);
         }
       else
         {

_______________________________________________
kaffe mailing list
[email protected]
http://kaffe.org/cgi-bin/mailman/listinfo/kaffe

Reply via email to