]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Deduplicate ParseStack::ParseFile() and ParseExec()
authorAttila Molnar <attilamolnar@hush.com>
Mon, 9 Jun 2014 15:10:17 +0000 (17:10 +0200)
committerAttila Molnar <attilamolnar@hush.com>
Mon, 9 Jun 2014 15:10:17 +0000 (17:10 +0200)
include/configparser.h
src/configparser.cpp

index 8292fdda5c6207182cd4129bdf6b27bcc41d4f2a..f46d143aeac86485a9e12f1263b43a1a059b30d3 100644 (file)
@@ -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);
 };
index 2f3fbb5b43471a03cfa14a3ffdaa76747dd04ca0..51b2481338cdb5c31011ef26d6b7e90524432016 100644 (file)
@@ -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)