Index: res/res_musiconhold.c =================================================================== --- res/res_musiconhold.c (revision 84149) +++ res/res_musiconhold.c (working copy) @@ -125,6 +125,7 @@ #define MOH_SINGLE (1 << 1) #define MOH_CUSTOM (1 << 2) #define MOH_RANDOMIZE (1 << 3) +#define MOH_SORTALPHA (1 << 4) struct mohclass { char name[MAX_MUSICCLASS]; @@ -809,6 +810,16 @@ return 0; } +static int moh_sort_compare(const void *i1, const void *i2) +{ + char *s1, *s2; + + s1 = ((char **)i1)[0]; + s2 = ((char **)i2)[0]; + + return strcasecmp(s1, s2); +} + static int moh_scan_files(struct mohclass *class) { DIR *files_DIR; @@ -870,6 +881,8 @@ closedir(files_DIR); chdir(path); + if (ast_test_flag(class, MOH_SORTALPHA)) + qsort(&class->filearray[0], class->total_files, sizeof(char *), moh_sort_compare); return class->total_files; } @@ -1060,6 +1073,10 @@ class->digit = *var->value; else if (!strcasecmp(var->name, "random")) ast_set2_flag(class, ast_true(var->value), MOH_RANDOMIZE); + else if (!strcasecmp(var->name, "sort") && !strcasecmp(var->value, "random")) + ast_set_flag(class, MOH_RANDOMIZE); + else if (!strcasecmp(var->name, "sort") && !strcasecmp(var->value, "alpha")) + ast_set_flag(class, MOH_SORTALPHA); else if (!strcasecmp(var->name, "format")) { class->format = ast_getformatbyname(var->value); if (!class->format) {