| author | |
| committer | |
| log | 890433e292da449e79c5a8c2efb91f65555da775 |
| tree | 458ce0f353eaee091e8ea35c0fc8450dcb336629 |
| parent | cafce8c7670e90969b1bedae0efab3df583b11dd |
| signature |
This is kind of a hack because the timespec in UAPI headers is actually still
32-bit while __kernel_timespec is 64-bit. But, importantly, all the syscalls
take __kernel_timespec from the get-go (because riscv32 support is so recent).
Defining our timespec this way will allow all the syscall wrappers in
std.os.linux to do the right thing for riscv32. For other 32-bit architectures,
we have to use the 64-bit time syscalls explicitly to solve the Y2038 problem.1 files changed, 3 insertions(+), 2 deletions(-)
lib/std/os/linux.zig+3-2| ... | ... | @@ -6327,12 +6327,13 @@ pub const POSIX_FADV = switch (native_arch) { |
| 6327 | 6327 | }; |
| 6328 | 6328 | |
| 6329 | 6329 | /// The timespec struct used by the kernel. |
| 6330 | pub const kernel_timespec = if (@sizeOf(usize) >= 8) timespec else extern struct { | |
| 6330 | pub const kernel_timespec = extern struct { | |
| 6331 | 6331 | sec: i64, |
| 6332 | 6332 | nsec: i64, |
| 6333 | 6333 | }; |
| 6334 | 6334 | |
| 6335 | pub const timespec = extern struct { | |
| 6335 | // https://github.com/ziglang/zig/issues/4726#issuecomment-2190337877 | |
| 6336 | pub const timespec = if (!builtin.link_libc and native_arch == .riscv32) kernel_timespec else extern struct { | |
| 6336 | 6337 | sec: isize, |
| 6337 | 6338 | nsec: isize, |
| 6338 | 6339 | }; |