diff options
Diffstat (limited to 'src/javascript/jsc/node/syscall.zig')
-rw-r--r-- | src/javascript/jsc/node/syscall.zig | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/javascript/jsc/node/syscall.zig b/src/javascript/jsc/node/syscall.zig index ac7d51d8b..3a9e3ddd4 100644 --- a/src/javascript/jsc/node/syscall.zig +++ b/src/javascript/jsc/node/syscall.zig @@ -486,21 +486,23 @@ fn mmap( return Maybe([]align(mem.page_size) u8){ .result = @ptrCast([*]align(mem.page_size) u8, @alignCast(mem.page_size, rc))[0..length] }; } -pub fn mmapFile(path: [:0]const u8, flags: u32) Maybe([]align(mem.page_size) u8) { +pub fn mmapFile(path: [:0]const u8, flags: u32, wanted_size: ?usize, offset: usize) Maybe([]align(mem.page_size) u8) { const fd = switch (open(path, os.O.RDWR, 0)) { .result => |fd| fd, .err => |err| return .{ .err = err }, }; - const size = switch (fstat(fd)) { + var size = std.math.sub(usize, @intCast(usize, switch (fstat(fd)) { .result => |result| result.size, .err => |err| { _ = close(fd); return .{ .err = err }; }, - }; + }), offset) catch 0; + + if (wanted_size) |size_| size = @minimum(size, size_); - const map = switch (mmap(null, @intCast(usize, size), os.PROT.READ | os.PROT.WRITE, flags, fd, 0)) { + const map = switch (mmap(null, size, os.PROT.READ | os.PROT.WRITE, flags, fd, offset)) { .result => |map| map, .err => |err| { |