aboutsummaryrefslogtreecommitdiff
path: root/std/os.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2019-05-27 14:12:50 -0400
committerAndrew Kelley <andrew@ziglang.org>2019-05-27 14:12:50 -0400
commit06435535d3e40e4676e98009fad136f98fffbf2e (patch)
treea72055c4cce2869fa81f12d621560d6bec436f62 /std/os.zig
parentf1610f6c1ddbb5c2b42d2ecac433b8eff11d5a3a (diff)
downloadzig-06435535d3e40e4676e98009fad136f98fffbf2e.tar.gz
zig-06435535d3e40e4676e98009fad136f98fffbf2e.zip
fixes for darwin
Diffstat (limited to 'std/os.zig')
-rw-r--r--std/os.zig33
1 files changed, 23 insertions, 10 deletions
diff --git a/std/os.zig b/std/os.zig
index 35105ed9f8..3c18498a64 100644
--- a/std/os.zig
+++ b/std/os.zig
@@ -297,8 +297,9 @@ pub fn preadv(fd: fd_t, iov: []const iovec, offset: u64) ReadError!usize {
const err = darwin.getErrno(rc);
switch (err) {
0 => {
- off += rc;
- inner_off += rc;
+ const amt_read = @bitCast(usize, rc);
+ off += amt_read;
+ inner_off += amt_read;
if (inner_off == v.iov_len) {
iov_i += 1;
inner_off = 0;
@@ -421,8 +422,9 @@ pub fn pwritev(fd: fd_t, iov: []const iovec_const, offset: u64) WriteError!void
const err = darwin.getErrno(rc);
switch (err) {
0 => {
- off += rc;
- inner_off += rc;
+ const amt_written = @bitCast(usize, rc);
+ off += amt_written;
+ inner_off += amt_written;
if (inner_off == v.iov_len) {
iov_i += 1;
inner_off = 0;
@@ -1205,8 +1207,8 @@ pub fn isatty(handle: fd_t) bool {
@compileError("TODO implement std.os.isatty for WASI");
}
if (linux.is_the_target) {
- var wsz: system.winsize = undefined;
- return system.syscall3(system.SYS_ioctl, @bitCast(usize, isize(handle)), TIOCGWINSZ, @ptrToInt(&wsz)) == 0;
+ var wsz: linux.winsize = undefined;
+ return linux.syscall3(linux.SYS_ioctl, @bitCast(usize, isize(handle)), linux.TIOCGWINSZ, @ptrToInt(&wsz)) == 0;
}
unreachable;
}
@@ -1778,6 +1780,10 @@ pub const KEventError = error{
/// The specified process to attach to does not exist.
ProcessNotFound,
+
+ /// changelist or eventlist had too many items on it.
+ /// TODO remove this possibility
+ Overflow,
};
pub fn kevent(
@@ -1787,9 +1793,16 @@ pub fn kevent(
timeout: ?*const timespec,
) KEventError!usize {
while (true) {
- const rc = system.kevent(kq, changelist, eventlist, timeout);
+ const rc = system.kevent(
+ kq,
+ changelist.ptr,
+ try math.cast(c_int, changelist.len),
+ eventlist.ptr,
+ try math.cast(c_int, eventlist.len),
+ timeout,
+ );
switch (errno(rc)) {
- 0 => return rc,
+ 0 => return @intCast(usize, rc),
EACCES => return error.AccessDenied,
EFAULT => unreachable,
EBADF => unreachable, // Always a race condition.
@@ -2028,7 +2041,7 @@ pub const PipeError = error{
/// Creates a unidirectional data channel that can be used for interprocess communication.
pub fn pipe() PipeError![2]fd_t {
- var fds: [2]i32 = undefined;
+ var fds: [2]fd_t = undefined;
switch (errno(system.pipe(&fds))) {
0 => return fds,
EINVAL => unreachable, // Invalid parameters to pipe()
@@ -2040,7 +2053,7 @@ pub fn pipe() PipeError![2]fd_t {
}
pub fn pipe2(flags: u32) PipeError![2]fd_t {
- var fds: [2]i32 = undefined;
+ var fds: [2]fd_t = undefined;
switch (errno(system.pipe2(&fds, flags))) {
0 => return fds,
EINVAL => unreachable, // Invalid flags