From: Eliel C. Sardanons Date: Wed, 25 Mar 2009 14:12:54 +0000 (+0000) Subject: Avoid destroying the CLI line when moving the cursor backward and trying to autocomplete. X-Git-Tag: 1.4.25-rc1~107 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a81abfbd02ed726339be3a0b6950a90e6c77c2d5;p=thirdparty%2Fasterisk.git 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 --- diff --git a/main/asterisk.c b/main/asterisk.c index 2cabfc272b..eb79e71a18 100644 --- a/main/asterisk.c +++ b/main/asterisk.c @@ -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; }