diff options
| author | Juan Linietsky | 2015-03-02 00:54:10 -0300 |
|---|---|---|
| committer | Juan Linietsky | 2015-03-02 00:54:43 -0300 |
| commit | a1f715a4da71fbc2b7d6fad68624bf8b22c6da17 (patch) | |
| tree | 5cd305c8f8858504f0b5efb804b2c291b1dc5089 /drivers/windows/file_access_windows.cpp | |
| parent | 0e732637d07d908daf64526f222e71fea402f3db (diff) | |
| download | godot-a1f715a4da71fbc2b7d6fad68624bf8b22c6da17.tar.gz godot-a1f715a4da71fbc2b7d6fad68624bf8b22c6da17.tar.zst godot-a1f715a4da71fbc2b7d6fad68624bf8b22c6da17.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 ); } |
