authorgravatar for liam@bumblebee.net.nzMovingtoMars <liam@bumblebee.net.nz> 2016-01-28 13:18:29+13:00
committergravatar for liam@bumblebee.net.nzMovingtoMars <liam@bumblebee.net.nz> 2016-01-28 13:18:29+13:00
log04b721d53530c1de825f7d1df93f2e23916e092d
tree42a9058685f1a5eadc87ee588f7994c33c9dbc64
parent1a913f6bf2ac33426f889900b75afa471cc4cee5

malloc fails on proper errors


1 files changed, 21 insertions(+), 5 deletions(-)

std/mem.zig+21-5
......@@ -1,5 +1,6 @@
11import "syscall.zig";
22import "std.zig";
3import "errno.zig";
34
45pub fn malloc(bytes: isize) -> ?&u8 {
56 if (bytes > 4096) {
......@@ -7,13 +8,28 @@ pub fn malloc(bytes: isize) -> ?&u8 {
78 return null;
89 }
910
10 const result = mmap(0, 4096, MMAP_PROT_READ|MMAP_PROT_WRITE, MMAP_MAP_ANON|MMAP_MAP_SHARED, -1, 0);
11 const result = mmap(isize(0), 4096, MMAP_PROT_READ|MMAP_PROT_WRITE, MMAP_MAP_ANON|MMAP_MAP_SHARED, -1, 0);
1112
12 if (result == -1) {
13 return null;
14 }
13 const failed: bool = switch (-result) {
14 0 => true,
15 EINVAL => true,
16 EACCES => true,
17 EAGAIN => true,
18 EBADF => true,
19 EMFILE => true,
20 ENODEV => true,
21 ENOMEM => true,
22 EOPNOTSUPP => true,
23 ENXIO => true,
24 EOVERFLOW => true,
25 else => false,
26 };
1527
16 (&u8)(result)
28 if (failed) {
29 null
30 } else {
31 (&u8)(result)
32 }
1733}
1834
1935pub fn free(ptr: &u8) {