diff options
Diffstat (limited to 'src/configreader.cpp')
| -rw-r--r-- | src/configreader.cpp | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/configreader.cpp b/src/configreader.cpp index 735bd9a22..1aa71443b 100644 --- a/src/configreader.cpp +++ b/src/configreader.cpp @@ -31,12 +31,14 @@ */ +#include <filesystem> +#include <iostream> + #include "inspircd.h" #include "xline.h" #include "listmode.h" #include "exitcodes.h" #include "configparser.h" -#include <iostream> ServerLimits::ServerLimits(std::shared_ptr<ConfigTag> tag) : MaxLine(tag->getUInt("maxline", 512, 512)) @@ -62,6 +64,23 @@ ServerConfig::ServerPaths::ServerPaths(std::shared_ptr<ConfigTag> tag) { } +std::string ServerConfig::ServerPaths::ExpandPath(const std::string& base, const std::string& fragment) +{ + // The fragment is an absolute path, don't modify it. + if (std::filesystem::path(fragment).is_absolute()) + return fragment; + + // The fragment is relative to a home directory, expand that. + if (!fragment.compare(0, 2, "~/", 2)) + { + const char* homedir = getenv("HOME"); + if (homedir && *homedir) + return std::string(homedir) + '/' + fragment.substr(2); + } + + return base + '/' + fragment; +} + ServerConfig::ServerConfig() : EmptyTag(std::make_shared<ConfigTag>("empty", FilePosition("<auto>", 0, 0))) , Limits(EmptyTag) |
