changeset 37734:3d05b438e278

(ccl_driver): Don't copy remaining bytes in case of CCL_STAT_INVALID_CMD.
author Gerd Moellmann <gerd@gnu.org>
date Tue, 15 May 2001 10:39:16 +0000
parents 2d969f61e620
children 349b1a0d19ab
files src/ccl.c
diffstat 1 files changed, 14 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/ccl.c	Mon May 14 20:53:03 2001 +0000
+++ b/src/ccl.c	Tue May 15 10:39:16 2001 +0000
@@ -860,15 +860,15 @@
 {
   register int *reg = ccl->reg;
   register int ic = ccl->ic;
-  register int code, field1, field2;
+  register int code = 0, field1, field2;
   register Lisp_Object *ccl_prog = ccl->prog;
   unsigned char *src = source, *src_end = src + src_bytes;
   unsigned char *dst = destination, *dst_end = dst + dst_bytes;
   int jump_address;
-  int i, j, op;
+  int i = 0, j, op;
   int stack_idx = ccl->stack_idx;
   /* Instruction counter of the current CCL code. */
-  int this_ic;
+  int this_ic = 0;
   /* CCL_WRITE_CHAR will produce 8-bit code of range 0x80..0x9F.  But,
      each of them will be converted to multibyte form of 2-byte
      sequence.  For that conversion, we remember how many more bytes
@@ -878,7 +878,7 @@
   if (ic >= ccl->eof_ic)
     ic = CCL_HEADER_MAIN;
 
-  if (ccl->buf_magnification ==0) /* We can't produce any bytes.  */
+  if (ccl->buf_magnification == 0) /* We can't produce any bytes.  */
     dst = NULL;
 
   /* Set mapping stack pointer. */
@@ -1824,8 +1824,12 @@
 	  bcopy (msg, dst, msglen);
 	  dst += msglen;
 	}
+      
       if (ccl->status == CCL_STAT_INVALID_CMD)
 	{
+#if 0 /* If the remaining bytes contain 0x80..0x9F, copying them
+	 results in an invalid multibyte sequence.  */
+
 	  /* Copy the remaining source data.  */
 	  int i = src_end - src;
 	  if (dst_bytes && (dst_end - dst) < i)
@@ -1833,6 +1837,10 @@
 	  bcopy (src, dst, i);
 	  src += i;
 	  dst += i;
+#else
+	  /* Signal that we've consumed everything.  */
+	  src = src_end;
+#endif
 	}
     }
 
@@ -1841,7 +1849,8 @@
   ccl->stack_idx = stack_idx;
   ccl->prog = ccl_prog;
   ccl->eight_bit_control = (extra_bytes > 0);
-  if (consumed) *consumed = src - source;
+  if (consumed)
+    *consumed = src - source;
   return (dst ? dst - destination : 0);
 }