From 2deb07a001d2a3f23681a368a07544baf2673ccf Mon Sep 17 00:00:00 2001 From: Luna Date: Sun, 16 Aug 2020 14:30:09 -0300 Subject: [PATCH 1/3] rename signalfd4 to signalfd --- lib/std/os.zig | 2 +- lib/std/os/linux.zig | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/std/os.zig b/lib/std/os.zig index 123dfc974747cf3ea5316b1956f8cfa4f66c8914..082a09b2477081a89e829dfc2ddb8b99589690d8 100644 --- a/lib/std/os.zig +++ b/lib/std/os.zig @@ -5309,7 +5309,7 @@ pub fn ioctl_SIOCGIFINDEX(fd: fd_t, ifr: *ifreq) IoCtl_SIOCGIFINDEX_Error!void { } pub fn signalfd(fd: fd_t, mask: *const sigset_t, flags: i32) !fd_t { - const rc = system.signalfd4(fd, mask, flags); + const rc = system.signalfd(fd, mask, flags); switch (errno(rc)) { 0 => return @intCast(fd_t, rc), EBADF, EINVAL => unreachable, diff --git a/lib/std/os/linux.zig b/lib/std/os/linux.zig index d9f7dda03e51d2dd32d7c4ad3865fb45b60328c3..4bb1da9587c4e42f46628106e218c7bc36a4c259 100644 --- a/lib/std/os/linux.zig +++ b/lib/std/os/linux.zig @@ -1200,7 +1200,7 @@ pub fn ioctl(fd: fd_t, request: u32, arg: usize) usize { return syscall3(.ioctl, @bitCast(usize, @as(isize, fd)), request, arg); } -pub fn signalfd4(fd: fd_t, mask: *const sigset_t, flags: i32) usize { +pub fn signalfd(fd: fd_t, mask: *const sigset_t, flags: i32) usize { return syscall4( .signalfd4, @bitCast(usize, @as(isize, fd)), -- 2.54.0 From 293b07df12014cadf8b8b01b279856563523e257 Mon Sep 17 00:00:00 2001 From: Luna Date: Sun, 16 Aug 2020 14:30:17 -0300 Subject: [PATCH 2/3] add signalfd to std.c.linux --- lib/std/c/linux.zig | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/std/c/linux.zig b/lib/std/c/linux.zig index c00fc68bcadcd67b5d950f30b9c2c00da7a92dca..f37fce7a3e49f9ec98263dca4373095b9453f8d5 100644 --- a/lib/std/c/linux.zig +++ b/lib/std/c/linux.zig @@ -93,6 +93,8 @@ pub extern "c" fn sendfile( pub extern "c" fn copy_file_range(fd_in: fd_t, off_in: ?*i64, fd_out: fd_t, off_out: ?*i64, len: usize, flags: c_uint) isize; +pub extern "c" fn signalfd(fd: fd_t, mask: *const sigset_t, flags: i32) usize; + pub const pthread_attr_t = extern struct { __size: [56]u8, __align: c_long, -- 2.54.0 From ae2c88754df436d4b1d748405e6ddd4b8ee61774 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Mon, 17 Aug 2020 16:19:57 -0700 Subject: [PATCH 3/3] std: signalfd: fix the types of things; add test --- lib/std/c/linux.zig | 2 +- lib/std/os.zig | 2 +- lib/std/os/linux.zig | 10 ++-------- lib/std/os/test.zig | 6 ++++++ 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/lib/std/c/linux.zig b/lib/std/c/linux.zig index f37fce7a3e49f9ec98263dca4373095b9453f8d5..b9f29b211dd1998f12c118447c60b501f4815d72 100644 --- a/lib/std/c/linux.zig +++ b/lib/std/c/linux.zig @@ -93,7 +93,7 @@ pub extern "c" fn sendfile( pub extern "c" fn copy_file_range(fd_in: fd_t, off_in: ?*i64, fd_out: fd_t, off_out: ?*i64, len: usize, flags: c_uint) isize; -pub extern "c" fn signalfd(fd: fd_t, mask: *const sigset_t, flags: i32) usize; +pub extern "c" fn signalfd(fd: fd_t, mask: *const sigset_t, flags: c_uint) c_int; pub const pthread_attr_t = extern struct { __size: [56]u8, diff --git a/lib/std/os.zig b/lib/std/os.zig index 082a09b2477081a89e829dfc2ddb8b99589690d8..828f0561483e9bc5b4c1c5b63f82a2a00ff16a7a 100644 --- a/lib/std/os.zig +++ b/lib/std/os.zig @@ -5308,7 +5308,7 @@ pub fn ioctl_SIOCGIFINDEX(fd: fd_t, ifr: *ifreq) IoCtl_SIOCGIFINDEX_Error!void { } } -pub fn signalfd(fd: fd_t, mask: *const sigset_t, flags: i32) !fd_t { +pub fn signalfd(fd: fd_t, mask: *const sigset_t, flags: u32) !fd_t { const rc = system.signalfd(fd, mask, flags); switch (errno(rc)) { 0 => return @intCast(fd_t, rc), diff --git a/lib/std/os/linux.zig b/lib/std/os/linux.zig index 4bb1da9587c4e42f46628106e218c7bc36a4c259..7fe0ba00ae6c8f19c15176d478a9ce25f3076e9b 100644 --- a/lib/std/os/linux.zig +++ b/lib/std/os/linux.zig @@ -1200,14 +1200,8 @@ pub fn ioctl(fd: fd_t, request: u32, arg: usize) usize { return syscall3(.ioctl, @bitCast(usize, @as(isize, fd)), request, arg); } -pub fn signalfd(fd: fd_t, mask: *const sigset_t, flags: i32) usize { - return syscall4( - .signalfd4, - @bitCast(usize, @as(isize, fd)), - @ptrToInt(mask), - @bitCast(usize, @as(usize, NSIG / 8)), - @intCast(usize, flags), - ); +pub fn signalfd(fd: fd_t, mask: *const sigset_t, flags: u32) usize { + return syscall4(.signalfd4, @bitCast(usize, @as(isize, fd)), @ptrToInt(mask), NSIG / 8, flags); } pub fn copy_file_range(fd_in: fd_t, off_in: ?*i64, fd_out: fd_t, off_out: ?*i64, len: usize, flags: u32) usize { diff --git a/lib/std/os/test.zig b/lib/std/os/test.zig index b17ddfaf7e9fe670233d8ddb97996fb2e4072c05..dc8a89c688251e0575823e759bce345ab338d528 100644 --- a/lib/std/os/test.zig +++ b/lib/std/os/test.zig @@ -522,3 +522,9 @@ test "fcntl" { expect((flags & os.FD_CLOEXEC) != 0); } } + +test "signalfd" { + if (builtin.os.tag != .linux) + return error.SkipZigTest; + _ = std.os.signalfd; +} -- 2.54.0