summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Nathan Woods <npwoods@mess.org>2016-06-25 09:30:03 -0400
committer Nathan Woods <npwoods@mess.org>2016-06-25 16:08:26 -0400
commit3232bfad8909240fe18a63fe1c5090efe09bf626 (patch)
treed1d90e37db3801b6d4dafd9422965f344975faf2
parentf75a33f7d1ff7fa0baa893a3a374df2de23b050b (diff)
Fixed incorrect implementation of win_time_point_from_filetime()
-rw-r--r--src/osd/windows/winutil.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/osd/windows/winutil.cpp b/src/osd/windows/winutil.cpp
index 3ec2314068e..5be325e0fa6 100644
--- a/src/osd/windows/winutil.cpp
+++ b/src/osd/windows/winutil.cpp
@@ -41,8 +41,12 @@ osd::directory::entry::entry_type win_attributes_to_entry_type(DWORD attributes)
std::chrono::system_clock::time_point win_time_point_from_filetime(LPFILETIME file_time)
{
- return std::chrono::system_clock::time_point(std::chrono::system_clock::duration(
- (static_cast<__int64>(file_time->dwHighDateTime) << 32) | file_time->dwLowDateTime));
+ ULARGE_INTEGER ull;
+ ull.LowPart = file_time->dwLowDateTime;
+ ull.HighPart = file_time->dwHighDateTime;
+
+ time_t t = ull.QuadPart / 10000000ULL - 11644473600ULL;
+ return std::chrono::system_clock::from_time_t(t);
}