summaryrefslogtreecommitdiff
path: root/src/configparser.cpp
diff options
context:
space:
mode:
authorPeter Powell <petpow@saberuk.com>2013-07-10 18:11:48 +0100
committerPeter Powell <petpow@saberuk.com>2013-08-12 16:53:33 +0100
commit29822a263b3b408559257e9ef2bd29167e7573fa (patch)
tree85a67980fb21b7a61756761558fef396adad7dd7 /src/configparser.cpp
parent3d019b14ec0025ff38bbd40c868ddccd0b13d8a3 (diff)
Add <path> keys for all of the compile-time paths.
Also, make all paths in the config relative to their associated directory. This reverts a change in 2.0 which turned out to be a terrible idea, especially for system-wide installations.
Diffstat (limited to 'src/configparser.cpp')
-rw-r--r--src/configparser.cpp18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/configparser.cpp b/src/configparser.cpp
index f3e79e2fd..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;