zig/std/mem.zig

39 lines
866 B
Zig
Raw Normal View History

2016-01-28 07:39:02 +08:00
import "syscall.zig";
import "std.zig";
2016-01-28 08:18:29 +08:00
import "errno.zig";
2016-01-28 07:39:02 +08:00
pub fn malloc(bytes: isize) -> ?&u8 {
if (bytes > 4096) {
%%stderr.printf("TODO alloc sizes > 4096B\n");
return null;
}
2016-01-28 08:18:29 +08:00
const result = mmap(isize(0), 4096, MMAP_PROT_READ|MMAP_PROT_WRITE, MMAP_MAP_ANON|MMAP_MAP_SHARED, -1, 0);
2016-01-28 07:39:02 +08:00
2016-01-28 08:18:29 +08:00
const failed: bool = switch (-result) {
0 => true,
2016-01-28 08:45:35 +08:00
-1 => true,
2016-01-28 08:18:29 +08:00
EINVAL => true,
EACCES => true,
EAGAIN => true,
EBADF => true,
EMFILE => true,
ENODEV => true,
ENOMEM => true,
EOPNOTSUPP => true,
ENXIO => true,
EOVERFLOW => true,
else => false,
};
2016-01-28 07:39:02 +08:00
2016-01-28 08:18:29 +08:00
if (failed) {
null
} else {
(&u8)(result)
}
2016-01-28 07:39:02 +08:00
}
pub fn free(ptr: &u8) {
munmap(isize(ptr), 4096);
}