FLAG_NO_INC = 4,
// &env.FOO; is disabled.
- FLAG_NO_ENV = 8
+ FLAG_NO_ENV = 8,
+
+ // It's okay if an include doesn't exist.
+ FLAG_MISSING_OKAY = 16
};
// Represents the position within a config file.
{
if (tag->getBool("noinclude", false))
flags |= FLAG_NO_INC;
+
if (tag->getBool("noexec", false))
flags |= FLAG_NO_EXEC;
+
if (tag->getBool("noenv", false))
flags |= FLAG_NO_ENV;
+ if (tag->getBool("missingokay", false))
+ flags |= FLAG_MISSING_OKAY;
+ else
+ flags &= ~FLAG_MISSING_OKAY;
+
if (!ParseFile(ServerInstance->Config->Paths.PrependConfig(name), flags, mandatorytag))
throw CoreException("Included");
}
FileWrapper file((isexec ? popen(path.c_str(), "r") : fopen(path.c_str(), "r")), isexec);
if (!file)
+ {
+ if (flags & FLAG_MISSING_OKAY)
+ return true;
+
throw CoreException("Could not read \"" + path + "\" for include");
+ }
reading.push_back(path);
Parser p(*this, flags, file, path, mandatory_tag);
long ConfigTag::getInt(const std::string &key, long def, long min, long max)
{
std::string result;
- if(!readString(key, result))
+ if(!readString(key, result) || result.empty())
return def;
const char* res_cstr = result.c_str();
unsigned long ConfigTag::getUInt(const std::string& key, unsigned long def, unsigned long min, unsigned long max)
{
std::string result;
- if (!readString(key, result))
+ if (!readString(key, result) || result.empty())
return def;
const char* res_cstr = result.c_str();
unsigned long ConfigTag::getDuration(const std::string& key, unsigned long def, unsigned long min, unsigned long max)
{
std::string duration;
- if (!readString(key, duration))
+ if (!readString(key, duration) || duration.empty())
return def;
unsigned long ret;
bool ConfigTag::getBool(const std::string &key, bool def)
{
std::string result;
- if(!readString(key, result))
+ if(!readString(key, result) || result.empty())
return def;
if (stdalgo::string::equalsci(result, "yes") || stdalgo::string::equalsci(result, "true") || stdalgo::string::equalsci(result, "on") || result == "1")