diff options
Diffstat (limited to 'src/inputPlugin.c')
-rw-r--r-- | src/inputPlugin.c | 82 |
1 files changed, 13 insertions, 69 deletions
diff --git a/src/inputPlugin.c b/src/inputPlugin.c index 2afe17719..d90a0e944 100644 --- a/src/inputPlugin.c +++ b/src/inputPlugin.c @@ -7,75 +7,10 @@ static List * inputPlugin_list = NULL; -InputPlugin * newInputPlugin(char * name, InputPlugin_streamDecodeFunc - streamDecodeFunc, InputPlugin_fileDecodeFunc fileDecodeFunc, - InputPlugin_tagDupFunc tagDupFunc, unsigned char streamTypes) -{ - InputPlugin * ret = malloc(sizeof(InputPlugin)); - - memset(ret->name,0,INPUT_PLUGIN_NAME_LENGTH); - strncpy(ret->name, name, INPUT_PLUGIN_NAME_LENGTH-1); - - ret->suffixes = NULL; - ret->mimeTypes = NULL; - - ret->streamTypes = streamTypes; - - ret->streamDecodeFunc = streamDecodeFunc; - ret->fileDecodeFunc = fileDecodeFunc; - ret->tagDupFunc = tagDupFunc; - - return ret; -} - -static void freeStringArray(char ** ptr) { - if(ptr) { - char ** tmp = ptr; - - while(*tmp) { - if(*tmp) free(*tmp); - tmp++; - } - - free (ptr); - } -} - -void freeInputPlugin(InputPlugin * inPlugin) { - freeStringArray(inPlugin->suffixes); - freeStringArray(inPlugin->mimeTypes); - - free(inPlugin); -} - -static char ** AddStringToArray(char ** array, char * string) { - int arraySize = 1; - - if(array) { - char ** tmp = array; - while(*tmp) { - arraySize++; - tmp++; - } - } - - array = realloc(array, (arraySize+1)*sizeof(char *)); - - array[arraySize-1] = strdup(string); - array[arraySize] = NULL; - - return array; -} - -void addSuffixToInputPlugin(InputPlugin * inPlugin, char * suffix) { - inPlugin->suffixes = AddStringToArray(inPlugin->suffixes, suffix); -} - -void addMimeTypeToInputPlugin(InputPlugin * inPlugin, char * mimeType) { - inPlugin->mimeTypes = AddStringToArray(inPlugin->mimeTypes, mimeType); -} - void loadInputPlugin(InputPlugin * inputPlugin) { + if(!inputPlugin) return; + if(!inputPlugin->name) return; + insertInList(inputPlugin_list, inputPlugin->name, (void *)inputPlugin); } @@ -96,11 +31,14 @@ InputPlugin * getInputPluginFromSuffix(char * suffix) { ListNode * node = inputPlugin_list->firstNode; InputPlugin * plugin = NULL; + if(suffix == NULL) return NULL; + while(node != NULL) { plugin = node->data; if(stringFoundInStringArray(plugin->suffixes, suffix)) { return plugin; } + node = node->nextNode; } return NULL; @@ -115,6 +53,7 @@ InputPlugin * getInputPluginFromMimeType(char * mimeType) { if(stringFoundInStringArray(plugin->mimeTypes, mimeType)) { return plugin; } + node = node->nextNode; } return NULL; @@ -128,10 +67,15 @@ InputPlugin * getInputPluginFromName(char * name) { return (InputPlugin *)plugin; } +extern InputPlugin mp3Plugin; +extern InputPlugin oggPlugin; + void initInputPlugins() { - inputPlugin_list = makeList((ListFreeDataFunc *)freeInputPlugin); + inputPlugin_list = makeList(NULL); /* load plugins here */ + loadInputPlugin(&mp3Plugin); + loadInputPlugin(&oggPlugin); } void finishInputPlugins() { |