Commit a3d8fcf2 authored by Kenichi Handa's avatar Kenichi Handa
Browse files

(Fccl_execute_on_string): Make multibyte string correctly.

If output buffer is too small, signal an appropriated error.
parent 3a5f42bb
......@@ -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;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment