pbx: Fix regression caused by taking advantage of the function name sort.

Taking advantage of the sorted order of the registered functions container
requires that they are actually inserted in the expected sort order.

* Insert the registered functions into the container in case sensitive
position.  As a result, only the complete_functions() routine needs to
search the entire container because it does a case insensitive search for
convenience.

Caught by the unit tests.


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@381118 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Richard Mudgett 2013-02-09 20:58:53 +00:00
parent 1e65035d17
commit 0e442112ad
1 changed files with 8 additions and 7 deletions

View File

@ -3814,11 +3814,14 @@ static char *complete_functions(const char *word, int pos, int state)
wordlen = strlen(word);
AST_RWLIST_RDLOCK(&acf_root);
AST_RWLIST_TRAVERSE(&acf_root, cur, acflist) {
/* case-insensitive for convenience in this 'complete' function */
/*
* Do a case-insensitive search for convenience in this
* 'complete' function.
*
* We must search the entire container because the functions are
* sorted and normally found case sensitively.
*/
cmp = strncasecmp(word, cur->name, wordlen);
if (cmp > 0) {
continue;
}
if (!cmp) {
/* Found match. */
if (++which <= state) {
@ -3828,8 +3831,6 @@ static char *complete_functions(const char *word, int pos, int state)
ret = ast_strdup(cur->name);
break;
}
/* Not in container. */
break;
}
AST_RWLIST_UNLOCK(&acf_root);
@ -4066,7 +4067,7 @@ int __ast_custom_function_register(struct ast_custom_function *acf, struct ast_m
/* Store in alphabetical order */
AST_RWLIST_TRAVERSE_SAFE_BEGIN(&acf_root, cur, acflist) {
if (strcasecmp(acf->name, cur->name) < 0) {
if (strcmp(acf->name, cur->name) < 0) {
AST_RWLIST_INSERT_BEFORE_CURRENT(acf, acflist);
break;
}