diff options
Diffstat (limited to '')
-rw-r--r-- | src/input_init.c | 7 | ||||
-rw-r--r-- | src/input_registry.h | 10 | ||||
-rw-r--r-- | src/input_stream.c | 6 |
3 files changed, 14 insertions, 9 deletions
diff --git a/src/input_init.c b/src/input_init.c index cf5affb4e..e1698b64c 100644 --- a/src/input_init.c +++ b/src/input_init.c @@ -99,8 +99,7 @@ input_stream_global_init(GError **error_r) void input_stream_global_finish(void) { - for (unsigned i = 0; input_plugins[i] != NULL; ++i) - if (input_plugins_enabled[i] && - input_plugins[i]->finish != NULL) - input_plugins[i]->finish(); + input_plugins_for_each_enabled(plugin) + if (plugin->finish != NULL) + plugin->finish(); } diff --git a/src/input_registry.h b/src/input_registry.h index a1b057469..4f5fff8da 100644 --- a/src/input_registry.h +++ b/src/input_registry.h @@ -32,4 +32,14 @@ extern const struct input_plugin *const input_plugins[]; extern bool input_plugins_enabled[]; +#define input_plugins_for_each(plugin) \ + for (const struct input_plugin *plugin, \ + *const*input_plugin_iterator = &input_plugins[0]; \ + (plugin = *input_plugin_iterator) != NULL; \ + ++input_plugin_iterator) + +#define input_plugins_for_each_enabled(plugin) \ + input_plugins_for_each(plugin) \ + if (input_plugins_enabled[input_plugin_iterator - input_plugins]) + #endif diff --git a/src/input_stream.c b/src/input_stream.c index 60a1559ba..e445dca6c 100644 --- a/src/input_stream.c +++ b/src/input_stream.c @@ -42,13 +42,9 @@ input_stream_open(const char *url, assert(mutex != NULL); assert(error_r == NULL || *error_r == NULL); - for (unsigned i = 0; input_plugins[i] != NULL; ++i) { - const struct input_plugin *plugin = input_plugins[i]; + input_plugins_for_each_enabled(plugin) { struct input_stream *is; - if (!input_plugins_enabled[i]) - continue; - is = plugin->open(url, mutex, cond, &error); if (is != NULL) { assert(is->plugin != NULL); |