diff options
author | Bioblaze Payne <BioblazePayne@gmail.com> | 2024-10-04 03:22:12 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-10-04 03:22:12 -0700 |
commit | bac64b2b53a93c4ac57093eec3e900d79f4f3279 (patch) | |
tree | a04036601d71f6e34fe1728a4c74e42da5113c4d /drivers/unix/dir_access_unix.cpp | |
parent | 025b594830b29c1347a77deb7b41a39dc48def42 (diff) | |
parent | 32239d477be66d8c94e9a7a95c56ae0cbad54cfb (diff) | |
download | redot-engine-bac64b2b53a93c4ac57093eec3e900d79f4f3279.tar.gz |
Merge branch 'godotengine:master' into master
Diffstat (limited to 'drivers/unix/dir_access_unix.cpp')
-rw-r--r-- | drivers/unix/dir_access_unix.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/unix/dir_access_unix.cpp b/drivers/unix/dir_access_unix.cpp index e4bad88083..816ffd7a32 100644 --- a/drivers/unix/dir_access_unix.cpp +++ b/drivers/unix/dir_access_unix.cpp @@ -410,7 +410,17 @@ Error DirAccessUnix::rename(String p_path, String p_new_path) { p_new_path = p_new_path.left(-1); } - return ::rename(p_path.utf8().get_data(), p_new_path.utf8().get_data()) == 0 ? OK : FAILED; + int res = ::rename(p_path.utf8().get_data(), p_new_path.utf8().get_data()); + if (res != 0 && errno == EXDEV) { // Cross-device move, use copy and remove. + Error err = OK; + err = copy(p_path, p_new_path); + if (err != OK) { + return err; + } + return remove(p_path); + } else { + return (res == 0) ? OK : FAILED; + } } Error DirAccessUnix::remove(String p_path) { |