zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 04b721d53530c1de825f7d1df93f2e23916e092d (tree)
parent 1a913f6bf2ac33426f889900b75afa471cc4cee5
Author: MovingtoMars <liam@bumblebee.net.nz>
Date:   Thu, 28 Jan 2016 13:18:29 +1300

malloc fails on proper errors

Diffstat:
Mstd/mem.zig | 26+++++++++++++++++++++-----
1 file changed, 21 insertions(+), 5 deletions(-)

diff --git a/std/mem.zig b/std/mem.zig @@ -1,5 +1,6 @@ import "syscall.zig"; import "std.zig"; +import "errno.zig"; pub fn malloc(bytes: isize) -> ?&u8 { if (bytes > 4096) { @@ -7,13 +8,28 @@ pub fn malloc(bytes: isize) -> ?&u8 { return null; } - const result = mmap(0, 4096, MMAP_PROT_READ|MMAP_PROT_WRITE, MMAP_MAP_ANON|MMAP_MAP_SHARED, -1, 0); + const result = mmap(isize(0), 4096, MMAP_PROT_READ|MMAP_PROT_WRITE, MMAP_MAP_ANON|MMAP_MAP_SHARED, -1, 0); - if (result == -1) { - return null; - } + const failed: bool = switch (-result) { + 0 => true, + EINVAL => true, + EACCES => true, + EAGAIN => true, + EBADF => true, + EMFILE => true, + ENODEV => true, + ENOMEM => true, + EOPNOTSUPP => true, + ENXIO => true, + EOVERFLOW => true, + else => false, + }; - (&u8)(result) + if (failed) { + null + } else { + (&u8)(result) + } } pub fn free(ptr: &u8) {