changeset 107506:cd151730b160

coding.c (decode_coding_ccl): Fix previous change for the multibyte case.
author Kenichi Handa <handa@m17n.org>
date Tue, 16 Mar 2010 11:14:40 +0900
parents cea18e9685bf
children 8960853cf85d b81c0cdaa4b7
files src/ChangeLog src/coding.c
diffstat 2 files changed, 15 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Tue Mar 16 10:04:20 2010 +0900
+++ b/src/ChangeLog	Tue Mar 16 11:14:40 2010 +0900
@@ -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
--- a/src/coding.c	Tue Mar 16 10:04:20 2010 +0900
+++ b/src/coding.c	Tue Mar 16 11:14:40 2010 +0900
@@ -5245,7 +5245,7 @@
   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 @@
       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 @@
       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;