From bb10bc06b7a732ea9db8491467c028a3ad0e67de Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 26 Oct 2015 08:52:25 +0100 Subject: [PATCH] (string_list_special.c) Code de-duplication --- audio/audio_driver.c | 41 ++++------------------------------------- string_list_special.c | 11 +++++++++++ string_list_special.h | 3 ++- 3 files changed, 17 insertions(+), 38 deletions(-) diff --git a/audio/audio_driver.c b/audio/audio_driver.c index 55bf0e7bb5..8c75b25d9c 100644 --- a/audio/audio_driver.c +++ b/audio/audio_driver.c @@ -16,13 +16,13 @@ #include -#include - #include "audio_monitor.h" #include "audio_driver.h" #include "audio_utils.h" #include "audio_thread_wrapper.h" + #include "../general.h" +#include "../string_list_special.h" #ifndef AUDIO_BUFFER_FREE_SAMPLES_COUNT #define AUDIO_BUFFER_FREE_SAMPLES_COUNT (8 * 1024) @@ -223,42 +223,9 @@ const char *audio_driver_find_ident(int idx) * * Returns: string listing of all audio driver names, separated by '|'. **/ -const char* config_get_audio_driver_options(void) +const char *config_get_audio_driver_options(void) { - union string_list_elem_attr attr; - unsigned i; - char *options = NULL; - int options_len = 0; - struct string_list *options_l = string_list_new(); - - attr.i = 0; - - if (!options_l) - return NULL; - - for (i = 0; audio_driver_find_handle(i); i++) - { - const char *opt = audio_driver_find_ident(i); - - options_len += strlen(opt) + 1; - string_list_append(options_l, opt, attr); - } - - options = (char*)calloc(options_len, sizeof(char)); - - if (!options) - { - options = NULL; - goto end; - } - - string_list_join_concat(options, options_len, options_l, "|"); - -end: - string_list_free(options_l); - options_l = NULL; - - return options; + return string_list_special_new(STRING_LIST_AUDIO_DRIVERS); } void find_audio_driver(void) diff --git a/string_list_special.c b/string_list_special.c index f24ee44a15..c544e19911 100644 --- a/string_list_special.c +++ b/string_list_special.c @@ -26,6 +26,8 @@ #include "camera/camera_driver.h" #endif +#include "audio/audio_driver.h" + const char *string_list_special_new(enum string_list_type type) { union string_list_elem_attr attr; @@ -63,6 +65,15 @@ const char *string_list_special_new(enum string_list_type type) } break; #endif + case STRING_LIST_AUDIO_DRIVERS: + for (i = 0; audio_driver_find_handle(i); i++) + { + const char *opt = audio_driver_find_ident(i); + len += strlen(opt) + 1; + + string_list_append(s, opt, attr); + } + break; case STRING_LIST_NONE: default: goto end; diff --git a/string_list_special.h b/string_list_special.h index 75d43fdf2c..8b9b2f3eb7 100644 --- a/string_list_special.h +++ b/string_list_special.h @@ -20,7 +20,8 @@ enum string_list_type { STRING_LIST_NONE = 0, STRING_LIST_MENU_DRIVERS, - STRING_LIST_CAMERA_DRIVERS + STRING_LIST_CAMERA_DRIVERS, + STRING_LIST_AUDIO_DRIVERS }; const char *string_list_special_new(enum string_list_type type);