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