aboutsummaryrefslogtreecommitdiff
path: root/src/rt/rust_builtin.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/rt/rust_builtin.cpp')
-rw-r--r--src/rt/rust_builtin.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/rt/rust_builtin.cpp b/src/rt/rust_builtin.cpp
index a2323898..297b9df7 100644
--- a/src/rt/rust_builtin.cpp
+++ b/src/rt/rust_builtin.cpp
@@ -1,6 +1,10 @@
#include "rust_internal.h"
+#if !defined(__WIN32__)
+#include <sys/time.h>
+#endif
+
/* Native builtins. */
extern "C" CDECL rust_str*
@@ -508,6 +512,31 @@ rust_ptr_eq(rust_task *task, type_desc *t, rust_box *a, rust_box *b) {
return a == b;
}
+#if defined(__WIN32__)
+extern "C" CDECL void
+get_time(rust_task *task, uint32_t *sec, uint32_t *usec) {
+ SYSTEMTIME systemTime;
+ FILETIME fileTime;
+ GetSystemTime(&systemTime);
+ if (!SystemTimeToFileTime(&systemTime, &fileTime)) {
+ task->fail(1);
+ return;
+ }
+
+ // FIXME: This is probably completely wrong.
+ *sec = fileTime.dwHighDateTime;
+ *usec = fileTime.dwLowDateTime;
+}
+#else
+extern "C" CDECL void
+get_time(rust_task *task, uint32_t *sec, uint32_t *usec) {
+ struct timeval tv;
+ gettimeofday(&tv, NULL);
+ *sec = tv.tv_sec;
+ *usec = tv.tv_usec;
+}
+#endif
+
//
// Local Variables:
// mode: C++