1
0
Fork 0

Merge pull request #113575 from bruvzg/fix_path

[Unix] Remove leading `..` from absolute paths and apply `simplify_path` to Unix current directory path.
This commit is contained in:
Rémi Verschelde 2025-12-18 14:23:59 +01:00
commit 30c2fc148e
No known key found for this signature in database
GPG Key ID: C3336907360768E1
3 changed files with 11 additions and 0 deletions

View File

@ -4189,6 +4189,9 @@ String String::simplify_path() const {
}
}
Vector<String> dirs = s.split("/", false);
bool absolute_path = is_absolute_path();
absolute_path = absolute_path && !begins_with("res://"); // FIXME: Some code (GLTF importer) rely on accessing files up from `res://`, this probably should be disabled in the future.
for (int i = 0; i < dirs.size(); i++) {
String d = dirs[i];
@ -4200,6 +4203,9 @@ String String::simplify_path() const {
dirs.remove_at(i);
dirs.remove_at(i - 1);
i -= 2;
} else if (absolute_path && i == 0) {
dirs.remove_at(i);
i--;
}
}
}

View File

@ -52,6 +52,10 @@
#include <mntent.h>
#endif
String DirAccessUnix::fix_path(const String &p_path) const {
return DirAccess::fix_path(p_path).simplify_path();
}
Error DirAccessUnix::list_dir_begin() {
list_dir_end(); //close any previous dir opening!

View File

@ -50,6 +50,7 @@ protected:
String current_dir;
virtual String fix_unicode_name(const char *p_name) const { return String::utf8(p_name); }
virtual bool is_hidden(const String &p_name);
virtual String fix_path(const String &p_path) const override;
public:
typedef void (*RemoveNotificationFunc)(const String &p_file);