From 03c64357c4563a87d062c44acbd8b5c9187dfeec Mon Sep 17 00:00:00 2001 From: Oscar Spencer Date: Sun, 15 Jan 2023 00:23:23 -0600 Subject: [PATCH] Increase precision of clocks in clock_time_get on Windows --- src/clocks.c | 25 +++++-------------------- 1 file changed, 5 insertions(+), 20 deletions(-) diff --git a/src/clocks.c b/src/clocks.c index ddbf2a7..b10765d 100644 --- a/src/clocks.c +++ b/src/clocks.c @@ -17,32 +17,17 @@ FILETIME exit; \ FILETIME system; \ FILETIME user; \ - SYSTEMTIME sys_system; \ - SYSTEMTIME sys_user; \ if (0 == get_times((handle), &create, &exit, &system, &user)) { \ return uvwasi__translate_uv_error( \ uv_translate_sys_error(GetLastError()) \ ); \ } \ \ - if (0 == FileTimeToSystemTime(&system, &sys_system)) { \ - return uvwasi__translate_uv_error( \ - uv_translate_sys_error(GetLastError()) \ - ); \ - } \ - \ - if (0 == FileTimeToSystemTime(&user, &sys_user)) { \ - return uvwasi__translate_uv_error( \ - uv_translate_sys_error(GetLastError()) \ - ); \ - } \ - \ - (time) = (((uvwasi_timestamp_t)(sys_system.wHour * 3600) + \ - (sys_system.wMinute * 60) + sys_system.wSecond) * NANOS_PER_SEC) + \ - ((uvwasi_timestamp_t)(sys_system.wMilliseconds) * 1000000) + \ - (((uvwasi_timestamp_t)(sys_user.wHour * 3600) + \ - (sys_user.wMinute * 60) + sys_user.wSecond) * NANOS_PER_SEC) + \ - ((uvwasi_timestamp_t)(sys_user.wMilliseconds) * 1000000); \ + /* FILETIME times are in units of 100 nanoseconds */ \ + (time) = (((uvwasi_timestamp_t) \ + system.dwHighDateTime << 32 | system.dwLowDateTime) * 100 + \ + ((uvwasi_timestamp_t) \ + user.dwHighDateTime << 32 | user.dwLowDateTime) * 100); \ return UVWASI_ESUCCESS; \ } while (0)