diff options
| author | Alex Rønne Petersen <alex@alexrp.com> | 2025-05-01 21:29:23 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-05-01 21:29:23 +0200 |
| commit | ad9cb401124e4b2d59e49bed2736aad7813e4f1d (patch) | |
| tree | 7bafd4a5dac886e67bb8f63ecfa22ae3bb2084c1 /lib/std/os/linux/test.zig | |
| parent | 971d19a3b2ca97b9acd00d74556a57a335898ed8 (diff) | |
| parent | a55ecd7532e7ae015afe5cb5bc16b89376a4bf56 (diff) | |
| download | zig-ad9cb401124e4b2d59e49bed2736aad7813e4f1d.tar.gz zig-ad9cb401124e4b2d59e49bed2736aad7813e4f1d.zip | |
Merge pull request #23601 from rootbeer/sig-split
Split glibc and linux sigset_t ABIs and the accessor functions
Diffstat (limited to 'lib/std/os/linux/test.zig')
| -rw-r--r-- | lib/std/os/linux/test.zig | 49 |
1 files changed, 40 insertions, 9 deletions
diff --git a/lib/std/os/linux/test.zig b/lib/std/os/linux/test.zig index fa6f822329..7f5deff480 100644 --- a/lib/std/os/linux/test.zig +++ b/lib/std/os/linux/test.zig @@ -126,7 +126,9 @@ test "fadvise" { } test "sigset_t" { - var sigset = linux.empty_sigset; + std.debug.assert(@sizeOf(linux.sigset_t) == (linux.NSIG / 8)); + + var sigset = linux.sigemptyset(); // See that none are set, then set each one, see that they're all set, then // remove them all, and then see that none are set. @@ -138,7 +140,6 @@ test "sigset_t" { } for (1..linux.NSIG) |i| { try expectEqual(linux.sigismember(&sigset, @truncate(i)), true); - try expectEqual(linux.sigismember(&linux.empty_sigset, @truncate(i)), false); } for (1..linux.NSIG) |i| { linux.sigdelset(&sigset, @truncate(i)); @@ -147,22 +148,52 @@ test "sigset_t" { try expectEqual(linux.sigismember(&sigset, @truncate(i)), false); } + // Kernel sigset_t is either 2+ 32-bit values or 1+ 64-bit value(s). + const sigset_len = @typeInfo(linux.sigset_t).array.len; + const sigset_elemis64 = 64 == @bitSizeOf(@typeInfo(linux.sigset_t).array.child); + linux.sigaddset(&sigset, 1); try expectEqual(sigset[0], 1); - try expectEqual(sigset[1], 0); + if (sigset_len > 1) { + try expectEqual(sigset[1], 0); + } linux.sigaddset(&sigset, 31); try expectEqual(sigset[0], 0x4000_0001); - try expectEqual(sigset[1], 0); + if (sigset_len > 1) { + try expectEqual(sigset[1], 0); + } linux.sigaddset(&sigset, 36); - try expectEqual(sigset[0], 0x4000_0001); - try expectEqual(sigset[1], 0x8); + if (sigset_elemis64) { + try expectEqual(sigset[0], 0x8_4000_0001); + } else { + try expectEqual(sigset[0], 0x4000_0001); + try expectEqual(sigset[1], 0x8); + } linux.sigaddset(&sigset, 64); - try expectEqual(sigset[0], 0x4000_0001); - try expectEqual(sigset[1], 0x8000_0008); - try expectEqual(sigset[2], 0); + if (sigset_elemis64) { + try expectEqual(sigset[0], 0x8000_0008_4000_0001); + } else { + try expectEqual(sigset[0], 0x4000_0001); + try expectEqual(sigset[1], 0x8000_0008); + } +} + +test "sigfillset" { + // unlike the C library, all the signals are set in the kernel-level fillset + const sigset = linux.sigfillset(); + for (1..linux.NSIG) |i| { + try expectEqual(linux.sigismember(&sigset, @truncate(i)), true); + } +} + +test "sigemptyset" { + const sigset = linux.sigemptyset(); + for (1..linux.NSIG) |i| { + try expectEqual(linux.sigismember(&sigset, @truncate(i)), false); + } } test "sysinfo" { |
