]> code.delx.au - gnu-emacs/commitdiff
(ccl_driver): Don't copy remaining bytes in case
authorGerd Moellmann <gerd@gnu.org>
Tue, 15 May 2001 10:39:45 +0000 (10:39 +0000)
committerGerd Moellmann <gerd@gnu.org>
Tue, 15 May 2001 10:39:45 +0000 (10:39 +0000)
of CCL_STAT_INVALID_CMD.

src/ChangeLog
src/ccl.c

index d49a0e6c0fca5a76dd6c22ca7b468568269a999f..3f6c6dd7ad07b6eb4fe092346e826caeda948eb3 100644 (file)
@@ -1,3 +1,8 @@
+2001-05-15  Gerd Moellmann  <gerd@gnu.org>
+
+       * ccl.c (ccl_driver): Don't copy remaining bytes in case
+       of CCL_STAT_INVALID_CMD.
+
 2001-05-14  Stefan Monnier  <monnier@cs.yale.edu>
 
        * eval.c (Fdefvar): Only record (defvar <var>) in the load-history
index ce0a1bd4402cae8cf5a96b963b85db5b17795814..a69585cf0d5907a22ae50a82c6b1e54ef9f0ddbf 100644 (file)
--- a/src/ccl.c
+++ b/src/ccl.c
@@ -860,15 +860,15 @@ ccl_driver (ccl, source, destination, src_bytes, dst_bytes, consumed)
 {
   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 @@ ccl_driver (ccl, source, destination, src_bytes, dst_bytes, consumed)
   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 @@ ccl_driver (ccl, source, destination, src_bytes, dst_bytes, consumed)
          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 @@ ccl_driver (ccl, source, destination, src_bytes, dst_bytes, consumed)
          bcopy (src, dst, i);
          src += i;
          dst += i;
+#else
+         /* Signal that we've consumed everything.  */
+         src = src_end;
+#endif
        }
     }
 
@@ -1841,7 +1849,8 @@ ccl_driver (ccl, source, destination, src_bytes, dst_bytes, consumed)
   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);
 }