aboutsummaryrefslogtreecommitdiff
path: root/lib/std/os.zig
diff options
context:
space:
mode:
authorluna <git@l4.pm>2020-07-22 18:26:27 -0300
committerGitHub <noreply@github.com>2020-07-22 17:26:27 -0400
commita6626802f9ee080616064aff0bc3f0f2709488c3 (patch)
treeaf9a73aa5d9468be58a204c75376e399bd9c3a3d /lib/std/os.zig
parent9505bb74cd0f087f4672d878bf7174273db8c3ae (diff)
downloadzig-a6626802f9ee080616064aff0bc3f0f2709488c3.tar.gz
zig-a6626802f9ee080616064aff0bc3f0f2709488c3.zip
Add signalfd support (#5322)
* add signalfd_siginfo to linux bits * Cast sigaddset's shift value to u5 * linux: add signalfd4 * os: add signalfd
Diffstat (limited to 'lib/std/os.zig')
-rw-r--r--lib/std/os.zig14
1 files changed, 14 insertions, 0 deletions
diff --git a/lib/std/os.zig b/lib/std/os.zig
index 3e05ac41e5..1665a2efa6 100644
--- a/lib/std/os.zig
+++ b/lib/std/os.zig
@@ -5133,3 +5133,17 @@ 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);
+ switch (errno(rc)) {
+ 0 => return @intCast(fd_t, rc),
+ EBADF, EINVAL => unreachable,
+ ENFILE => return error.SystemFdQuotaExceeded,
+ ENOMEM => return error.SystemResources,
+ EMFILE => return error.ProcessResources,
+ ENODEV => return error.InodeMountFail,
+ ENOSYS => return error.SystemOutdated,
+ else => |err| return std.os.unexpectedErrno(err),
+ }
+}