coding.c (decode_coding_ccl): Fix previous change for the multibyte case.
authorKenichi Handa <handa@m17n.org>
Tue, 16 Mar 2010 02:14:40 +0000 (11:14 +0900)
committerKenichi Handa <handa@m17n.org>
Tue, 16 Mar 2010 02:14:40 +0000 (11:14 +0900)
src/ChangeLog
src/coding.c

index d8369bb..9dc5096 100644 (file)
@@ -1,3 +1,8 @@
+2010-03-16  Kenichi Handa  <handa@m17n.org>
+
+       * coding.c (decode_coding_ccl): Fix previous change for the
+       multibyte case.
+
 2010-03-15  Andreas Politz  <politza@fh-trier.de>  (tiny change)
 
        * editfns.c (Fformat): Account for string precision when computing
index df81eab..a464950 100644 (file)
@@ -5245,7 +5245,7 @@ decode_coding_ccl (coding)
   int multibytep = coding->src_multibyte;
   struct ccl_program *ccl = &coding->spec.ccl->ccl;
   int source_charbuf[1024];
-  int source_byteidx[1024];
+  int source_byteidx[1025];
   Lisp_Object attrs, charset_list;
 
   CODING_GET_INFO (coding, attrs, charset_list);
@@ -5256,11 +5256,14 @@ decode_coding_ccl (coding)
       int i = 0;
 
       if (multibytep)
-       while (i < 1024 && p < src_end)
-         {
-           source_byteidx[i] = p - src;
-           source_charbuf[i++] = STRING_CHAR_ADVANCE (p);
-         }
+       {
+         while (i < 1024 && p < src_end)
+           {
+             source_byteidx[i] = p - src;
+             source_charbuf[i++] = STRING_CHAR_ADVANCE (p);
+           }
+         source_byteidx[i] = p - src;
+       }
       else
        while (i < 1024 && p < src_end)
          source_charbuf[i++] = *p++;
@@ -5270,7 +5273,7 @@ decode_coding_ccl (coding)
       ccl_driver (ccl, source_charbuf, charbuf, i, charbuf_end - charbuf,
                  charset_list);
       charbuf += ccl->produced;
-      if (multibytep && ccl->consumed < i)
+      if (multibytep)
        src += source_byteidx[ccl->consumed];
       else
        src += ccl->consumed;