aboutsummaryrefslogtreecommitdiff
path: root/src/configparser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/configparser.cpp')
-rw-r--r--src/configparser.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/configparser.cpp b/src/configparser.cpp
index 224170bff..36d8e3dad 100644
--- a/src/configparser.cpp
+++ b/src/configparser.cpp
@@ -389,6 +389,7 @@ void ParseStack::DoInclude(const std::shared_ptr<ConfigTag>& tag, int flags)
flags |= FLAG_NO_ENV;
const std::string includedir = ServerInstance->Config->Paths.PrependConfig(name);
+ std::set<std::string> configs;
try
{
for (const auto& entry : std::filesystem::directory_iterator(includedir))
@@ -397,17 +398,20 @@ void ParseStack::DoInclude(const std::shared_ptr<ConfigTag>& tag, int flags)
continue;
const std::string path = entry.path().string();
- if (!InspIRCd::Match(path, "*.conf"))
- continue;
-
- if (!ParseFile(path, flags, mandatorytag))
- throw CoreException("Included");
+ if (InspIRCd::Match(path, "*.conf"))
+ configs.insert(path);
}
}
catch (const std::filesystem::filesystem_error& err)
{
throw CoreException("Unable to read directory for include " + includedir + ": " + err.what());
}
+
+ for (const auto& config : configs)
+ {
+ if (!ParseFile(config, flags, mandatorytag))
+ throw CoreException("Included");
+ }
}
else if (tag->readString("executable", name))