authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-05-13 09:53:30-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-05-13 09:54:56-07:00
log5d2f86116fe6c43d772e444d4519c64f33f9969d
tree12c59cf21becaad31121fdc23531740c40a254b7
parent8e3ab28be95de4faca64d5abab21f1948f71510b

std: fix linux.get_errno


2 files changed, 7 insertions(+), 3 deletions(-)

std/linux.zig+1-1
...@@ -222,7 +222,7 @@ pub const AF_MAX = PF_MAX;...@@ -222,7 +222,7 @@ pub const AF_MAX = PF_MAX;
222222
223/// Get the errno from a syscall return value, or 0 for no error.223/// Get the errno from a syscall return value, or 0 for no error.
224pub fn get_errno(r: isize) -> isize {224pub fn get_errno(r: isize) -> isize {
225 if (r > -4096) -r else 0225 if (r > -4096 && r < 0) -r else 0
226}226}
227227
228pub fn mmap(address: ?&u8, length: isize, prot: isize, flags: isize, fd: isize, offset: isize) -> isize {228pub fn mmap(address: ?&u8, length: isize, prot: isize, flags: isize, fd: isize, offset: isize) -> isize {
std/net.zig+6-2
...@@ -7,8 +7,10 @@ pub error Unexpected;...@@ -7,8 +7,10 @@ pub error Unexpected;
7pub error Io;7pub error Io;
8pub error TimedOut;8pub error TimedOut;
9pub error ConnectionReset;9pub error ConnectionReset;
10pub error ConnectionRefused;
10pub error NoMem;11pub error NoMem;
11pub error NotSocket;12pub error NotSocket;
13pub error BadFd;
1214
13struct Connection {15struct Connection {
14 socket_fd: i32,16 socket_fd: i32,
...@@ -27,16 +29,18 @@ struct Connection {...@@ -27,16 +29,18 @@ struct Connection {
27 }29 }
28 }30 }
2931
30 pub fn recv(c: Connection, buf: []u8) -> %isize {32 pub fn recv(c: Connection, buf: []u8) -> %[]u8 {
31 const recv_ret = linux.recvfrom(c.socket_fd, buf.ptr, buf.len, 0, null, null);33 const recv_ret = linux.recvfrom(c.socket_fd, buf.ptr, buf.len, 0, null, null);
32 const recv_err = linux.get_errno(recv_ret);34 const recv_err = linux.get_errno(recv_ret);
33 switch (recv_err) {35 switch (recv_err) {
34 0 => return recv_ret,36 0 => return buf[0...recv_ret],
35 errno.EINVAL => unreachable{},37 errno.EINVAL => unreachable{},
36 errno.EFAULT => unreachable{},38 errno.EFAULT => unreachable{},
37 errno.ENOTSOCK => return error.NotSocket,39 errno.ENOTSOCK => return error.NotSocket,
38 errno.EINTR => return error.SigInterrupt,40 errno.EINTR => return error.SigInterrupt,
39 errno.ENOMEM => return error.NoMem,41 errno.ENOMEM => return error.NoMem,
42 errno.ECONNREFUSED => return error.ConnectionRefused,
43 errno.EBADF => return error.BadFd,
40 // TODO more error values44 // TODO more error values
41 else => return error.Unexpected,45 else => return error.Unexpected,
42 }46 }