| ... | @@ -1,5 +1,6 @@ | ... | @@ -1,5 +1,6 @@ |
| 1 | import "syscall.zig"; | 1 | import "syscall.zig"; |
| 2 | import "std.zig"; | 2 | import "std.zig"; |
| | 3 | import "errno.zig"; |
| 3 | | 4 | |
| 4 | pub fn malloc(bytes: isize) -> ?&u8 { | 5 | pub fn malloc(bytes: isize) -> ?&u8 { |
| 5 | if (bytes > 4096) { | 6 | if (bytes > 4096) { |
| ... | @@ -7,13 +8,28 @@ pub fn malloc(bytes: isize) -> ?&u8 { | ... | @@ -7,13 +8,28 @@ pub fn malloc(bytes: isize) -> ?&u8 { |
| 7 | return null; | 8 | return null; |
| 8 | } | 9 | } |
| 9 | | 10 | |
| 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); |
| 11 | | 12 | |
| 12 | if (result == -1) { | 13 | const failed: bool = switch (-result) { |
| 13 | return null; | 14 | 0 => true, |
| 14 | } | 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 | }; |
| 15 | | 27 | |
| 16 | (&u8)(result) | 28 | if (failed) { |
| | 29 | null |
| | 30 | } else { |
| | 31 | (&u8)(result) |
| | 32 | } |
| 17 | } | 33 | } |
| 18 | | 34 | |
| 19 | pub fn free(ptr: &u8) { | 35 | pub fn free(ptr: &u8) { |