From 997812e8fb9146360aa5200f0adbcd4863183287 Mon Sep 17 00:00:00 2001 From: Luna Date: Wed, 13 Nov 2019 21:25:19 -0300 Subject: os: add memfd_create currently only linux is supported --- lib/std/os/linux.zig | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'lib/std/os/linux.zig') diff --git a/lib/std/os/linux.zig b/lib/std/os/linux.zig index d5bab64493..69e5b25f86 100644 --- a/lib/std/os/linux.zig +++ b/lib/std/os/linux.zig @@ -1110,6 +1110,10 @@ pub fn io_uring_register(fd: i32, opcode: u32, arg: ?*const c_void, nr_args: u32 return syscall4(SYS_io_uring_register, @bitCast(usize, @as(isize, fd)), opcode, @ptrToInt(arg), nr_args); } +pub fn memfd_create(name: [*:0]const u8, flags: usize) usize { + return syscall2(SYS_memfd_create, @ptrToInt(name), flags); +} + test "" { if (builtin.os == .linux) { _ = @import("linux/test.zig"); -- cgit v1.2.3 From f0cbf63e1ae38d9c13cb07a151567b4890287ae9 Mon Sep 17 00:00:00 2001 From: Luna Date: Tue, 31 Dec 2019 15:33:23 -0300 Subject: os: use system for memfd_create - os: update flags type for memfd_create --- lib/std/os.zig | 11 ++++------- lib/std/os/linux.zig | 2 +- 2 files changed, 5 insertions(+), 8 deletions(-) (limited to 'lib/std/os/linux.zig') diff --git a/lib/std/os.zig b/lib/std/os.zig index 37043f19bb..31212e9b8b 100644 --- a/lib/std/os.zig +++ b/lib/std/os.zig @@ -3282,12 +3282,9 @@ pub fn setsockopt(fd: fd_t, level: u32, optname: u32, opt: []const u8) SetSockOp } } -// TODO support for non-null terminated strings? -pub fn memfd_createC(name: [*:0]const u8, flags: usize) !fd_t { - if (builtin.os != .linux) @compileError("memfd_create() not implemented for this target"); - - const rc = linux.memfd_create(name, flags); - switch (linux.getErrno(rc)) { +pub fn memfd_createC(name: [*:0]const u8, flags: u32) !fd_t { + const rc = system.memfd_create(name, flags); + switch (errno(rc)) { 0 => return @intCast(fd_t, rc), EFAULT => unreachable, // name has invalid memory EINVAL => unreachable, // name/flags are faulty @@ -3309,7 +3306,7 @@ fn toMemFdPath(name: []const u8) ![MFD_MAX_NAME_LEN:0]u8 { return path_with_null; } -pub fn memfd_create(name: []const u8, flags: usize) !fd_t { +pub fn memfd_create(name: []const u8, flags: u32) !fd_t { const name_t = try toMemFdPath(name); return try memfd_createC(&name_t, flags); } diff --git a/lib/std/os/linux.zig b/lib/std/os/linux.zig index 69e5b25f86..b6030fe2fe 100644 --- a/lib/std/os/linux.zig +++ b/lib/std/os/linux.zig @@ -1110,7 +1110,7 @@ pub fn io_uring_register(fd: i32, opcode: u32, arg: ?*const c_void, nr_args: u32 return syscall4(SYS_io_uring_register, @bitCast(usize, @as(isize, fd)), opcode, @ptrToInt(arg), nr_args); } -pub fn memfd_create(name: [*:0]const u8, flags: usize) usize { +pub fn memfd_create(name: [*:0]const u8, flags: u32) usize { return syscall2(SYS_memfd_create, @ptrToInt(name), flags); } -- cgit v1.2.3