From 40ea50007862ed63a9ddb4f5f21e2f8428dee01d Mon Sep 17 00:00:00 2001 From: Kinsey Moore Date: Mon, 13 Jun 2011 20:44:59 +0000 Subject: [PATCH] Config inheritance doesn't work with ConfBridge() menu definitions Current behavior in ConfBridge menu definitions is that first definition takes precedence, even in templated situations. This change allows inheritance and overriding to work as expected so that the last definition takes precedence. (closes ASTERISK-17986) Review: https://reviewboard.asterisk.org/r/1267/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@323272 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- apps/confbridge/conf_config_parser.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/apps/confbridge/conf_config_parser.c b/apps/confbridge/conf_config_parser.c index dbec32bba0..3d1f313261 100644 --- a/apps/confbridge/conf_config_parser.c +++ b/apps/confbridge/conf_config_parser.c @@ -582,7 +582,7 @@ static int add_action_to_menu_entry(struct conf_menu_entry *menu_entry, enum con static int add_menu_entry(struct conf_menu *menu, const char *dtmf, const char *action_names) { - struct conf_menu_entry *menu_entry = NULL; + struct conf_menu_entry *menu_entry = NULL, *cur = NULL; int res = 0; char *tmp_action_names = ast_strdupa(action_names); char *action = NULL; @@ -691,6 +691,16 @@ static int add_menu_entry(struct conf_menu *menu, const char *dtmf, const char * return -1; } + /* remove any list entry with an identical DTMF sequence for overrides */ + AST_LIST_TRAVERSE_SAFE_BEGIN(&menu->entries, cur, entry) { + if (!strcasecmp(cur->dtmf, menu_entry->dtmf)) { + AST_LIST_REMOVE_CURRENT(entry); + ast_free(cur); + break; + } + } + AST_LIST_TRAVERSE_SAFE_END; + AST_LIST_INSERT_TAIL(&menu->entries, menu_entry, entry); return 0;