config/Data: FindBlock() throws on error

This commit is contained in:
Max Kellermann 2018-07-17 21:18:18 +02:00
parent 15c36baefd
commit eeaaea802a
2 changed files with 8 additions and 5 deletions

View File

@ -21,7 +21,7 @@
#include "Data.hxx"
#include "Param.hxx"
#include "Block.hxx"
#include "system/FatalError.hxx"
#include "util/RuntimeError.hxx"
#include "util/StringAPI.hxx"
void
@ -40,14 +40,14 @@ ConfigData::Clear()
const ConfigBlock *
ConfigData::FindBlock(ConfigBlockOption option,
const char *key, const char *value) const noexcept
const char *key, const char *value) const
{
for (const auto *block = GetBlock(option);
block != nullptr; block = block->next) {
const char *value2 = block->GetBlockValue(key);
if (value2 == nullptr)
FormatFatalError("block without '%s' in line %d",
key, block->line);
throw FormatRuntimeError("block without '%s' in line %d",
key, block->line);
if (StringIsEqual(value2, value))
return block;

View File

@ -43,9 +43,12 @@ struct ConfigData {
return blocks[size_t(option)];
}
/**
* Throws if a block doesn't have the specified (mandatory) key.
*/
gcc_pure
const ConfigBlock *FindBlock(ConfigBlockOption option,
const char *key, const char *value) const noexcept;
const char *key, const char *value) const;
};
#endif