aboutsummaryrefslogtreecommitdiffstats
path: root/main
diff options
context:
space:
mode:
authoreliel <eliel@f38db490-d61c-443f-a65b-d21fe96a405b>2009-03-25 15:12:08 +0000
committereliel <eliel@f38db490-d61c-443f-a65b-d21fe96a405b>2009-03-25 15:12:08 +0000
commitb5c716c56fa29fe132e7ad72a41fb895d6323f10 (patch)
treeb375160726dd1930e784f40b86def876ba19b259 /main
parenta9e01d8f63ed999cc88f60208a8c7c3af60b1cb4 (diff)
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: http://svn.digium.com/svn/asterisk/branches/1.6.1@184223 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main')
-rw-r--r--main/asterisk.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/main/asterisk.c b/main/asterisk.c
index fe64ce8bb..e52daebc5 100644
--- a/main/asterisk.c
+++ b/main/asterisk.c
@@ -2260,11 +2260,12 @@ static char *cli_complete(EditLine *editline, 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(editline);
+ savechr = *(char *)lf->cursor;
*(char *)lf->cursor = '\0';
ptr = (char *)lf->cursor;
if (ptr) {
@@ -2290,8 +2291,10 @@ static char *cli_complete(EditLine *editline, 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;
@@ -2300,8 +2303,10 @@ static char *cli_complete(EditLine *editline, 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);
@@ -2361,6 +2366,8 @@ static char *cli_complete(EditLine *editline, int ch)
ast_free(matches);
}
+ lf->cursor[0] = savechr;
+
return (char *)(long)retval;
}