Files
zig/lib/c/sys/mman.zig
Andrew Kelley 96bd268c8c zig libc: simplify implementation
- use symbol export helper
- move all declarations from common.zig into c.zig
- correct documentation
- delete dead code
2026-02-11 07:58:11 +01:00

63 lines
2.0 KiB
Zig

const builtin = @import("builtin");
const std = @import("std");
const symbol = @import("../../c.zig").symbol;
const errno = @import("../../c.zig").errno;
comptime {
if (builtin.target.isMuslLibC()) {
symbol(&madviseLinux, "madvise");
symbol(&madviseLinux, "__madvise");
symbol(&mincoreLinux, "mincore");
symbol(&mlockLinux, "mlock");
symbol(&mlockallLinux, "mlockall");
symbol(&mprotectLinux, "mprotect");
symbol(&mprotectLinux, "__mprotect");
symbol(&munlockLinux, "munlock");
symbol(&munlockallLinux, "munlockall");
symbol(&posix_madviseLinux, "posix_madvise");
}
}
fn madviseLinux(addr: *anyopaque, len: usize, advice: c_int) callconv(.c) c_int {
return errno(std.os.linux.madvise(@ptrCast(addr), len, @bitCast(advice)));
}
fn mincoreLinux(addr: *anyopaque, len: usize, vec: [*]u8) callconv(.c) c_int {
return errno(std.os.linux.mincore(@ptrCast(addr), len, vec));
}
fn mlockLinux(addr: *const anyopaque, len: usize) callconv(.c) c_int {
return errno(std.os.linux.mlock(@ptrCast(addr), len));
}
fn mlockallLinux(flags: c_int) callconv(.c) c_int {
return errno(std.os.linux.mlockall(@bitCast(flags)));
}
fn mprotectLinux(addr: *anyopaque, len: usize, prot: c_int) callconv(.c) c_int {
const page_size = std.heap.pageSize();
const start = std.mem.alignBackward(usize, @intFromPtr(addr), page_size);
const aligned_len = std.mem.alignForward(usize, len, page_size);
return errno(std.os.linux.mprotect(@ptrFromInt(start), aligned_len, @bitCast(prot)));
}
fn munlockLinux(addr: *const anyopaque, len: usize) callconv(.c) c_int {
return errno(std.os.linux.munlock(@ptrCast(addr), len));
}
fn munlockallLinux() callconv(.c) c_int {
return errno(std.os.linux.munlockall());
}
fn posix_madviseLinux(addr: *anyopaque, len: usize, advice: c_int) callconv(.c) c_int {
if (advice == std.os.linux.MADV.DONTNEED) return 0;
return @intCast(-@as(isize, @bitCast(std.os.linux.madvise(@ptrCast(addr), len, @bitCast(advice)))));
}