mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 13:54:21 +00:00
The code was using u32 and usize interchangably, which doesn't work on 64-bit systems. This: `pub const sigset_t = [1024 / 32]u32;` is not consistent with this: `const shift = @as(u5, @intCast(s & (usize_bits - 1)));` However, normal signal numbers are less than 31, so the bad math doesn't matter much. Also, despite support for 1024 signals in the set, only setting signals between 1 and NSIG (which is mostly 65, but sometimes 128) is defined. The existing tests only exercised signal numbers in the first 31 bits so they didn't trip over this: The C library `sigaddset` will return `EINVAL` if given an out of bounds signal number. I made the Zig code just silently ignore any out of bounds signal numbers. Moved all the `sigset` related declarations next to each in the source, too. The `filled_sigset` seems non-standard to me. I think it is meant to be used like `empty_sigset`, but it only contains 31 set signals, which seems wrong (should be 64 or 128, aka `NSIG`). It's also unused. The oddly named but similar `all_mask` is used (by posix.zig) but sets all 1024 bits (which I understood to be undefined behavior but seems to work just fine). For comparison the musl `sigfillset` fills in 65 bits or 128 bits. |
||
|---|---|---|
| .. | ||
| bpf | ||
| aarch64.zig | ||
| arm.zig | ||
| bpf.zig | ||
| hexagon.zig | ||
| io_uring_sqe.zig | ||
| ioctl.zig | ||
| IoUring.zig | ||
| loongarch64.zig | ||
| m68k.zig | ||
| mips.zig | ||
| mips64.zig | ||
| pie.zig | ||
| powerpc.zig | ||
| powerpc64.zig | ||
| riscv32.zig | ||
| riscv64.zig | ||
| s390x.zig | ||
| seccomp.zig | ||
| sparc64.zig | ||
| syscalls.zig | ||
| test.zig | ||
| thumb.zig | ||
| tls.zig | ||
| vdso.zig | ||
| x86.zig | ||
| x86_64.zig | ||