Merged revisions 184220 via svnmerge from

https://origsvn.digium.com/svn/asterisk/trunk

................
  r184220 | eliel | 2009-03-25 10:38:19 -0400 (Wed, 25 Mar 2009) | 19 lines
  
  Merged revisions 184188 via svnmerge from 
  https://origsvn.digium.com/svn/asterisk/branches/1.4
  
  ........
    r184188 | eliel | 2009-03-25 10:12:54 -0400 (Wed, 25 Mar 2009) | 13 lines
    
    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.6.0@184222 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.6.0
Eliel C. Sardanons 16 years ago
parent ce37a27180
commit 6028684603

@ -2249,11 +2249,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) {
@ -2279,8 +2280,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;
@ -2289,8 +2292,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);
@ -2350,6 +2355,8 @@ static char *cli_complete(EditLine *el, int ch)
ast_free(matches);
}
lf->cursor[0] = savechr;
return (char *)(long)retval;
}

Loading…
Cancel
Save