summaryrefslogtreecommitdiff
path: root/src/configparser.cpp
diff options
context:
space:
mode:
authorAttila Molnar <attilamolnar@hush.com>2014-06-09 17:10:17 +0200
committerAttila Molnar <attilamolnar@hush.com>2014-06-09 17:10:17 +0200
commitf3c6c6123da841537b10598e766e1b61a7e66b54 (patch)
tree65edae2f645c62cba60936b3a47c25c488452883 /src/configparser.cpp
parent878315360c6953eed1fb7c9af8c8a6b2295c77fc (diff)
Deduplicate ParseStack::ParseFile() and ParseExec()
Diffstat (limited to 'src/configparser.cpp')
-rw-r--r--src/configparser.cpp34
1 files changed, 5 insertions, 29 deletions
diff --git a/src/configparser.cpp b/src/configparser.cpp
index 2f3fbb5b4..51b248133 100644
--- a/src/configparser.cpp
+++ b/src/configparser.cpp
@@ -331,7 +331,7 @@ void ParseStack::DoInclude(ConfigTag* tag, int flags)
flags |= FLAG_NO_INC;
if (tag->getBool("noexec", true))
flags |= FLAG_NO_EXEC;
- if (!ParseExec(name, flags, mandatorytag))
+ if (!ParseFile(name, flags, mandatorytag, true))
throw CoreException("Included");
}
}
@@ -364,20 +364,20 @@ void ParseStack::DoReadFile(const std::string& key, const std::string& name, int
}
}
-bool ParseStack::ParseFile(const std::string& path, int flags, const std::string& mandatory_tag)
+bool ParseStack::ParseFile(const std::string& path, int flags, const std::string& mandatory_tag, bool isexec)
{
- ServerInstance->Logs->Log("CONFIG", LOG_DEBUG, "Reading file %s", path.c_str());
+ ServerInstance->Logs->Log("CONFIG", LOG_DEBUG, "Reading (isexec=%d) %s", isexec, path.c_str());
for (unsigned int t = 0; t < reading.size(); t++)
{
if (path == reading[t])
{
- throw CoreException("File " + path + " is included recursively (looped inclusion)");
+ throw CoreException((isexec ? "Executable " : "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(path.c_str(), "r"));
+ FileWrapper file((isexec ? popen(path.c_str(), "r") : fopen(path.c_str(), "r")), isexec);
if (!file)
throw CoreException("Could not read \"" + path + "\" for include");
@@ -388,30 +388,6 @@ bool ParseStack::ParseFile(const std::string& path, int flags, const std::string
return ok;
}
-bool ParseStack::ParseExec(const std::string& name, int flags, const std::string& mandatory_tag)
-{
- ServerInstance->Logs->Log("CONFIG", LOG_DEBUG, "Reading executable %s", name.c_str());
- for (unsigned int t = 0; t < reading.size(); t++)
- {
- if (std::string(name) == reading[t])
- {
- throw CoreException("Executable " + name + " is included recursively (looped inclusion)");
- }
- }
-
- /* It's not already included, add it to the list of files we've loaded */
-
- FileWrapper file(popen(name.c_str(), "r"), true);
- if (!file)
- throw CoreException("Could not open executable \"" + name + "\" for include");
-
- reading.push_back(name);
- Parser p(*this, flags, file, name, mandatory_tag);
- bool ok = p.outer_parse();
- reading.pop_back();
- return ok;
-}
-
bool ConfigTag::readString(const std::string& key, std::string& value, bool allow_lf)
{
if (!this)