diff options
-rw-r--r-- | src/playlist_list.c | 31 | ||||
-rw-r--r-- | src/playlist_list.h | 8 |
2 files changed, 21 insertions, 18 deletions
diff --git a/src/playlist_list.c b/src/playlist_list.c index 019654bfc..8dfd2823d 100644 --- a/src/playlist_list.c +++ b/src/playlist_list.c @@ -40,7 +40,7 @@ #include <string.h> #include <stdio.h> -static const struct playlist_plugin *const playlist_plugins[] = { +const struct playlist_plugin *const playlist_plugins[] = { &extm3u_playlist_plugin, &m3u_playlist_plugin, &xspf_playlist_plugin, @@ -62,6 +62,10 @@ static const struct playlist_plugin *const playlist_plugins[] = { /** which plugins have been initialized successfully? */ static bool playlist_plugins_enabled[G_N_ELEMENTS(playlist_plugins)]; +#define playlist_plugins_for_each_enabled(plugin) \ + playlist_plugins_for_each(plugin) \ + if (playlist_plugins_enabled[playlist_plugin_iterator - playlist_plugins]) + /** * Find the "playlist" configuration block for the specified plugin. * @@ -109,9 +113,8 @@ playlist_list_global_init(void) void playlist_list_global_finish(void) { - for (unsigned i = 0; playlist_plugins[i] != NULL; ++i) - if (playlist_plugins_enabled[i]) - playlist_plugin_finish(playlist_plugins[i]); + playlist_plugins_for_each_enabled(plugin) + playlist_plugin_finish(plugin); } static struct playlist_provider * @@ -200,11 +203,8 @@ playlist_list_open_stream_mime2(struct input_stream *is, const char *mime) assert(is != NULL); assert(mime != NULL); - for (unsigned i = 0; playlist_plugins[i] != NULL; ++i) { - const struct playlist_plugin *plugin = playlist_plugins[i]; - - if (playlist_plugins_enabled[i] && - plugin->open_stream != NULL && + playlist_plugins_for_each_enabled(plugin) { + if (plugin->open_stream != NULL && plugin->mime_types != NULL && string_array_contains(plugin->mime_types, mime)) { /* rewind the stream, so each plugin gets a @@ -248,11 +248,8 @@ playlist_list_open_stream_suffix(struct input_stream *is, const char *suffix) assert(is != NULL); assert(suffix != NULL); - for (unsigned i = 0; playlist_plugins[i] != NULL; ++i) { - const struct playlist_plugin *plugin = playlist_plugins[i]; - - if (playlist_plugins_enabled[i] && - plugin->open_stream != NULL && + playlist_plugins_for_each_enabled(plugin) { + if (plugin->open_stream != NULL && plugin->suffixes != NULL && string_array_contains(plugin->suffixes, suffix)) { /* rewind the stream, so each plugin gets a @@ -306,10 +303,8 @@ playlist_suffix_supported(const char *suffix) { assert(suffix != NULL); - for (unsigned i = 0; playlist_plugins[i] != NULL; ++i) { - const struct playlist_plugin *plugin = playlist_plugins[i]; - - if (playlist_plugins_enabled[i] && plugin->suffixes != NULL && + playlist_plugins_for_each_enabled(plugin) { + if (plugin->suffixes != NULL && string_array_contains(plugin->suffixes, suffix)) return true; } diff --git a/src/playlist_list.h b/src/playlist_list.h index 3710589a2..08e8cbd76 100644 --- a/src/playlist_list.h +++ b/src/playlist_list.h @@ -25,6 +25,14 @@ struct playlist_provider; struct input_stream; +extern const struct playlist_plugin *const playlist_plugins[]; + +#define playlist_plugins_for_each(plugin) \ + for (const struct playlist_plugin *plugin, \ + *const*playlist_plugin_iterator = &playlist_plugins[0]; \ + (plugin = *playlist_plugin_iterator) != NULL; \ + ++playlist_plugin_iterator) + /** * Initializes all playlist plugins. */ |