config: fix relative path resolution (#3308)
This commit is contained in:
parent
0dc8289b02
commit
db2b72adee
2 changed files with 16 additions and 13 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue