# HG changeset patch # User Kenichi Handa # Date 906124240 0 # Node ID ca159e828a68690ee3946ecc4ca0dfe07dd84f99 # Parent bad51ca51df3288583a7770f4ac144559b347f34 (ccl_coding_driver): If ccl_driver is interrupted by a user or the CCL program executed an invalid command, return CODING_FINISH_INTERRUPT. (code_convert_region): Pay attention to the converters return value CODING_FINISH_NORMAL and CODING_FINISH_INTERRUPT. diff -r bad51ca51df3 -r ca159e828a68 src/coding.c --- a/src/coding.c Fri Sep 18 13:10:40 1998 +0000 +++ b/src/coding.c Fri Sep 18 13:10:40 1998 +0000 @@ -3625,6 +3625,10 @@ case CCL_STAT_SUSPEND_BY_DST: result = CODING_FINISH_INSUFFICIENT_DST; break; + case CCL_STAT_QUIT: + case CCL_STAT_INVALID_CMD: + result = CODING_FINISH_INTERRUPT; + break; default: result = CODING_FINISH_NORMAL; break; @@ -4253,6 +4257,11 @@ src += coding->consumed; dst += inserted_byte; + if (result == CODING_FINISH_NORMAL) + { + src += len_byte; + break; + } if (! encodep && result == CODING_FINISH_INCONSISTENT_EOL) { unsigned char *pend = dst, *p = pend - inserted_byte; @@ -4320,6 +4329,20 @@ fake_multibyte = 1; break; } + if (result == CODING_FINISH_INTERRUPT) + { + /* The conversion procedure was interrupted by a user. */ + fake_multibyte = 1; + break; + } + /* Now RESULT == CODING_FINISH_INSUFFICIENT_DST */ + if (coding->consumed < 1) + { + /* It's quite strange to require more memory without + consuming any bytes. Perhaps CCL program bug. */ + fake_multibyte = 1; + break; + } if (first) { /* We have just done the first batch of conversion which was