From: Kenichi Handa Date: Tue, 19 Sep 2000 00:14:17 +0000 (+0000) Subject: (Fccl_execute_on_string): Make multibyte string correctly. X-Git-Tag: emacs-pretest-21.0.90~1536 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=a3d8fcf244a7012fd3c283460bc57a6b1fcd4918;p=emacs.git (Fccl_execute_on_string): Make multibyte string correctly. If output buffer is too small, signal an appropriated error. --- diff --git a/src/ccl.c b/src/ccl.c index d91d72b61f9..ca50081f47c 100644 --- a/src/ccl.c +++ b/src/ccl.c @@ -2035,21 +2035,27 @@ See the documentation of `define-ccl-program' for the detail of CCL program.") ccl.last_block = NILP (contin); ccl.multibyte = STRING_MULTIBYTE (str); produced = ccl_driver (&ccl, XSTRING (str)->data, outbuf, - STRING_BYTES (XSTRING (str)), outbufsize, (int *)0); + STRING_BYTES (XSTRING (str)), outbufsize, (int *) 0); for (i = 0; i < 8; i++) XSET (XVECTOR (status)->contents[i], Lisp_Int, ccl.reg[i]); XSETINT (XVECTOR (status)->contents[8], ccl.ic); UNGCPRO; if (NILP (unibyte_p)) - val = make_string (outbuf, produced); + { + int nchars; + + produced = str_as_multibyte (outbuf, outbufsize, produced, &nchars); + val = make_multibyte_string (outbuf, nchars, produced); + } else val = make_unibyte_string (outbuf, produced); xfree (outbuf); QUIT; + if (ccl.status == CCL_STAT_SUSPEND_BY_DST) + error ("Output buffer for the CCL programs overflow"); if (ccl.status != CCL_STAT_SUCCESS - && ccl.status != CCL_STAT_SUSPEND_BY_SRC - && ccl.status != CCL_STAT_SUSPEND_BY_DST) + && ccl.status != CCL_STAT_SUSPEND_BY_SRC) error ("Error in CCL program at %dth code", ccl.ic); return val;