2004-05-30 22:25:08 +02:00
|
|
|
#include "inputPlugin.h"
|
|
|
|
|
|
|
|
#include "list.h"
|
2004-05-30 21:13:57 +02:00
|
|
|
|
|
|
|
#include <stdlib.h>
|
2004-05-30 22:25:08 +02:00
|
|
|
#include <string.h>
|
|
|
|
|
|
|
|
static List * inputPlugin_list = NULL;
|
2004-05-30 21:13:57 +02:00
|
|
|
|
2004-05-30 22:25:08 +02:00
|
|
|
InputPlugin * newInputPlugin(char * name, InputPlugin_streamDecodeFunc
|
|
|
|
streamDecodeFunc, InputPlugin_fileDecodeFunc fileDecodeFunc,
|
|
|
|
InputPlugin_tagDupFunc tagDupFunc, unsigned char streamTypes)
|
|
|
|
{
|
2004-05-30 21:13:57 +02:00
|
|
|
InputPlugin * ret = malloc(sizeof(InputPlugin));
|
|
|
|
|
|
|
|
memset(ret->name,0,INPUT_PLUGIN_NAME_LENGTH);
|
2004-05-30 22:25:08 +02:00
|
|
|
strncpy(ret->name, name, INPUT_PLUGIN_NAME_LENGTH-1);
|
2004-05-30 21:13:57 +02:00
|
|
|
|
|
|
|
ret->suffixes = NULL;
|
|
|
|
ret->mimeTypes = NULL;
|
|
|
|
|
2004-05-30 22:25:08 +02:00
|
|
|
ret->streamTypes = streamTypes;
|
|
|
|
|
|
|
|
ret->streamDecodeFunc = streamDecodeFunc;
|
|
|
|
ret->fileDecodeFunc = fileDecodeFunc;
|
|
|
|
ret->tagDupFunc = tagDupFunc;
|
2004-05-30 21:13:57 +02:00
|
|
|
|
|
|
|
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;
|
2004-05-30 22:25:08 +02:00
|
|
|
while(*tmp) {
|
2004-05-30 21:13:57 +02:00
|
|
|
arraySize++;
|
2004-05-30 22:25:08 +02:00
|
|
|
tmp++;
|
2004-05-30 21:13:57 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2004-05-30 22:25:08 +02:00
|
|
|
array = realloc(array, (arraySize+1)*sizeof(char *));
|
2004-05-30 21:13:57 +02:00
|
|
|
|
|
|
|
array[arraySize-1] = strdup(string);
|
2004-05-30 22:25:08 +02:00
|
|
|
array[arraySize] = NULL;
|
2004-05-30 21:13:57 +02:00
|
|
|
|
|
|
|
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);
|
|
|
|
}
|
2004-05-30 22:25:08 +02:00
|
|
|
|
|
|
|
void loadInputPlugin(InputPlugin * inputPlugin) {
|
|
|
|
insertInList(inputPlugin_list, inputPlugin->name, (void *)inputPlugin);
|
|
|
|
}
|
|
|
|
|
|
|
|
void unloadInputPlugin(InputPlugin * inputPlugin) {
|
|
|
|
deleteFromList(inputPlugin_list, inputPlugin->name);
|
|
|
|
}
|
|
|
|
|
|
|
|
static int stringFoundInStringArray(char ** array, char * suffix) {
|
|
|
|
while(array && *array) {
|
|
|
|
if(strcmp(*array, suffix) == 0) return 1;
|
|
|
|
array++;
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
InputPlugin * getInputPluginFromSuffix(char * suffix) {
|
|
|
|
ListNode * node = inputPlugin_list->firstNode;
|
|
|
|
InputPlugin * plugin = NULL;
|
|
|
|
|
|
|
|
while(node != NULL) {
|
|
|
|
plugin = node->data;
|
|
|
|
if(stringFoundInStringArray(plugin->suffixes, suffix)) {
|
|
|
|
return plugin;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
InputPlugin * getInputPluginFromMimeType(char * mimeType) {
|
|
|
|
ListNode * node = inputPlugin_list->firstNode;
|
|
|
|
InputPlugin * plugin = NULL;
|
|
|
|
|
|
|
|
while(node != NULL) {
|
|
|
|
plugin = node->data;
|
|
|
|
if(stringFoundInStringArray(plugin->mimeTypes, mimeType)) {
|
|
|
|
return plugin;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
InputPlugin * getInputPluginFromName(char * name) {
|
|
|
|
void * plugin = NULL;
|
|
|
|
|
|
|
|
findInList(inputPlugin_list, name, &plugin);
|
|
|
|
|
|
|
|
return (InputPlugin *)plugin;
|
|
|
|
}
|
|
|
|
|
|
|
|
void initInputPlugins() {
|
|
|
|
inputPlugin_list = makeList((ListFreeDataFunc *)freeInputPlugin);
|
|
|
|
|
|
|
|
/* load plugins here */
|
|
|
|
}
|
|
|
|
|
|
|
|
void finishInputPlugins() {
|
|
|
|
freeList(inputPlugin_list);
|
|
|
|
}
|