diff options
author | bruvzg <7645683+bruvzg@users.noreply.github.com> | 2024-04-12 10:06:49 +0300 |
---|---|---|
committer | bruvzg <7645683+bruvzg@users.noreply.github.com> | 2024-04-12 10:06:49 +0300 |
commit | 57fde36f31b742d5ba3b74a78b90c173513c51d0 (patch) | |
tree | d3cca7ed2d5c633ee2c741edcac5fb1870448947 /drivers/unix | |
parent | b2f425fe680d1ed5d5b5fa9ae289ae93fd294607 (diff) | |
download | redot-engine-57fde36f31b742d5ba3b74a78b90c173513c51d0.tar.gz |
[Unix / DirAccess] Fix removing directory symlinks with `remove`, ensure `erase_contents_recursive` is not following directory symlinks.
Diffstat (limited to 'drivers/unix')
-rw-r--r-- | drivers/unix/dir_access_unix.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/unix/dir_access_unix.cpp b/drivers/unix/dir_access_unix.cpp index 46efb45934..2a85a81b91 100644 --- a/drivers/unix/dir_access_unix.cpp +++ b/drivers/unix/dir_access_unix.cpp @@ -419,7 +419,7 @@ Error DirAccessUnix::remove(String p_path) { return FAILED; } - if (S_ISDIR(flags.st_mode)) { + if (S_ISDIR(flags.st_mode) && !is_link(p_path)) { return ::rmdir(p_path.utf8().get_data()) == 0 ? OK : FAILED; } else { return ::unlink(p_path.utf8().get_data()) == 0 ? OK : FAILED; @@ -435,7 +435,7 @@ bool DirAccessUnix::is_link(String p_file) { struct stat flags = {}; if ((lstat(p_file.utf8().get_data(), &flags) != 0)) { - return FAILED; + return false; } return S_ISLNK(flags.st_mode); |