input_registry: add _for_each() macros
This commit is contained in:
		| @@ -93,8 +93,7 @@ input_stream_global_init(GError **error_r) | |||||||
|  |  | ||||||
| void input_stream_global_finish(void) | void input_stream_global_finish(void) | ||||||
| { | { | ||||||
| 	for (unsigned i = 0; input_plugins[i] != NULL; ++i) | 	input_plugins_for_each_enabled(plugin) | ||||||
| 		if (input_plugins_enabled[i] && | 		if (plugin->finish != NULL) | ||||||
| 		    input_plugins[i]->finish != NULL) | 			plugin->finish(); | ||||||
| 			input_plugins[i]->finish(); |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -32,4 +32,14 @@ extern const struct input_plugin *const input_plugins[]; | |||||||
|  |  | ||||||
| extern bool input_plugins_enabled[]; | 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 | #endif | ||||||
|   | |||||||
| @@ -39,13 +39,9 @@ input_stream_open(const char *url, GError **error_r) | |||||||
|  |  | ||||||
| 	assert(error_r == NULL || *error_r == NULL); | 	assert(error_r == NULL || *error_r == NULL); | ||||||
|  |  | ||||||
| 	for (unsigned i = 0; input_plugins[i] != NULL; ++i) { | 	input_plugins_for_each_enabled(plugin) { | ||||||
| 		const struct input_plugin *plugin = input_plugins[i]; |  | ||||||
| 		struct input_stream *is; | 		struct input_stream *is; | ||||||
|  |  | ||||||
| 		if (!input_plugins_enabled[i]) |  | ||||||
| 			continue; |  | ||||||
|  |  | ||||||
| 		is = plugin->open(url, &error); | 		is = plugin->open(url, &error); | ||||||
| 		if (is != NULL) { | 		if (is != NULL) { | ||||||
| 			assert(is->plugin != NULL); | 			assert(is->plugin != NULL); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Max Kellermann
					Max Kellermann