diff --git a/src/archive_list.c b/src/archive_list.c index 8228fc961..e71b3036a 100644 --- a/src/archive_list.c +++ b/src/archive_list.c @@ -60,7 +60,8 @@ archive_plugin_from_suffix(const char *suffix) for (i=0; i < num_archive_plugins; ++i) { const struct archive_plugin *plugin = archive_plugins[i]; if (archive_plugins_enabled[i] && - stringFoundInStringArray(plugin->suffixes, suffix)) { + plugin->suffixes != NULL && + string_array_contains(plugin->suffixes, suffix)) { ++i; return plugin; } diff --git a/src/conf.c b/src/conf.c index 803ad8503..4da44c775 100644 --- a/src/conf.c +++ b/src/conf.c @@ -95,16 +95,6 @@ static struct config_entry config_entries[] = { { .name = "filter", true, true }, }; -static bool -string_array_contains(const char *const* array, const char *value) -{ - for (const char *const* x = array; *x; x++) - if (g_ascii_strcasecmp(*x, value) == 0) - return true; - - return false; -} - static bool get_bool(const char *value, bool *value_r) { diff --git a/src/decoder_list.c b/src/decoder_list.c index d30611e1b..ba8e34a8c 100644 --- a/src/decoder_list.c +++ b/src/decoder_list.c @@ -118,8 +118,8 @@ decoder_plugin_from_suffix(const char *suffix, unsigned int next) i = 0; for (; i < num_decoder_plugins; ++i) { const struct decoder_plugin *plugin = decoder_plugins[i]; - if (decoder_plugins_enabled[i] && - stringFoundInStringArray(plugin->suffixes, suffix)) { + if (decoder_plugins_enabled[i] && plugin->suffixes != NULL && + string_array_contains(plugin->suffixes, suffix)) { ++i; return plugin; } @@ -140,8 +140,8 @@ decoder_plugin_from_mime_type(const char *mimeType, unsigned int next) i = 0; for (; i < num_decoder_plugins; ++i) { const struct decoder_plugin *plugin = decoder_plugins[i]; - if (decoder_plugins_enabled[i] && - stringFoundInStringArray(plugin->mime_types, mimeType)) { + if (decoder_plugins_enabled[i] && plugin->mime_types != NULL && + string_array_contains(plugin->mime_types, mimeType)) { ++i; return plugin; } diff --git a/src/playlist_list.c b/src/playlist_list.c index b5df72ed8..2c6237ed4 100644 --- a/src/playlist_list.c +++ b/src/playlist_list.c @@ -119,8 +119,8 @@ playlist_list_open_uri(const char *uri) for (unsigned i = 0; playlist_plugins[i] != NULL; ++i) { const struct playlist_plugin *plugin = playlist_plugins[i]; - if (playlist_plugins_enabled[i] && - stringFoundInStringArray(plugin->schemes, scheme)) { + if (playlist_plugins_enabled[i] && plugin->schemes != NULL && + string_array_contains(plugin->schemes, scheme)) { playlist = playlist_plugin_open_uri(plugin, uri); if (playlist != NULL) break; @@ -143,7 +143,8 @@ playlist_list_open_stream_mime(struct input_stream *is) const struct playlist_plugin *plugin = playlist_plugins[i]; if (playlist_plugins_enabled[i] && - stringFoundInStringArray(plugin->mime_types, is->mime)) { + plugin->mime_types != NULL && + string_array_contains(plugin->mime_types, is->mime)) { /* rewind the stream, so each plugin gets a fresh start */ input_stream_seek(is, 0, SEEK_SET); @@ -168,8 +169,8 @@ playlist_list_open_stream_suffix(struct input_stream *is, const char *suffix) for (unsigned i = 0; playlist_plugins[i] != NULL; ++i) { const struct playlist_plugin *plugin = playlist_plugins[i]; - if (playlist_plugins_enabled[i] && - stringFoundInStringArray(plugin->suffixes, suffix)) { + if (playlist_plugins_enabled[i] && plugin->suffixes != NULL && + string_array_contains(plugin->suffixes, suffix)) { /* rewind the stream, so each plugin gets a fresh start */ input_stream_seek(is, 0, SEEK_SET); @@ -213,8 +214,8 @@ playlist_suffix_supported(const char *suffix) for (unsigned i = 0; playlist_plugins[i] != NULL; ++i) { const struct playlist_plugin *plugin = playlist_plugins[i]; - if (playlist_plugins_enabled[i] && - stringFoundInStringArray(plugin->suffixes, suffix)) + if (playlist_plugins_enabled[i] && plugin->suffixes != NULL && + string_array_contains(plugin->suffixes, suffix)) return true; } diff --git a/src/utils.c b/src/utils.c index 933a70a8c..ed8ef6c1a 100644 --- a/src/utils.c +++ b/src/utils.c @@ -132,13 +132,15 @@ int set_nonblocking(int fd) #endif } -int stringFoundInStringArray(const char *const*array, const char *suffix) +bool +string_array_contains(const char *const* haystack, const char *needle) { - while (array && *array) { - if (g_ascii_strcasecmp(*array, suffix) == 0) - return 1; - array++; - } + assert(haystack != NULL); + assert(needle != NULL); - return 0; + for (; *haystack != NULL; ++haystack) + if (g_ascii_strcasecmp(*haystack, needle) == 0) + return true; + + return false; } diff --git a/src/utils.h b/src/utils.h index d114003be..a77d4a03d 100644 --- a/src/utils.h +++ b/src/utils.h @@ -20,6 +20,8 @@ #ifndef MPD_UTILS_H #define MPD_UTILS_H +#include + #ifndef assert_static /* Compile time assertion developed by Ralf Holly */ /* http://pera-software.com/articles/compile-time-assertions.pdf */ @@ -33,6 +35,15 @@ char *parsePath(char *path); int set_nonblocking(int fd); -int stringFoundInStringArray(const char *const*array, const char *suffix); +/** + * Checks whether a string array contains the specified string. + * + * @param haystack a NULL terminated list of strings + * @param needle the string to search for; the comparison is + * case-insensitive for ASCII characters + * @return true if found + */ +bool +string_array_contains(const char *const* haystack, const char *needle); #endif