diff options
Diffstat (limited to 'std')
| -rw-r--r-- | std/mem.zig | 22 | ||||
| -rw-r--r-- | std/syscall.zig | 10 |
2 files changed, 6 insertions, 26 deletions
diff --git a/std/mem.zig b/std/mem.zig deleted file mode 100644 index a10a6c9569..0000000000 --- a/std/mem.zig +++ /dev/null @@ -1,22 +0,0 @@ -import "syscall.zig"; -import "std.zig"; -import "errno.zig"; - -pub fn malloc(bytes: isize) -> ?&u8 { - if (bytes > 4096) { - %%stderr.printf("TODO alloc sizes > 4096B\n"); - return null; - } - - const result = mmap(isize(0), 4096, MMAP_PROT_READ|MMAP_PROT_WRITE, MMAP_MAP_ANON|MMAP_MAP_SHARED, -1, 0); - - if (-4096 < result && result <= 0) { - null - } else { - (&u8)(result) - } -} - -pub fn free(ptr: &u8) { - munmap(isize(ptr), 4096); -} diff --git a/std/syscall.zig b/std/syscall.zig index 669fb2b8c0..00a44832e3 100644 --- a/std/syscall.zig +++ b/std/syscall.zig @@ -250,12 +250,14 @@ fn i386_syscall6(number: isize, arg1: isize, arg2: isize, arg3: isize, arg4: isi [arg6] "{ebp}" (arg6)) } -pub fn mmap(address: isize, length: isize, prot: isize, flags: isize, fd: isize, offset: isize) -> isize { - syscall6(SYS_mmap, address, length, prot, flags, fd, offset) +pub fn mmap(address: ?&u8, length: isize, prot: isize, flags: isize, fd: isize, offset: isize) -> isize { + // TODO ability to cast maybe pointer to isize + const addr = if (const unwrapped ?= address) isize(unwrapped) else 0; + syscall6(SYS_mmap, addr, length, prot, flags, fd, offset) } -pub fn munmap(address: isize, length: isize) -> isize { - syscall2(SYS_munmap, address, length) +pub fn munmap(address: &u8, length: isize) -> isize { + syscall2(SYS_munmap, isize(address), length) } pub fn read(fd: isize, buf: &u8, count: isize) -> isize { |
