diff options
author | ACB <ansas.bogdan@rwth-aachen.de> | 2023-02-12 14:05:48 +0100 |
---|---|---|
committer | ACB <ansas.bogdan@rwth-aachen.de> | 2023-03-15 19:36:07 +0100 |
commit | 345f5757e56e28a3a25465dcd84b8ddc674315b9 (patch) | |
tree | 00cb0a1990d3a865bd63c68ea23a7a96214c682c /drivers/unix | |
parent | 1d0e7f0222e2f6da16bea959a4170ac754110d56 (diff) | |
download | redot-engine-345f5757e56e28a3a25465dcd84b8ddc674315b9.tar.gz |
Create a safe temporary file with is_backup_save_enabled
Diffstat (limited to 'drivers/unix')
-rw-r--r-- | drivers/unix/file_access_unix.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/unix/file_access_unix.cpp b/drivers/unix/file_access_unix.cpp index 43d3f53904..5959989950 100644 --- a/drivers/unix/file_access_unix.cpp +++ b/drivers/unix/file_access_unix.cpp @@ -100,6 +100,11 @@ Error FileAccessUnix::open_internal(const String &p_path, int p_mode_flags) { if (is_backup_save_enabled() && (p_mode_flags == WRITE)) { save_path = path; + // Create a temporary file in the same directory as the target file. + path = path + "-XXXXXX"; + if (!mkstemp(path.utf8().ptrw())) { + return ERR_FILE_CANT_OPEN; + } path = path + ".tmp"; } @@ -143,7 +148,7 @@ void FileAccessUnix::_close() { } if (!save_path.is_empty()) { - int rename_error = rename((save_path + ".tmp").utf8().get_data(), save_path.utf8().get_data()); + int rename_error = rename(path.utf8().get_data(), save_path.utf8().get_data()); if (rename_error && close_fail_notify) { close_fail_notify(save_path); |