summaryrefslogtreecommitdiff
path: root/src/configparser.cpp
diff options
context:
space:
mode:
authorAttila Molnar <attilamolnar@hush.com>2013-08-12 09:20:46 -0700
committerAttila Molnar <attilamolnar@hush.com>2013-08-12 09:20:46 -0700
commit9d4efff3957f1ad163f726bc44bed3a4870afb94 (patch)
tree85a67980fb21b7a61756761558fef396adad7dd7 /src/configparser.cpp
parentdafa2f3031c4abc7f5506385770c4fc743669b17 (diff)
parent29822a263b3b408559257e9ef2bd29167e7573fa (diff)
Merge pull request #591 from SaberUK/master+config-tweaks
Various patches relating to configuration.
Diffstat (limited to 'src/configparser.cpp')
-rw-r--r--src/configparser.cpp32
1 files changed, 20 insertions, 12 deletions
diff --git a/src/configparser.cpp b/src/configparser.cpp
index 3289cf396..1783e901e 100644
--- a/src/configparser.cpp
+++ b/src/configparser.cpp
@@ -323,9 +323,10 @@ void ParseStack::DoReadFile(const std::string& key, const std::string& name, int
if (exec && (flags & FLAG_NO_EXEC))
throw CoreException("Invalid <execfiles> tag in file included with noexec=\"yes\"");
- FileWrapper file(exec ? popen(name.c_str(), "r") : fopen(name.c_str(), "r"), exec);
+ std::string path = ServerInstance->Config->Paths.PrependConfig(name);
+ FileWrapper file(exec ? popen(name.c_str(), "r") : fopen(path.c_str(), "r"), exec);
if (!file)
- throw CoreException("Could not read \"" + name + "\" for \"" + key + "\" file");
+ throw CoreException("Could not read \"" + path + "\" for \"" + key + "\" file");
file_cache& cache = FilesOutput[key];
cache.clear();
@@ -345,23 +346,24 @@ void ParseStack::DoReadFile(const std::string& key, const std::string& name, int
bool ParseStack::ParseFile(const std::string& name, int flags, const std::string& mandatory_tag)
{
- ServerInstance->Logs->Log("CONFIG", LOG_DEBUG, "Reading file %s", name.c_str());
+ std::string path = ServerInstance->Config->Paths.PrependConfig(name);
+ ServerInstance->Logs->Log("CONFIG", LOG_DEBUG, "Reading file %s", path.c_str());
for (unsigned int t = 0; t < reading.size(); t++)
{
if (std::string(name) == reading[t])
{
- throw CoreException("File " + name + " is included recursively (looped inclusion)");
+ throw CoreException("File " + path + " is included recursively (looped inclusion)");
}
}
/* It's not already included, add it to the list of files we've loaded */
- FileWrapper file(fopen(name.c_str(), "r"));
+ FileWrapper file(fopen(path.c_str(), "r"));
if (!file)
- throw CoreException("Could not read \"" + name + "\" for include");
+ throw CoreException("Could not read \"" + path + "\" for include");
- reading.push_back(name);
- Parser p(*this, flags, file, name, mandatory_tag);
+ reading.push_back(path);
+ Parser p(*this, flags, file, path, mandatory_tag);
bool ok = p.outer_parse();
reading.pop_back();
return ok;
@@ -420,7 +422,7 @@ std::string ConfigTag::getString(const std::string& key, const std::string& def)
return res;
}
-long ConfigTag::getInt(const std::string &key, long def)
+long ConfigTag::getInt(const std::string &key, long def, long min, long max)
{
std::string result;
if(!readString(key, result))
@@ -434,15 +436,21 @@ long ConfigTag::getInt(const std::string &key, long def)
switch (toupper(*res_tail))
{
case 'K':
- res= res* 1024;
+ res = res * 1024;
break;
case 'M':
- res= res* 1024 * 1024;
+ res = res * 1024 * 1024;
break;
case 'G':
- res= res* 1024 * 1024 * 1024;
+ res = res * 1024 * 1024 * 1024;
break;
}
+ if (res < min || res > max)
+ {
+ ServerInstance->Logs->Log("CONFIG", LOG_DEFAULT, "WARNING: <%s:%s> value of %ld is not between %ld and %ld; set to %ld.",
+ tag.c_str(), key.c_str(), res, min, max, def);
+ res = def;
+ }
return res;
}