diff options
Diffstat (limited to 'otherlibs/win32unix/rename.c')
-rw-r--r-- | otherlibs/win32unix/rename.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/otherlibs/win32unix/rename.c b/otherlibs/win32unix/rename.c index d84bcd66a..3bfdf4770 100644 --- a/otherlibs/win32unix/rename.c +++ b/otherlibs/win32unix/rename.c @@ -19,9 +19,23 @@ CAMLprim value unix_rename(value path1, value path2) { - if (MoveFileEx(String_val(path1), String_val(path2), - MOVEFILE_REPLACE_EXISTING | MOVEFILE_WRITE_THROUGH | - MOVEFILE_COPY_ALLOWED) == 0) { + static int supports_MoveFileEx = -1; /* don't know yet */ + BOOL ok; + + if (supports_MoveFileEx < 0) { + OSVERSIONINFO VersionInfo; + VersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + supports_MoveFileEx = + (GetVersionEx(&VersionInfo) != 0) + && (VersionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT); + } + if (supports_MoveFileEx > 0) + ok = MoveFileEx(String_val(path1), String_val(path2), + MOVEFILE_REPLACE_EXISTING | MOVEFILE_WRITE_THROUGH | + MOVEFILE_COPY_ALLOWED); + else + ok = MoveFile(String_val(path1), String_val(path2)); + if (! ok) { win32_maperr(GetLastError()); uerror("rename", path1); } |