about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2013-11-11 12:06:25 -0800
committerbors <bors@rust-lang.org>2013-11-11 12:06:25 -0800
commit23746ae9904b8b1a08d4dde46f3a9b3acb8d9868 (patch)
treea9d9a6d55668e1d5ebea7f84b27f767c529d2f89
parent0966ec01dcb0ff90e6d483706820794ef8e16c2e (diff)
parent36afd606091a708e9a5676c7fb2e4cdc47b9abfd (diff)
downloadrust-23746ae9904b8b1a08d4dde46f3a9b3acb8d9868.tar.gz
rust-23746ae9904b8b1a08d4dde46f3a9b3acb8d9868.zip
auto merge of #10403 : poiru/rust/issue-2675, r=alexcrichton
Closes #2675.
-rw-r--r--src/rt/rust_builtin.cpp20
1 files changed, 11 insertions, 9 deletions
diff --git a/src/rt/rust_builtin.cpp b/src/rt/rust_builtin.cpp
index b9c3851cc63..b8e808863c0 100644
--- a/src/rt/rust_builtin.cpp
+++ b/src/rt/rust_builtin.cpp
@@ -203,7 +203,7 @@ get_time(int64_t *sec, int32_t *nsec) {
 }
 #endif
 
-const uint64_t ns_per_s = 1000000000LL;
+const int64_t ns_per_s = 1000000000LL;
 
 extern "C" CDECL void
 precise_time_ns(uint64_t *ns) {
@@ -217,18 +217,20 @@ precise_time_ns(uint64_t *ns) {
     uint64_t time_nano = time * (info.numer / info.denom);
     *ns = time_nano;
 #elif __WIN32__
-    uint64_t ticks_per_s;
-    QueryPerformanceFrequency((LARGE_INTEGER *)&ticks_per_s);
-    if (ticks_per_s == 0LL) {
-        ticks_per_s = 1LL;
+    LARGE_INTEGER ticks_per_s;
+    BOOL query_result = QueryPerformanceFrequency(&ticks_per_s);
+    assert(query_result);
+    if (ticks_per_s.QuadPart == 0LL) {
+        ticks_per_s.QuadPart = 1LL;
     }
-    uint64_t ticks;
-    QueryPerformanceCounter((LARGE_INTEGER *)&ticks);
-    *ns = ((ticks * ns_per_s) / ticks_per_s);
+    LARGE_INTEGER ticks;
+    query_result = QueryPerformanceCounter(&ticks);
+    assert(query_result);
+    *ns = (uint64_t)((ticks.QuadPart * ns_per_s) / ticks_per_s.QuadPart);
 #else
     timespec ts;
     clock_gettime(CLOCK_MONOTONIC, &ts);
-    *ns = (ts.tv_sec * ns_per_s + ts.tv_nsec);
+    *ns = (uint64_t)(ts.tv_sec * ns_per_s + ts.tv_nsec);
 #endif
 }