Fwd: some question on bundled libedit in mysql
xiaobing jiang <[email protected]> Mon, 25 Feb 2013 17:55:36 +0800
| Newsgroups | gmane.comp.db.mysql.devel |
|---|---|
| Message-ID | <CACtveq8TbHBNSGc3u+VZZDiiQjbp54PeabT77dtMkXBz0TKp5Q@mail.gmail.com> |
hi all:
No reply from jonathan.perkin, so post to the maillist.
can some one explain to me?
Thanks!
---------- Forwarded message ----------
From: xiaobing jiang <[email protected]>
Date: Fri, Feb 22, 2013 at 3:52 PM
Subject: some question on bundled libedit in mysql
To: [email protected]
hi jonathan:
after read the README in source, I have some question about libedit.
in recently, we find a bug. when using bundled libedit, we can't
input the chinese using GBK. after debug, I find this code may be
cause the bug.
protected int
terminal__putc(EditLine *el, Int c)
{
char buf[MB_LEN_MAX +1];
ssize_t i;
mbstate_t state;
memset(&state, 0, sizeof(mbstate_t));
if (c == (Int)MB_FILL_CHAR)
return 0;
i = ct_encode_char(buf, (size_t)MB_CUR_MAX, c, &state); // this
should be: ct_encode_char(buf, (size_t)MB_LEN_MAX, c, &state);
if (i <= 0)
return (int)i;
buf[i] = '\0';
return fputs(buf, el->el_outfile);
}
after change the code, I can fix the bug. and I find upstream also
using MB_LEN_MAX.
http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libedit/terminal.c
protected int
terminal__putc(EditLine *el, Int c)
{
char buf[MB_LEN_MAX +1];
ssize_t i;
if (c == (Int)MB_FILL_CHAR)
return 0;
i = ct_encode_char(buf, (size_t)MB_LEN_MAX, c);
if (i <= 0)
return (int)i;
buf[i] = '\0';
return fputs(buf, el->el_outfile);
}
so the merge from upstream may be wrong.
And this bug may be the same
http://bugs.mysql.com/bug.php?id=23097
and why mysql5.6 remove the bundled readline? I think readline is used
more than libedit.
and when using system readline, why perfer libedit to readline ? look
at cmake/readline.cmake. FIND_SYSTEM_LIBEDIT(edit) ->
FIND_SYSTEM_LIBEDIT(readline)
thanks!
xiaobing jiang
--
MySQL Internals Mailing List
For list archives: http://lists.mysql.com/internals
To unsubscribe: http://lists.mysql.com/internals