aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2012-06-12 22:21:48 +0200
committerMax Kellermann <max@duempel.org>2012-06-12 22:21:48 +0200
commite60141b4dd726d78f3c33bb02e53d1c0f9e670a5 (patch)
tree31081beb348f8d701223158c4f5e9e37126d053a
parent5b217420954ad1962b822faa1e2881570f803992 (diff)
downloadmpd-e60141b4dd726d78f3c33bb02e53d1c0f9e670a5.tar.gz
mpd-e60141b4dd726d78f3c33bb02e53d1c0f9e670a5.tar.xz
mpd-e60141b4dd726d78f3c33bb02e53d1c0f9e670a5.zip
input_registry: add _for_each() macros
Diffstat (limited to '')
-rw-r--r--src/input_init.c7
-rw-r--r--src/input_registry.h10
-rw-r--r--src/input_stream.c6
3 files changed, 14 insertions, 9 deletions
diff --git a/src/input_init.c b/src/input_init.c
index 1438c3e52..de418845c 100644
--- a/src/input_init.c
+++ b/src/input_init.c
@@ -93,8 +93,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 e85d6be8e..c57b8296c 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 e769adb92..311d05cfc 100644
--- a/src/input_stream.c
+++ b/src/input_stream.c
@@ -39,13 +39,9 @@ input_stream_open(const char *url, GError **error_r)
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, &error);
if (is != NULL) {
assert(is->plugin != NULL);