From 1bfafc8c43d8012c0dc92574c8c9511125d048b2 Mon Sep 17 00:00:00 2001 From: Eladash Date: Fri, 11 Sep 2020 22:14:17 +0300 Subject: [PATCH] Win32 FS: Fix fs::utime for directories --- Utilities/File.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Utilities/File.cpp b/Utilities/File.cpp index 5afed876a3be..0b383f10c843 100644 --- a/Utilities/File.cpp +++ b/Utilities/File.cpp @@ -854,8 +854,16 @@ bool fs::utime(const std::string& path, s64 atime, s64 mtime, std::optional } #ifdef _WIN32 + fs::stat_t stats; + if (!fs::stat(path, stats)) + { + return false; + } + + DWORD attr = stats.is_directory ? FILE_FLAG_BACKUP_SEMANTICS : FILE_ATTRIBUTE_NORMAL; + // Open the file - const auto handle = CreateFileW(to_wchar(path).get(), FILE_WRITE_ATTRIBUTES, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + const auto handle = CreateFileW(to_wchar(path).get(), FILE_WRITE_ATTRIBUTES, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, attr, NULL); if (handle == INVALID_HANDLE_VALUE) { g_tls_error = to_error(GetLastError());