std.os.linux: Adding sigdelset (#22406)
This commit is contained in:
committed by
GitHub
parent
df9fdb1861
commit
24965af295
@@ -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;
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user