diff options
author | Corey Farrell <git@cfware.com> | 2016-07-14 14:51:42 -0400 |
---|---|---|
committer | Corey Farrell <git@cfware.com> | 2016-07-15 05:34:29 -0400 |
commit | be36bd7ca565531c09ca444e59b6d057131a9ab0 (patch) | |
tree | 85595a26df4bbfcfc39a78c5c2474984c8c894ce /apps/app_macro.c | |
parent | 273052f40498378d3f2d3548347a243df68ee9a4 (diff) |
pbx: Create pbx_include.c for management of 'struct ast_include'.
This changes context includes from a linked list to a vector, makes
'struct ast_include' opaque to pbx.c.
Although ast_walk_context_includes is maintained the procedure is no
longer efficient except for the first call (inc==NULL). This
functionality is replaced by two new functions implemented by vector
macros.
* ast_context_includes_count (AST_VECTOR_SIZE)
* ast_context_includes_get (AST_VECTOR_GET)
As with ast_walk_context_includes callers of these functions are
expected to have locked contexts. Only a few places in Asterisk walked
the includes, they have been converted to use the new functions.
const have been applied where possible to parameters for ast_include
functions.
Change-Id: Ib5c882e27cf96fb2aec67a39c18b4c71c9c83b60
Diffstat (limited to 'apps/app_macro.c')
-rw-r--r-- | apps/app_macro.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/apps/app_macro.c b/apps/app_macro.c index d2da16523..26e4262b1 100644 --- a/apps/app_macro.c +++ b/apps/app_macro.c @@ -190,8 +190,8 @@ static void macro_fixup(void *data, struct ast_channel *old_chan, struct ast_cha static struct ast_exten *find_matching_priority(struct ast_context *c, const char *exten, int priority, const char *callerid) { struct ast_exten *e; - struct ast_include *i; struct ast_context *c2; + int idx; for (e=ast_walk_context_extensions(c, NULL); e; e=ast_walk_context_extensions(c, e)) { if (ast_extension_match(ast_get_extension_name(e), exten)) { @@ -210,7 +210,9 @@ static struct ast_exten *find_matching_priority(struct ast_context *c, const cha } /* No match; run through includes */ - for (i=ast_walk_context_includes(c, NULL); i; i=ast_walk_context_includes(c, i)) { + for (idx = 0; idx < ast_context_includes_count(c); idx++) { + const struct ast_include *i = ast_context_includes_get(c, idx); + for (c2=ast_walk_contexts(NULL); c2; c2=ast_walk_contexts(c2)) { if (!strcmp(ast_get_context_name(c2), ast_get_include_name(i))) { e = find_matching_priority(c2, exten, priority, callerid); |