From db2b72adee6e76cf25edac0eb9e69387c8dd5ee6 Mon Sep 17 00:00:00 2001 From: memchr <118117622+memchr@users.noreply.github.com> Date: Thu, 14 Sep 2023 11:07:31 +0000 Subject: config: fix relative path resolution (#3308) --- src/helpers/MiscFunctions.cpp | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) (limited to 'src/helpers/MiscFunctions.cpp') diff --git a/src/helpers/MiscFunctions.cpp b/src/helpers/MiscFunctions.cpp index 9000eff2..218c2332 100644 --- a/src/helpers/MiscFunctions.cpp +++ b/src/helpers/MiscFunctions.cpp @@ -126,20 +126,22 @@ static const float transforms[][9] = { std::string absolutePath(const std::string& rawpath, const std::string& currentPath) { auto value = rawpath; - if (value[0] == '.') { - auto currentDir = currentPath.substr(0, currentPath.find_last_of('/')); - - if (value[1] == '.') { - auto parentDir = currentDir.substr(0, currentDir.find_last_of('/')); - value.replace(0, 2 + currentPath.empty(), parentDir); - } else { - value.replace(0, 1 + currentPath.empty(), currentDir); - } - } - if (value[0] == '~') { static const char* const ENVHOME = getenv("HOME"); value.replace(0, 1, std::string(ENVHOME)); + } else if (value[0] != '/') { + auto currentDir = currentPath.substr(0, currentPath.find_last_of('/')); + + if (value[0] == '.') { + if (value[1] == '.' && value[2] == '/') { + auto parentDir = currentDir.substr(0, currentDir.find_last_of('/')); + value.replace(0, 2 + currentPath.empty(), parentDir); + } else if (value[1] == '/') + value.replace(0, 1 + currentPath.empty(), currentDir); + else + value = currentDir + '/' + value; + } else + value = currentDir + '/' + value; } return value; -- cgit v1.2.3