diff options
| author | luna <git@l4.pm> | 2020-07-22 18:26:27 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-07-22 17:26:27 -0400 |
| commit | a6626802f9ee080616064aff0bc3f0f2709488c3 (patch) | |
| tree | af9a73aa5d9468be58a204c75376e399bd9c3a3d /lib/std/os/linux.zig | |
| parent | 9505bb74cd0f087f4672d878bf7174273db8c3ae (diff) | |
| download | zig-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/linux.zig')
| -rw-r--r-- | lib/std/os/linux.zig | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/lib/std/os/linux.zig b/lib/std/os/linux.zig index 3b8df3d173..15d6e53c1e 100644 --- a/lib/std/os/linux.zig +++ b/lib/std/os/linux.zig @@ -811,7 +811,10 @@ pub fn sigaction(sig: u6, noalias act: *const Sigaction, noalias oact: ?*Sigacti pub fn sigaddset(set: *sigset_t, sig: u6) void { const s = sig - 1; - (set.*)[@intCast(usize, s) / usize.bit_count] |= @intCast(usize, 1) << (s & (usize.bit_count - 1)); + // shift in musl: s&8*sizeof *set->__bits-1 + const shift = @intCast(u5, s & (usize.bit_count - 1)); + const val = @intCast(u32, 1) << shift; + (set.*)[@intCast(usize, s) / usize.bit_count] |= val; } pub fn sigismember(set: *const sigset_t, sig: u6) bool { @@ -1197,6 +1200,16 @@ 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 { + return syscall4( + .signalfd4, + @bitCast(usize, @as(isize, fd)), + @ptrToInt(mask), + @bitCast(usize, @as(usize, NSIG / 8)), + @intCast(usize, flags), + ); +} + test "" { if (builtin.os.tag == .linux) { _ = @import("linux/test.zig"); |
