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

This commit is contained in:
Enrique Miguel Mora Meza
2025-01-26 21:49:25 +04:00
committed by GitHub
parent df9fdb1861
commit 24965af295
2 changed files with 18 additions and 0 deletions

View File

@@ -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;

View File

@@ -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 {