提交 323a3d61 authored 作者: Travis Cross's avatar Travis Cross

Avoid output of junk text by fs_cli

In some cases where `redisplay()` is called immediately after a
command is run (e.g. `log ...`) we often get a prompt, junk output,
and a second prompt.  This is due to a (known) race.

We believe we're falling afoul of this code in `el_deletestr`:

    if (el->el_line.cursor < &el->el_line.buffer[n])
            return;

Basing the length of text to delete off of the cursor position
resolves the issue of junk text, but the real solution is to eliminate
the race conditions, which will also resolve the sometimes duplicated
prompt.

FS-6764 #resolve

Thanks-to: Nathan Neulinger <nneul@neulinger.org>
上级 0f1494ae
...@@ -1284,7 +1284,7 @@ static void read_config(const char *dft_cfile, const char *cfile) { ...@@ -1284,7 +1284,7 @@ static void read_config(const char *dft_cfile, const char *cfile) {
static void clear_el_buffer(void) { static void clear_el_buffer(void) {
#ifdef HAVE_LIBEDIT #ifdef HAVE_LIBEDIT
const LineInfo *lf = el_line(el); const LineInfo *lf = el_line(el);
int len = (int)(lf->lastchar - lf->buffer); int len = (int)(lf->cursor - lf->buffer);
if (global_profile->batch_mode) return; if (global_profile->batch_mode) return;
el_deletestr(el, len); el_deletestr(el, len);
memset((char*)lf->buffer, 0, len); memset((char*)lf->buffer, 0, len);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论