diff options
| author | Juan Linietsky | 2015-03-03 14:41:36 -0300 |
|---|---|---|
| committer | Juan Linietsky | 2015-03-03 14:41:36 -0300 |
| commit | 2c2894ceb674927a35d2798b3e63adabdb020077 (patch) | |
| tree | 9e8950e0acc8fb7531fa60ce8c0321a5b60c335a /drivers/windows/file_access_windows.cpp | |
| parent | 4d2198110b4af7f203eeef95697255569e49bce7 (diff) | |
| parent | a0ee5cc3531786a652ee43d3a57cb69dff34bd70 (diff) | |
| download | godot-2c2894ceb674927a35d2798b3e63adabdb020077.tar.gz godot-2c2894ceb674927a35d2798b3e63adabdb020077.tar.zst godot-2c2894ceb674927a35d2798b3e63adabdb020077.zip | |
Diffstat (limited to 'drivers/windows/file_access_windows.cpp')
| -rw-r--r-- | drivers/windows/file_access_windows.cpp | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/drivers/windows/file_access_windows.cpp b/drivers/windows/file_access_windows.cpp index a6073cbb2..e24685432 100644 --- a/drivers/windows/file_access_windows.cpp +++ b/drivers/windows/file_access_windows.cpp @@ -28,14 +28,18 @@ /*************************************************************************/ #ifdef WINDOWS_ENABLED +#include <Windows.h> +#include "Shlwapi.h" #include "file_access_windows.h" + #include <sys/types.h> #include <sys/stat.h> #include <wchar.h> #include <tchar.h> #include "print_string.h" + #ifdef _MSC_VER #define S_ISREG(m) ((m)&_S_IFREG) #endif @@ -111,10 +115,20 @@ void FileAccessWindows::close() { //unlink(save_path.utf8().get_data()); //print_line("renaming.."); - _wunlink(save_path.c_str()); //unlink if exists - int rename_error = _wrename((save_path+".tmp").c_str(),save_path.c_str()); + //_wunlink(save_path.c_str()); //unlink if exists + //int rename_error = _wrename((save_path+".tmp").c_str(),save_path.c_str()); + + + bool rename_error; + if (!PathFileExistsW(save_path.c_str())) { + //creating new file + rename_error = _wrename((save_path+".tmp").c_str(),save_path.c_str())!=0; + } else { + //atomic replace for existing file + rename_error = !ReplaceFileW(save_path.c_str(), (save_path+".tmp").c_str(), NULL, 2|4, NULL, NULL); + } save_path=""; - ERR_FAIL_COND( rename_error != 0); + ERR_FAIL_COND( rename_error ); } |
