[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 1/2] clean up and optimize get_output_module
From: |
Trevor Saunders |
Subject: |
[PATCH 1/2] clean up and optimize get_output_module |
Date: |
Mon, 23 Aug 2010 07:53:47 -0400 |
- reorganize the function to return if we have a module, to remove
nesting.
- walk the linked list of output modules with next pointers instead of
indexing into the list.
---
src/server/output.c | 77 ++++++++++++++++++++++++++------------------------
1 files changed, 40 insertions(+), 37 deletions(-)
diff --git a/src/server/output.c b/src/server/output.c
index fa5ba94..0f15e87 100644
--- a/src/server/output.c
+++ b/src/server/output.c
@@ -144,53 +144,56 @@ OutputModule*
get_output_module(const TSpeechDMessage *message)
{
OutputModule *output = NULL;
- GList *gl;
- int i;
+ GList *cur_ptr = output_modules_list;
if (message->settings.output_module != NULL){
MSG(5, "Desired output module is %s", message->settings.output_module);
output = get_output_module_by_name(message->settings.output_module);
- if((output == NULL) || !output->working){
- // If the requested module was not found or is not working,
- // first try to use the default output module
- if (GlobalFDSet.output_module != NULL){
- MSG(3,"Warning: Didn't find prefered output module, using default");
- output = get_output_module_by_name(GlobalFDSet.output_module);
- }
- if (output == NULL || !output->working){
- MSG(3, "Couldn't load default output module, trying other modules");
- }
+ if((output != NULL) && output->working) return output;
+ }
- // Try all other output modules now to see if some of them
- // is working
- MSG(3, "Trying other output modules");
- for (i=0; i<=g_list_length(output_modules_list)-1; i++){
- gl = g_list_nth(output_modules_list, i);
- if (!gl || !gl->data) break;
- if (strcmp(gl->data, "dummy"))
- output = get_output_module_by_name(gl->data);
- if ((output != NULL) && (output->working)){
- MSG(3, "Output module %s seems to be working, using it", gl->data);
- break;
- }
- }
+ MSG(3,"Warning: Didn't find prefered output module, using default");
+ // If the requested module was not found or is not working,
+ // first try to use the default output module
+ if (GlobalFDSet.output_module != NULL)
+ output = get_output_module_by_name(GlobalFDSet.output_module);
- // Did we get something working? If not, use dummy (it will just play
- // a pre-synthesized error message with some hints over and over).
- if (output == NULL || !output->working){
- MSG(1, "Error: No output module seems to be working, using the dummy
output module");
- output = get_output_module_by_name("dummy");
- }
+ if (output != NULL && output->working) return output;
- // Give up....
- if (output == NULL){
- MSG(1, "Error: No output module working, not even dummy, no sound
produced!\n");
- return NULL;
- }
+ MSG(3, "Couldn't load default output module, trying other modules");
+
+ // Try all other output modules now to see if some of them
+ // is working
+ while(cur_ptr){
+ if (!cur_ptr->data){
+ MSG(2, "bad (NULL) module in output module list");
+ cur_ptr = cur_ptr->next;
+ continue;
}
+
+ if (strcmp(cur_ptr->data, "dummy") != 0)
+ output = get_output_module_by_name(cur_ptr->data);
+
+ if ((output != NULL) && (output->working)){
+ MSG(3, "Output module %s seems to be working, using it", cur_ptr->data);
+ return output;
+ }
+
+ cur_ptr = cur_ptr->next;
}
+
+ // if we get here there are no good modules use the dummy
+ // a pre-synthesized error message with some hints over and over).
+ if (output == NULL || !output->working)
+ output = get_output_module_by_name("dummy");
+
+ // Give up....
+ if (output == NULL)
+ MSG(1, "Error: No output module working, not even dummy, no sound
produced!\n");
+
return output;
}
+
void
static output_lock(void)
{
--
1.7.1