From b3b6b5e9f77852066a7c902acd77a586214e0773 Mon Sep 17 00:00:00 2001 From: lvl Date: Mon, 28 Sep 2020 14:42:47 +0200 Subject: [PATCH] res_musiconhold: Load all realtime entries, not just the first ASTERISK-29099 Change-Id: I45636679c0fb5a5f59114c8741626631a604e8a6 --- res/res_musiconhold.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/res/res_musiconhold.c b/res/res_musiconhold.c index 8d1ab2aaf5..db7dde71ad 100644 --- a/res/res_musiconhold.c +++ b/res/res_musiconhold.c @@ -1609,19 +1609,22 @@ static struct ast_variable *load_realtime_musiconhold(const char *name) if (var) { const char *mode = ast_variable_find_in_list(var, "mode"); if (ast_strings_equal(mode, "playlist")) { - struct ast_variable *entries = ast_load_realtime("musiconhold_entry", "name", name, SENTINEL); - struct ast_variable *cur = entries; + struct ast_config *entries = ast_load_realtime_multientry("musiconhold_entry", "position >=", "0", "name", name, SENTINEL); + char *category = NULL; size_t entry_count = 0; - for (; cur; cur = cur->next) { - if (!strcmp(cur->name, "entry")) { - struct ast_variable *dup = ast_variable_new(cur->name, cur->value, ""); + + while ((category = ast_category_browse(entries, category))) { + const char *entry = ast_variable_retrieve(entries, category, "entry"); + + if (entry) { + struct ast_variable *dup = ast_variable_new("entry", entry, ""); if (dup) { entry_count++; ast_variable_list_append(&var, dup); } } } - ast_variables_destroy(entries); + ast_config_destroy(entries); if (entry_count == 0) { /* Behave as though this class doesn't exist */ -- 2.47.2