# HG changeset patch # User Gerd Moellmann # Date 989923156 0 # Node ID 3d05b438e2787a7e855d8ee05acebbf30be9098d # Parent 2d969f61e620cc169e78648088e3ff29b957f925 (ccl_driver): Don't copy remaining bytes in case of CCL_STAT_INVALID_CMD. diff -r 2d969f61e620 -r 3d05b438e278 src/ccl.c --- 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); }