diff --git a/asterisk.c b/asterisk.c index 8b4ae4504c..b0635c7f2f 100755 --- a/asterisk.c +++ b/asterisk.c @@ -686,14 +686,14 @@ static int ast_el_read_char(EditLine *el, char *cp) static char *cli_prompt(EditLine *el) { - char prompt[80]; + static char prompt[80]; if (remotehostname) snprintf(prompt, sizeof(prompt), ASTERISK_PROMPT2, remotehostname); else snprintf(prompt, sizeof(prompt), ASTERISK_PROMPT); - return strdup(prompt); + return(prompt); } static char **ast_el_strtoarr(char *buf) @@ -839,7 +839,7 @@ static char *cli_complete(EditLine *el, int ch) if (nummatches == 1) { /* Found an exact match */ - el_insertstr(el, strdup(" ")); + el_insertstr(el, " "); retval = CC_REFRESH; } else { /* Must be more than one match */ @@ -854,11 +854,11 @@ static char *cli_complete(EditLine *el, int ch) ast_cli_display_match_list(matches, nummatches, maxlen); retval = CC_REDISPLAY; } else { - el_insertstr(el,strdup(" ")); + el_insertstr(el," "); retval = CC_REFRESH; } } - + free(matches); } return (char *)retval; diff --git a/cli.c b/cli.c index b9cb021d12..340e8c1d7f 100755 --- a/cli.c +++ b/cli.c @@ -278,7 +278,10 @@ static int handle_commandmatchesarray(int fd, int argc, char *argv[]) printf("command matchesarray for '%s' %s got '%s'\n", argv[2], argv[3], matches[x]); #endif len += sprintf( buf + len, "%s ", matches[x]); + free(matches[x]); + matches[x] = NULL; } + free(matches); } #if 0 printf("array for '%s' %s got '%s'\n", argv[2], argv[3], buf); @@ -765,12 +768,16 @@ normal: int ast_cli_generatornummatches(char *text, char *word) { int matches = 0, i = 0; - char *buf, *oldbuf; + char *buf, *oldbuf = NULL; while ( (buf = ast_cli_generator(text, word, i)) ) { - if (++i > 1 && strcmp(buf,oldbuf) == 0) + if (++i > 1 && strcmp(buf,oldbuf) == 0) { + free(buf); continue; + } + if (oldbuf) + free(oldbuf); oldbuf = buf; matches++; } @@ -866,6 +873,7 @@ static char *__ast_cli_generator(char *text, char *word, int state, int lock) if (res) { if (lock) ast_pthread_mutex_unlock(&clilock); + free(dup); return res ? strdup(res) : NULL; } }