diff options
author | Max Kellermann <max@duempel.org> | 2012-06-12 22:21:48 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2012-06-12 22:21:48 +0200 |
commit | e60141b4dd726d78f3c33bb02e53d1c0f9e670a5 (patch) | |
tree | 31081beb348f8d701223158c4f5e9e37126d053a | |
parent | 5b217420954ad1962b822faa1e2881570f803992 (diff) | |
download | mpd-e60141b4dd726d78f3c33bb02e53d1c0f9e670a5.tar.gz mpd-e60141b4dd726d78f3c33bb02e53d1c0f9e670a5.tar.xz mpd-e60141b4dd726d78f3c33bb02e53d1c0f9e670a5.zip |
input_registry: add _for_each() macros
-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 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); |