mirror of
https://codeberg.org/ziglang/zig.git
synced 2026-03-09 18:16:38 +01:00
59 lines
2.7 KiB
Zig
59 lines
2.7 KiB
Zig
const std = @import("std");
|
|
const common = @import("../common.zig");
|
|
const builtin = @import("builtin");
|
|
|
|
comptime {
|
|
if (builtin.target.isMuslLibC()) {
|
|
@export(&madviseLinux, .{ .name = "madvise", .linkage = common.linkage, .visibility = common.visibility });
|
|
@export(&madviseLinux, .{ .name = "__madvise", .linkage = common.linkage, .visibility = common.visibility });
|
|
|
|
@export(&mincoreLinux, .{ .name = "mincore", .linkage = common.linkage, .visibility = common.visibility });
|
|
|
|
@export(&mlockLinux, .{ .name = "mlock", .linkage = common.linkage, .visibility = common.visibility });
|
|
@export(&mlockallLinux, .{ .name = "mlockall", .linkage = common.linkage, .visibility = common.visibility });
|
|
|
|
@export(&mprotectLinux, .{ .name = "mprotect", .linkage = common.linkage, .visibility = common.visibility });
|
|
@export(&mprotectLinux, .{ .name = "__mprotect", .linkage = common.linkage, .visibility = common.visibility });
|
|
|
|
@export(&munlockLinux, .{ .name = "munlock", .linkage = common.linkage, .visibility = common.visibility });
|
|
@export(&munlockallLinux, .{ .name = "munlockall", .linkage = common.linkage, .visibility = common.visibility });
|
|
|
|
@export(&posix_madviseLinux, .{ .name = "posix_madvise", .linkage = common.linkage, .visibility = common.visibility });
|
|
}
|
|
}
|
|
|
|
fn madviseLinux(addr: *anyopaque, len: usize, advice: c_int) callconv(.c) c_int {
|
|
return common.errno(std.os.linux.madvise(@ptrCast(addr), len, @bitCast(advice)));
|
|
}
|
|
|
|
fn mincoreLinux(addr: *anyopaque, len: usize, vec: [*]u8) callconv(.c) c_int {
|
|
return common.errno(std.os.linux.mincore(@ptrCast(addr), len, vec));
|
|
}
|
|
|
|
fn mlockLinux(addr: *const anyopaque, len: usize) callconv(.c) c_int {
|
|
return common.errno(std.os.linux.mlock(@ptrCast(addr), len));
|
|
}
|
|
|
|
fn mlockallLinux(flags: c_int) callconv(.c) c_int {
|
|
return common.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 common.errno(std.os.linux.mprotect(@ptrFromInt(start), aligned_len, @bitCast(prot)));
|
|
}
|
|
|
|
fn munlockLinux(addr: *const anyopaque, len: usize) callconv(.c) c_int {
|
|
return common.errno(std.os.linux.munlock(@ptrCast(addr), len));
|
|
}
|
|
|
|
fn munlockallLinux() callconv(.c) c_int {
|
|
return common.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)))));
|
|
}
|