summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorRichard Mudgett <rmudgett@digium.com>2013-02-09 20:58:53 +0000
committerRichard Mudgett <rmudgett@digium.com>2013-02-09 20:58:53 +0000
commit0e442112ada90d53cf8991b63bd3970cfaa7cc7a (patch)
tree0fae9915fe648a9103d54f1407f8ab1bba6cfe4d /main
parent1e65035d17b9774a959219e7ba68ff608639ba99 (diff)
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
Diffstat (limited to 'main')
-rw-r--r--main/pbx.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/main/pbx.c b/main/pbx.c
index fa71488c6..1c58973c7 100644
--- a/main/pbx.c
+++ b/main/pbx.c
@@ -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;
}