1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
// SPDX-License-Identifier: MPL-2.0
// (c) Hare authors <https://harelang.org>
// Allocates a segment.
fn segmalloc(n: size) nullable *opaque = {
return match (mmap(null, n, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANON, -1, 0)) {
case let err: errno =>
assert(err == ENOMEM: errno);
yield null;
case let p: *opaque =>
yield p;
};
};
// Frees a segment allocated with segmalloc.
fn segfree(p: *opaque, s: size) void = {
match (munmap(p, s)) {
case let err: errno =>
abort("munmap failed");
case void => void;
};
};
|