aboutsummaryrefslogtreecommitdiff
path: root/std/os
diff options
context:
space:
mode:
Diffstat (limited to 'std/os')
-rw-r--r--std/os/darwin.zig12
-rw-r--r--std/os/time.zig18
2 files changed, 19 insertions, 11 deletions
diff --git a/std/os/darwin.zig b/std/os/darwin.zig
index 3cf08199b2..0f9c0be28b 100644
--- a/std/os/darwin.zig
+++ b/std/os/darwin.zig
@@ -251,8 +251,8 @@ pub fn readlink(noalias path: &const u8, noalias buf_ptr: &u8, buf_len: usize) u
return errnoWrap(c.readlink(path, buf_ptr, buf_len));
}
-pub fn gettimeofday(&timeval, ?&timezone) usize {
- return errnoWrap(c.gettimeofday(timeval, timezone));
+pub fn gettimeofday(tv: ?&timeval, tz: ?&timezone) usize {
+ return errnoWrap(c.gettimeofday(tv, tz));
}
pub fn nanosleep(req: &const timespec, rem: ?&timespec) usize {
@@ -322,3 +322,11 @@ pub fn sigaddset(set: &sigset_t, signo: u5) void {
fn errnoWrap(value: isize) usize {
return @bitCast(usize, if (value == -1) -isize(*c._errno()) else value);
}
+
+
+pub const timezone = c.timezone;
+pub const timeval = c.timeval;
+pub const mach_timebase_info_data = c.mach_timebase_info_data;
+
+pub const mach_absolute_time = c.mach_absolute_time;
+pub const mach_timebase_info = c.mach_timebase_info; \ No newline at end of file
diff --git a/std/os/time.zig b/std/os/time.zig
index f2e1307057..e6b614d433 100644
--- a/std/os/time.zig
+++ b/std/os/time.zig
@@ -79,8 +79,9 @@ fn miliTimestampDarwin() u64 {
var tv: darwin.timeval = undefined;
var err = darwin.gettimeofday(&tv, null);
debug.assert(err == 0);
- return tv.tv_sec * ms_per_s + ts.tv_usec
- * (us_per_s / ms_per_s);
+ const sec_ms = tv.tv_sec * ms_per_s;
+ const usec_ms = @divFloor(tv.tv_usec, (us_per_s / ms_per_s));
+ return u64(sec_ms) + u64(usec_ms);
}
fn miliTimestampPosix() u64 {
@@ -136,7 +137,8 @@ pub const Timer = struct {
// impossible here barring cosmic rays or other such occurances of
// incredibly bad luck.
//On Darwin: This cannot fail, as far as I am able to tell.
- pub fn start() !Timer {
+ const TimerError = error{TimerUnsupported};
+ pub fn start() TimerError!Timer {
var self: Timer = undefined;
switch(builtin.os) {
@@ -163,9 +165,9 @@ pub const Timer = struct {
self.start_time = u64(ts.tv_sec * ns_per_s + ts.tv_nsec);
},
Os.macosx, Os.ios => {
- darwin.c.mach_timebase_info(&self.frequency);
- self.resolution = @divFloor(self.frequency.numer, self.denom);
- self.start_time = darwin.c.mach_absolute_time();
+ darwin.mach_timebase_info(&self.frequency);
+ self.resolution = @divFloor(self.frequency.numer, self.frequency.denom);
+ self.start_time = darwin.mach_absolute_time();
},
else => @compileError("Unsupported OS"),
}
@@ -213,9 +215,7 @@ pub const Timer = struct {
}
fn clockDarwin() u64 {
- var result: u64 = undefined;
- darwin.c.mach_absolute_time(&result);
- return result;
+ return darwin.mach_absolute_time();
}
fn clockLinux() u64 {