From: Attila Molnar Date: Mon, 9 Jun 2014 15:10:17 +0000 (+0200) Subject: Deduplicate ParseStack::ParseFile() and ParseExec() X-Git-Url: https://git.netwichtig.de/gitweb/?a=commitdiff_plain;h=f3c6c6123da841537b10598e766e1b61a7e66b54;p=user%2Fhenk%2Fcode%2Finspircd.git Deduplicate ParseStack::ParseFile() and ParseExec() --- diff --git a/include/configparser.h b/include/configparser.h index 8292fdda5..f46d143ae 100644 --- a/include/configparser.h +++ b/include/configparser.h @@ -53,8 +53,7 @@ struct ParseStack vars["quot"] = "\""; vars["newline"] = vars["nl"] = "\n"; } - bool ParseFile(const std::string& name, int flags, const std::string& mandatory_tag = ""); - bool ParseExec(const std::string& name, int flags, const std::string& mandatory_tag = ""); + bool ParseFile(const std::string& name, int flags, const std::string& mandatory_tag = std::string(), bool isexec = false); void DoInclude(ConfigTag* includeTag, int flags); void DoReadFile(const std::string& key, const std::string& file, int flags, bool exec); }; 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)