summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorJoshua Colp <jcolp@digium.com>2017-12-04 08:51:26 -0600
committerGerrit Code Review <gerrit2@gerrit.digium.api>2017-12-04 08:51:26 -0600
commitcfc121128b34300032b3bc06590f0b87fb722fad (patch)
treec5c4bcb28bdf8d5cf5d0949120fe6f187f587da7 /main
parent1d1aa3f1a1332c29b34ce48708f0341fb996034d (diff)
parentef26edd554ac2707005ddaf6f64b103f3f1eb3b4 (diff)
Merge "config: Speed up config template lookup" into 15
Diffstat (limited to 'main')
-rw-r--r--main/config.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/main/config.c b/main/config.c
index 3d8dcfb3d..a76d0870c 100644
--- a/main/config.c
+++ b/main/config.c
@@ -986,13 +986,15 @@ struct ast_category *ast_category_new_template(const char *name, const char *in_
}
static struct ast_category *category_get_sep(const struct ast_config *config,
- const char *category_name, const char *filter, char sep)
+ const char *category_name, const char *filter, char sep, char pointer_match_possible)
{
struct ast_category *cat;
- for (cat = config->root; cat; cat = cat->next) {
- if (cat->name == category_name && does_category_match(cat, category_name, filter, sep)) {
- return cat;
+ if (pointer_match_possible) {
+ for (cat = config->root; cat; cat = cat->next) {
+ if (cat->name == category_name && does_category_match(cat, category_name, filter, sep)) {
+ return cat;
+ }
}
}
@@ -1008,7 +1010,7 @@ static struct ast_category *category_get_sep(const struct ast_config *config,
struct ast_category *ast_category_get(const struct ast_config *config,
const char *category_name, const char *filter)
{
- return category_get_sep(config, category_name, filter, ',');
+ return category_get_sep(config, category_name, filter, ',', 1);
}
const char *ast_category_get_name(const struct ast_category *category)
@@ -1792,7 +1794,7 @@ static int process_text_line(struct ast_config *cfg, struct ast_category **cat,
if (cur[1] != ',') {
filter = &cur[1];
}
- *cat = category_get_sep(cfg, catname, filter, '&');
+ *cat = category_get_sep(cfg, catname, filter, '&', 0);
if (!(*cat)) {
if (newcat) {
ast_category_destroy(newcat);
@@ -1810,7 +1812,7 @@ static int process_text_line(struct ast_config *cfg, struct ast_category **cat,
} else {
struct ast_category *base;
- base = ast_category_get(cfg, cur, "TEMPLATES=include");
+ base = category_get_sep(cfg, cur, "TEMPLATES=include", ',', 0);
if (!base) {
if (newcat) {
ast_category_destroy(newcat);