← Back to team overview

maria-developers team mailing list archive

Fwd: some question on bundled libedit in mysql

 

hi all:
    No reply from jonathan.perkin, so post to the maillist.

can some one explain to me?

Thanks!



---------- Forwarded message ----------
From: xiaobing jiang <s7v7nislands@xxxxxxxxx>
Date: Fri, Feb 22, 2013 at 3:52 PM
Subject: some question on bundled libedit in mysql
To: jonathan.perkin@xxxxxxxxxx


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


Follow ups