Commit 9a350acf authored by Max Kellermann's avatar Max Kellermann

input_plugin: added methods init(), finish()

Instead of hard-coding the plugin global initialization in input_stream_global_init(), make it walk the plugin list and initialize all plugins.
parent 36d24fb7
...@@ -91,17 +91,23 @@ struct input_curl { ...@@ -91,17 +91,23 @@ struct input_curl {
/** libcurl should accept "ICY 200 OK" */ /** libcurl should accept "ICY 200 OK" */
static struct curl_slist *http_200_aliases; static struct curl_slist *http_200_aliases;
void input_curl_global_init(void) static bool
input_curl_init(void)
{ {
CURLcode code = curl_global_init(CURL_GLOBAL_ALL); CURLcode code = curl_global_init(CURL_GLOBAL_ALL);
if (code != CURLE_OK) if (code != CURLE_OK) {
g_warning("curl_global_init() failed: %s\n", g_warning("curl_global_init() failed: %s\n",
curl_easy_strerror(code)); curl_easy_strerror(code));
return false;
}
http_200_aliases = curl_slist_append(http_200_aliases, "ICY 200 OK"); http_200_aliases = curl_slist_append(http_200_aliases, "ICY 200 OK");
return true;
} }
void input_curl_global_finish(void) static void
input_curl_finish(void)
{ {
curl_slist_free_all(http_200_aliases); curl_slist_free_all(http_200_aliases);
...@@ -948,6 +954,9 @@ input_curl_open(struct input_stream *is, const char *url) ...@@ -948,6 +954,9 @@ input_curl_open(struct input_stream *is, const char *url)
} }
const struct input_plugin input_plugin_curl = { const struct input_plugin input_plugin_curl = {
.init = input_curl_init,
.finish = input_curl_finish,
.open = input_curl_open, .open = input_curl_open,
.close = input_curl_close, .close = input_curl_close,
.tag = input_curl_tag, .tag = input_curl_tag,
......
...@@ -21,8 +21,4 @@ ...@@ -21,8 +21,4 @@
extern const struct input_plugin input_plugin_curl; extern const struct input_plugin input_plugin_curl;
void input_curl_global_init(void);
void input_curl_global_finish(void);
#endif #endif
...@@ -28,6 +28,20 @@ ...@@ -28,6 +28,20 @@
struct input_stream; struct input_stream;
struct input_plugin { struct input_plugin {
/**
* Global initialization. This method is called when MPD starts.
*
* @return true on success, false if the plugin should be
* disabled
*/
bool (*init)(void);
/**
* Global deinitialization. Called once before MPD shuts
* down (only if init() has returned true).
*/
void (*finish)(void);
bool (*open)(struct input_stream *is, const char *url); bool (*open)(struct input_stream *is, const char *url);
void (*close)(struct input_stream *is); void (*close)(struct input_stream *is);
......
...@@ -49,21 +49,24 @@ static const struct input_plugin *const input_plugins[] = { ...@@ -49,21 +49,24 @@ static const struct input_plugin *const input_plugins[] = {
#endif #endif
}; };
static bool input_plugins_enabled[G_N_ELEMENTS(input_plugins)];
static const unsigned num_input_plugins = static const unsigned num_input_plugins =
sizeof(input_plugins) / sizeof(input_plugins[0]); sizeof(input_plugins) / sizeof(input_plugins[0]);
void input_stream_global_init(void) void input_stream_global_init(void)
{ {
#ifdef HAVE_CURL for (unsigned i = 0; i < num_input_plugins; ++i)
input_curl_global_init(); if (input_plugins[i]->init == NULL || input_plugins[i]->init())
#endif input_plugins_enabled[i] = true;
} }
void input_stream_global_finish(void) void input_stream_global_finish(void)
{ {
#ifdef HAVE_CURL for (unsigned i = 0; i < num_input_plugins; ++i)
input_curl_global_finish(); if (input_plugins_enabled[i] &&
#endif input_plugins[i]->finish != NULL)
input_plugins[i]->finish();
} }
bool bool
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment