authorgravatar for kike28.py@protonmail.chEnrique Miguel Mora Meza <kike28.py@protonmail.ch> 2025-01-26 21:49:25+04:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2025-01-26 18:49:25+01:00
log24965af2950941969681a1eb5e1be27390083ba8
tree003301b89048946463b466e702769288270d4850
parentdf9fdb1861fa4598c6fea48080522a5d44469024
signaturebadge-check Signed by PGP key B5690EEEBB952194

std.os.linux: Adding sigdelset (#22406)


2 files changed, 18 insertions(+), 0 deletions(-)

lib/std/os/linux.zig+8
...@@ -1759,6 +1759,14 @@ pub fn sigaddset(set: *sigset_t, sig: u6) void {...@@ -1759,6 +1759,14 @@ pub fn sigaddset(set: *sigset_t, sig: u6) void {
1759 (set.*)[@as(usize, @intCast(s)) / usize_bits] |= val;1759 (set.*)[@as(usize, @intCast(s)) / usize_bits] |= val;
1760}1760}
17611761
1762pub fn sigdelset(set: *sigset_t, sig: u6) void {
1763 const s = sig - 1;
1764 // shift in musl: s&8*sizeof *set->__bits-1
1765 const shift = @as(u5, @intCast(s & (usize_bits - 1)));
1766 const val = @as(u32, @intCast(1)) << shift;
1767 (set.*)[@as(usize, @intCast(s)) / usize_bits] ^= val;
1768}
1769
1762pub fn sigismember(set: *const sigset_t, sig: u6) bool {1770pub fn sigismember(set: *const sigset_t, sig: u6) bool {
1763 const s = sig - 1;1771 const s = sig - 1;
1764 return ((set.*)[@as(usize, @intCast(s)) / usize_bits] & (@as(usize, @intCast(1)) << @intCast(s & (usize_bits - 1)))) != 0;1772 return ((set.*)[@as(usize, @intCast(s)) / usize_bits] & (@as(usize, @intCast(1)) << @intCast(s & (usize_bits - 1)))) != 0;
lib/std/os/linux/test.zig+10
...@@ -140,6 +140,16 @@ test "sigset_t" {...@@ -140,6 +140,16 @@ test "sigset_t" {
140140
141 try expectEqual(linux.sigismember(&sigset, linux.SIG.USR1), true);141 try expectEqual(linux.sigismember(&sigset, linux.SIG.USR1), true);
142 try expectEqual(linux.sigismember(&sigset, linux.SIG.USR2), true);142 try expectEqual(linux.sigismember(&sigset, linux.SIG.USR2), true);
143
144 linux.sigdelset(&sigset, linux.SIG.USR1);
145
146 try expectEqual(linux.sigismember(&sigset, linux.SIG.USR1), false);
147 try expectEqual(linux.sigismember(&sigset, linux.SIG.USR2), true);
148
149 linux.sigdelset(&sigset, linux.SIG.USR2);
150
151 try expectEqual(linux.sigismember(&sigset, linux.SIG.USR1), false);
152 try expectEqual(linux.sigismember(&sigset, linux.SIG.USR2), false);
143}153}
144154
145test {155test {