sounds: Sort 'core show sounds' output
authorSean Bright <sean.bright@gmail.com>
Mon, 4 Feb 2019 19:55:01 +0000 (14:55 -0500)
committerSean Bright <sean.bright@gmail.com>
Mon, 4 Feb 2019 20:40:35 +0000 (14:40 -0600)
Change-Id: Ib39052a745040f75eb635f15a042da15b20e22ab

main/sounds.c

index 091a396..c3323da 100644 (file)
@@ -135,6 +135,11 @@ static int show_sound_info_cb(void *obj, void *arg, void *data, int flags)
        return 0;
 }
 
+static int sound_sorter(const void *obj_left, const void *obj_right, int flags)
+{
+       return strcmp(obj_left, obj_right);
+}
+
 /*! \brief Show a list of sounds available on the system */
 static char *handle_cli_sounds_show(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
 {
@@ -152,6 +157,7 @@ static char *handle_cli_sounds_show(struct ast_cli_entry *e, int cmd, struct ast
        if (a->argc == 3) {
                struct ast_media_index *sounds_index = ast_sounds_get_index();
                struct ao2_container *sound_files;
+               struct ao2_container *sorted;
 
                if (!sounds_index) {
                        return CLI_FAILURE;
@@ -163,8 +169,18 @@ static char *handle_cli_sounds_show(struct ast_cli_entry *e, int cmd, struct ast
                        return CLI_FAILURE;
                }
 
+               sorted = ao2_container_alloc_rbtree(AO2_ALLOC_OPT_LOCK_NOLOCK, 0,
+                       sound_sorter, NULL);
+               if (!sorted
+                  || ao2_container_dup(sorted, sound_files, 0)) {
+                       ao2_cleanup(sorted);
+                       ao2_cleanup(sound_files);
+                       return CLI_FAILURE;
+               }
+
                ast_cli(a->fd, "Available audio files:\n");
-               ao2_callback(sound_files, OBJ_MULTIPLE | OBJ_NODATA, show_sounds_cb, a);
+               ao2_callback(sorted, OBJ_MULTIPLE | OBJ_NODATA, show_sounds_cb, a);
+               ao2_ref(sorted, -1);
                ao2_ref(sound_files, -1);
 
                return CLI_SUCCESS;