summaryrefslogtreecommitdiff
path: root/main/features_config.c
diff options
context:
space:
mode:
authorMark Michelson <mmichelson@digium.com>2013-06-06 23:32:13 +0000
committerMark Michelson <mmichelson@digium.com>2013-06-06 23:32:13 +0000
commit738c44405bf3c803f1f1c23423cd25fab48687a5 (patch)
tree48dee2fb4ab0c20d1f9ac5ef58becc0ffc3e1d97 /main/features_config.c
parentbad8caa8c65ac1937ae1c85a0c5fb45f3e8a7fe4 (diff)
Conditionally reject duplicate entries in applicationmap containers.
When reading from a config file, it's important to reject duplicates. Otherwise, featuregroups will have ambiguity when pointing to applicationmap items. However, when constructing the channel's current applicationmap, we don't care about duplicate names since it's the DTMF that identifies a feature, not the name. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@390787 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main/features_config.c')
-rw-r--r--main/features_config.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/main/features_config.c b/main/features_config.c
index f8bdb1c3c..ab4be937a 100644
--- a/main/features_config.c
+++ b/main/features_config.c
@@ -418,10 +418,11 @@ static struct features_global_config *global_config_alloc(void)
return cfg;
}
-static struct ao2_container *applicationmap_alloc(void)
+static struct ao2_container *applicationmap_alloc(int reject_duplicates)
{
return ao2_container_alloc_list(AO2_ALLOC_OPT_LOCK_NOLOCK,
- AO2_CONTAINER_ALLOC_OPT_DUPS_REJECT, applicationmap_sort, NULL);
+ reject_duplicates ? AO2_CONTAINER_ALLOC_OPT_DUPS_REJECT : AO2_CONTAINER_ALLOC_OPT_DUPS_ALLOW,
+ applicationmap_sort, NULL);
}
/*!
@@ -457,7 +458,7 @@ static struct features_config *__features_config_alloc(int allocate_applicationm
}
if (allocate_applicationmap) {
- cfg->applicationmap = applicationmap_alloc();
+ cfg->applicationmap = applicationmap_alloc(1);
if (!cfg->applicationmap) {
return NULL;
}
@@ -999,7 +1000,7 @@ struct ao2_container *ast_get_chan_applicationmap(struct ast_channel *chan)
return NULL;
}
- applicationmap = applicationmap_alloc();
+ applicationmap = applicationmap_alloc(0);
if (!applicationmap) {
return NULL;
}