mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-05 04:11:08 +00:00
Avoid destroying the CLI line when moving the cursor backward and trying to autocomplete.
When moving the cursor backward and pressing TAB to autocomplete, a NULL is put in the line and we are loosing what we have already wrote after the actual cursor position. (closes issue #14373) Reported by: eliel Patches: asterisk.c.patch uploaded by eliel (license 64) Tested by: lmadsen git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@184188 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -2121,11 +2121,12 @@ static char *cli_complete(EditLine *el, int ch)
|
||||
int nummatches = 0;
|
||||
char **matches;
|
||||
int retval = CC_ERROR;
|
||||
char buf[2048];
|
||||
char buf[2048], savechr;
|
||||
int res;
|
||||
|
||||
LineInfo *lf = (LineInfo *)el_line(el);
|
||||
|
||||
savechr = *(char *)lf->cursor;
|
||||
*(char *)lf->cursor = '\0';
|
||||
ptr = (char *)lf->cursor;
|
||||
if (ptr) {
|
||||
@@ -2151,8 +2152,10 @@ static char *cli_complete(EditLine *el, int ch)
|
||||
char *mbuf;
|
||||
int mlen = 0, maxmbuf = 2048;
|
||||
/* Start with a 2048 byte buffer */
|
||||
if (!(mbuf = ast_malloc(maxmbuf)))
|
||||
if (!(mbuf = ast_malloc(maxmbuf))) {
|
||||
lf->cursor[0] = savechr;
|
||||
return (char *)(CC_ERROR);
|
||||
}
|
||||
snprintf(buf, sizeof(buf),"_COMMAND MATCHESARRAY \"%s\" \"%s\"", lf->buffer, ptr);
|
||||
fdsend(ast_consock, buf);
|
||||
res = 0;
|
||||
@@ -2161,8 +2164,10 @@ static char *cli_complete(EditLine *el, int ch)
|
||||
if (mlen + 1024 > maxmbuf) {
|
||||
/* Every step increment buffer 1024 bytes */
|
||||
maxmbuf += 1024;
|
||||
if (!(mbuf = ast_realloc(mbuf, maxmbuf)))
|
||||
if (!(mbuf = ast_realloc(mbuf, maxmbuf))) {
|
||||
lf->cursor[0] = savechr;
|
||||
return (char *)(CC_ERROR);
|
||||
}
|
||||
}
|
||||
/* Only read 1024 bytes at a time */
|
||||
res = read(ast_consock, mbuf + mlen, 1024);
|
||||
@@ -2222,6 +2227,8 @@ static char *cli_complete(EditLine *el, int ch)
|
||||
free(matches);
|
||||
}
|
||||
|
||||
lf->cursor[0] = savechr;
|
||||
|
||||
return (char *)(long)retval;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user