aboutsummaryrefslogtreecommitdiff
path: root/src/configreader.cpp
diff options
context:
space:
mode:
authorGravatar Sadie Powell2022-01-15 22:45:11 +0000
committerGravatar Sadie Powell2022-01-15 23:20:45 +0000
commit9059147974ffbe2bea55b9c2136307a77f465835 (patch)
treedd5e8a4a0634d4a9afbf14813c8779f7839f99f5 /src/configreader.cpp
parentMerge branch 'insp3' into master. (diff)
Replace uses of the FileSystem class with std::filesystem.
Diffstat (limited to 'src/configreader.cpp')
-rw-r--r--src/configreader.cpp21
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)