diff options
author | Max Kellermann <max@duempel.org> | 2014-01-24 16:55:17 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2014-01-24 16:55:17 +0100 |
commit | 9b1fbdbca63f03c357a2f9c01fca281f62b3570c (patch) | |
tree | f093e063f77625e1380e7b1e8f5654a4be254d85 /src/config | |
parent | 97391fd4b975eab7049c31c88b8a118be430c427 (diff) | |
download | mpd-9b1fbdbca63f03c357a2f9c01fca281f62b3570c.tar.gz mpd-9b1fbdbca63f03c357a2f9c01fca281f62b3570c.tar.xz mpd-9b1fbdbca63f03c357a2f9c01fca281f62b3570c.zip |
ConfigGlobal: add config_find_block()
Merge duplicate code.
Diffstat (limited to 'src/config')
-rw-r--r-- | src/config/ConfigGlobal.cxx | 17 | ||||
-rw-r--r-- | src/config/ConfigGlobal.hxx | 11 |
2 files changed, 28 insertions, 0 deletions
diff --git a/src/config/ConfigGlobal.cxx b/src/config/ConfigGlobal.cxx index c7d16d3e7..dd76e3ca3 100644 --- a/src/config/ConfigGlobal.cxx +++ b/src/config/ConfigGlobal.cxx @@ -85,6 +85,23 @@ config_get_next_param(ConfigOption option, const struct config_param * last) return param; } +const config_param * +config_find_block(ConfigOption option, const char *key, const char *value) +{ + const config_param *param = nullptr; + while ((param = config_get_next_param(option, param)) != nullptr) { + const char *value2 = param->GetBlockValue(key); + if (value2 == nullptr) + FormatFatalError("block without '%s' name in line %d", + key, param->line); + + if (strcmp(value2, value) == 0) + return param; + } + + return nullptr; +} + const char * config_get_string(ConfigOption option, const char *default_value) { diff --git a/src/config/ConfigGlobal.hxx b/src/config/ConfigGlobal.hxx index abce424de..84ef7dd5f 100644 --- a/src/config/ConfigGlobal.hxx +++ b/src/config/ConfigGlobal.hxx @@ -53,6 +53,17 @@ config_get_param(enum ConfigOption option) return config_get_next_param(option, nullptr); } +/** + * Find a block with a matching attribute. + * + * @param option the blocks to search + * @param key the attribute name + * @param value the expected attribute value + */ +gcc_pure +const config_param * +config_find_block(ConfigOption option, const char *key, const char *value); + /* Note on gcc_pure: Some of the functions declared pure are not really pure in strict sense. They have side effect such that they validate parameter's value and signal an error if it's invalid. |