aboutsummaryrefslogtreecommitdiff
path: root/src/javascript/jsc/api
diff options
context:
space:
mode:
authorGravatar evan <github@evan.lol> 2022-04-14 05:08:56 +0300
committerGravatar GitHub <noreply@github.com> 2022-04-13 19:08:56 -0700
commit95aa76b9fae3747a72c2db460d42c38b7faaee2a (patch)
tree66bf3b12d432ddcfdd0e0fe6eb035aec80ab1194 /src/javascript/jsc/api
parent95101870e465c986b867fcf65b1f40b20266b9ab (diff)
downloadbun-95aa76b9fae3747a72c2db460d42c38b7faaee2a.tar.gz
bun-95aa76b9fae3747a72c2db460d42c38b7faaee2a.tar.zst
bun-95aa76b9fae3747a72c2db460d42c38b7faaee2a.zip
expose mmap size and offset option (#141)
* expose mmap size and offset option * fix panics
Diffstat (limited to 'src/javascript/jsc/api')
-rw-r--r--src/javascript/jsc/api/bun.zig13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/javascript/jsc/api/bun.zig b/src/javascript/jsc/api/bun.zig
index 660f2aba8..de85d6c8f 100644
--- a/src/javascript/jsc/api/bun.zig
+++ b/src/javascript/jsc/api/bun.zig
@@ -1619,18 +1619,29 @@ pub fn mmapFile(
const file_flags: u32 = if (@hasDecl(std.os.MAP, "FILE")) std.os.MAP.FILE else 0;
// Conforming applications must specify either MAP_PRIVATE or MAP_SHARED.
+ var offset: usize = 0;
var flags = file_flags;
+ var map_size: ?usize = null;
if (args.nextEat()) |opts| {
const sync = opts.get(ctx.ptr(), "sync") orelse JSC.JSValue.jsBoolean(false);
const shared = opts.get(ctx.ptr(), "shared") orelse JSC.JSValue.jsBoolean(true);
flags |= @as(u32, if (sync.toBoolean()) sync_flags else 0);
flags |= @as(u32, if (shared.toBoolean()) std.os.MAP.SHARED else std.os.MAP.PRIVATE);
+
+ if (opts.get(ctx.ptr(), "size")) |value| {
+ map_size = @intCast(usize, value.toInt64());
+ }
+
+ if (opts.get(ctx.ptr(), "offset")) |value| {
+ offset = @intCast(usize, value.toInt64());
+ offset = std.mem.alignBackwardAnyAlign(offset, std.mem.page_size);
+ }
} else {
flags |= std.os.MAP.SHARED;
}
- const map = switch (JSC.Node.Syscall.mmapFile(buf_z, flags)) {
+ const map = switch (JSC.Node.Syscall.mmapFile(buf_z, flags, map_size, offset)) {
.result => |map| map,
.err => |err| {