Fix memory leak when move to trash fails on Linux
This commit is contained in:
parent
3102660512
commit
8be49838b3
1 changed files with 3 additions and 5 deletions
|
@ -448,7 +448,7 @@ Error OS_LinuxBSD::move_to_trash(const String &p_path) {
|
||||||
|
|
||||||
// Create needed directories for decided trash can location.
|
// Create needed directories for decided trash can location.
|
||||||
{
|
{
|
||||||
DirAccess *dir_access = DirAccess::create(DirAccess::ACCESS_FILESYSTEM);
|
DirAccessRef dir_access = DirAccess::create(DirAccess::ACCESS_FILESYSTEM);
|
||||||
Error err = dir_access->make_dir_recursive(trash_path);
|
Error err = dir_access->make_dir_recursive(trash_path);
|
||||||
|
|
||||||
// Issue an error if trash can is not created properly.
|
// Issue an error if trash can is not created properly.
|
||||||
|
@ -457,7 +457,6 @@ Error OS_LinuxBSD::move_to_trash(const String &p_path) {
|
||||||
ERR_FAIL_COND_V_MSG(err != OK, err, "Could not create the trash path \"" + trash_path + "\"/files");
|
ERR_FAIL_COND_V_MSG(err != OK, err, "Could not create the trash path \"" + trash_path + "\"/files");
|
||||||
err = dir_access->make_dir_recursive(trash_path + "/info");
|
err = dir_access->make_dir_recursive(trash_path + "/info");
|
||||||
ERR_FAIL_COND_V_MSG(err != OK, err, "Could not create the trash path \"" + trash_path + "\"/info");
|
ERR_FAIL_COND_V_MSG(err != OK, err, "Could not create the trash path \"" + trash_path + "\"/info");
|
||||||
memdelete(dir_access);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// The trash can is successfully created, now we check that we don't exceed our file name length limit.
|
// The trash can is successfully created, now we check that we don't exceed our file name length limit.
|
||||||
|
@ -497,16 +496,15 @@ Error OS_LinuxBSD::move_to_trash(const String &p_path) {
|
||||||
String trash_info = "[Trash Info]\nPath=" + p_path.uri_encode() + "\nDeletionDate=" + timestamp + "\n";
|
String trash_info = "[Trash Info]\nPath=" + p_path.uri_encode() + "\nDeletionDate=" + timestamp + "\n";
|
||||||
{
|
{
|
||||||
Error err;
|
Error err;
|
||||||
FileAccess *file = FileAccess::open(trash_path + "/info/" + file_name + ".trashinfo", FileAccess::WRITE, &err);
|
FileAccessRef file = FileAccess::open(trash_path + "/info/" + file_name + ".trashinfo", FileAccess::WRITE, &err);
|
||||||
ERR_FAIL_COND_V_MSG(err != OK, err, "Can't create trashinfo file:" + trash_path + "/info/" + file_name + ".trashinfo");
|
ERR_FAIL_COND_V_MSG(err != OK, err, "Can't create trashinfo file:" + trash_path + "/info/" + file_name + ".trashinfo");
|
||||||
file->store_string(trash_info);
|
file->store_string(trash_info);
|
||||||
file->close();
|
file->close();
|
||||||
|
|
||||||
// Rename our resource before moving it to the trash can.
|
// Rename our resource before moving it to the trash can.
|
||||||
DirAccess *dir_access = DirAccess::create(DirAccess::ACCESS_FILESYSTEM);
|
DirAccessRef dir_access = DirAccess::create(DirAccess::ACCESS_FILESYSTEM);
|
||||||
err = dir_access->rename(p_path, p_path.get_base_dir() + "/" + file_name);
|
err = dir_access->rename(p_path, p_path.get_base_dir() + "/" + file_name);
|
||||||
ERR_FAIL_COND_V_MSG(err != OK, err, "Can't rename file \"" + p_path + "\"");
|
ERR_FAIL_COND_V_MSG(err != OK, err, "Can't rename file \"" + p_path + "\"");
|
||||||
memdelete(dir_access);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Move the given resource to the trash can.
|
// Move the given resource to the trash can.
|
||||||
|
|
Loading…
Reference in a new issue