Commit 24965af295

Enrique Miguel Mora Meza <kike28.py@protonmail.ch>
2025-01-26 18:49:25
std.os.linux: Adding sigdelset (#22406)
1 parent df9fdb1
Changed files (2)
lib
std
lib/std/os/linux/test.zig
@@ -140,6 +140,16 @@ test "sigset_t" {
 
     try expectEqual(linux.sigismember(&sigset, linux.SIG.USR1), true);
     try expectEqual(linux.sigismember(&sigset, linux.SIG.USR2), true);
+
+    linux.sigdelset(&sigset, linux.SIG.USR1);
+
+    try expectEqual(linux.sigismember(&sigset, linux.SIG.USR1), false);
+    try expectEqual(linux.sigismember(&sigset, linux.SIG.USR2), true);
+
+    linux.sigdelset(&sigset, linux.SIG.USR2);
+
+    try expectEqual(linux.sigismember(&sigset, linux.SIG.USR1), false);
+    try expectEqual(linux.sigismember(&sigset, linux.SIG.USR2), false);
 }
 
 test {
lib/std/os/linux.zig
@@ -1759,6 +1759,14 @@ pub fn sigaddset(set: *sigset_t, sig: u6) void {
     (set.*)[@as(usize, @intCast(s)) / usize_bits] |= val;
 }
 
+pub fn sigdelset(set: *sigset_t, sig: u6) void {
+    const s = sig - 1;
+    // shift in musl: s&8*sizeof *set->__bits-1
+    const shift = @as(u5, @intCast(s & (usize_bits - 1)));
+    const val = @as(u32, @intCast(1)) << shift;
+    (set.*)[@as(usize, @intCast(s)) / usize_bits] ^= val;
+}
+
 pub fn sigismember(set: *const sigset_t, sig: u6) bool {
     const s = sig - 1;
     return ((set.*)[@as(usize, @intCast(s)) / usize_bits] & (@as(usize, @intCast(1)) << @intCast(s & (usize_bits - 1)))) != 0;