Fix RemoveRelatvePathComponents
This used to return "/foo" for "../foo" when it should return the enpty string (i.e., error removing all relative components).
This commit is contained in:
parent
59f84ca0a0
commit
f522e7351a
@ -631,14 +631,12 @@ std::string RemoveRelativePathComponents(std::string path)
|
||||
std::string component = path.substr(component_start,
|
||||
component_end - component_start);
|
||||
bool remove_this_component = false;
|
||||
if(component == "." && component_start != 0){
|
||||
if (component == ".") {
|
||||
remove_this_component = true;
|
||||
}
|
||||
else if(component == ".."){
|
||||
} else if (component == "..") {
|
||||
remove_this_component = true;
|
||||
dotdot_count += 1;
|
||||
}
|
||||
else if(dotdot_count != 0){
|
||||
} else if (dotdot_count != 0) {
|
||||
remove_this_component = true;
|
||||
dotdot_count -= 1;
|
||||
}
|
||||
@ -646,9 +644,14 @@ std::string RemoveRelativePathComponents(std::string path)
|
||||
if (remove_this_component) {
|
||||
while (pos != 0 && IsDirDelimiter(path[pos-1]))
|
||||
pos--;
|
||||
if (component_start == 0) {
|
||||
// We need to remove the delemiter too
|
||||
path = path.substr(component_with_delim_end, std::string::npos);
|
||||
} else {
|
||||
path = path.substr(0, pos) + DIR_DELIM +
|
||||
path.substr(component_with_delim_end,
|
||||
std::string::npos);
|
||||
path.substr(component_with_delim_end, std::string::npos);
|
||||
}
|
||||
if (pos > 0)
|
||||
pos++;
|
||||
}
|
||||
}
|
||||
|
@ -251,7 +251,10 @@ void TestFilePath::testRemoveRelativePathComponent()
|
||||
UASSERT(result == p("/home/user/minetest/worlds/world1"));
|
||||
path = p(".");
|
||||
result = fs::RemoveRelativePathComponents(path);
|
||||
UASSERT(result == ".");
|
||||
UASSERT(result == "");
|
||||
path = p("../a");
|
||||
result = fs::RemoveRelativePathComponents(path);
|
||||
UASSERT(result == "");
|
||||
path = p("./subdir/../..");
|
||||
result = fs::RemoveRelativePathComponents(path);
|
||||
UASSERT(result == "");
|
||||
|
Loading…
x
Reference in New Issue
Block a user