changeset 88101:5297ed06b207

(CCL_WRITE_CHAR, CCL_WRITE_MULTIBYTE_CHAR, ccl_driver): Cancel previous change.
author Kenichi Handa <handa@m17n.org>
date Fri, 01 Feb 2008 01:18:05 +0000
parents 9623247b8103
children 0fa30755c209
files src/ccl.c
diffstat 1 files changed, 10 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/ccl.c	Thu Jan 31 22:54:22 2008 +0000
+++ b/src/ccl.c	Fri Feb 01 01:18:05 2008 +0000
@@ -748,13 +748,16 @@
     int bytes = SINGLE_BYTE_CHAR_P (ch) ? 1: CHAR_BYTES (ch);		\
     if (!dst)								\
       CCL_INVALID_CMD;							\
-    if (ccl->eight_bit_control						\
-	&& bytes == 1 && (ch) >= 0x80 && (ch) < 0xA0)			\
-      extra_bytes++;							\
-    if (dst + bytes + extra_bytes <= (dst_bytes ? dst_end : src))	\
+    else if (dst + bytes + extra_bytes < (dst_bytes ? dst_end : src))	\
       {									\
 	if (bytes == 1)							\
-	  *dst++ = (ch);						\
+	  {								\
+	    *dst++ = (ch);						\
+	    if (extra_bytes && (ch) >= 0x80 && (ch) < 0xA0)		\
+	      /* We may have to convert this eight-bit char to		\
+		 multibyte form later.  */				\
+	      extra_bytes++;						\
+	  }								\
 	else if (CHAR_VALID_P (ch, 0))					\
 	  dst += CHAR_STRING (ch, dst);					\
 	else								\
@@ -772,7 +775,7 @@
     int bytes = CHAR_BYTES (ch);					\
     if (!dst)								\
       CCL_INVALID_CMD;							\
-    else if (dst + bytes + extra_bytes <= (dst_bytes ? dst_end : src))	\
+    else if (dst + bytes + extra_bytes < (dst_bytes ? dst_end : src))	\
       {									\
 	if (CHAR_VALID_P ((ch), 0))					\
 	  dst += CHAR_STRING ((ch), dst);				\
@@ -916,7 +919,7 @@
      each of them will be converted to multibyte form of 2-byte
      sequence.  For that conversion, we remember how many more bytes
      we must keep in DESTINATION in this variable.  */
-  int extra_bytes = 0;
+  int extra_bytes = ccl->eight_bit_control;
   int eof_ic = ccl->eof_ic;
   int eof_hit = 0;