From 629cc6cf285f60581f03b69ec8d012d2e370a029 Mon Sep 17 00:00:00 2001 From: LemonBoy Date: Sat, 12 Dec 2020 16:44:10 +0100 Subject: std: Further siginfo refinements * Define siginfo and sigaction for Darwin * Define sigaction/handler union for maximum libc compatibility * Minor correction to some type definitions --- lib/std/os/bits/linux.zig | 41 ++++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 15 deletions(-) (limited to 'lib/std/os/bits/linux.zig') diff --git a/lib/std/os/bits/linux.zig b/lib/std/os/bits/linux.zig index 72621b7fee..e86a08e861 100644 --- a/lib/std/os/bits/linux.zig +++ b/lib/std/os/bits/linux.zig @@ -864,27 +864,38 @@ pub const sigset_t = [1024 / 32]u32; pub const all_mask: sigset_t = [_]u32{0xffffffff} ** sigset_t.len; pub const app_mask: sigset_t = [2]u32{ 0xfffffffc, 0x7fffffff } ++ [_]u32{0xffffffff} ** 30; -pub const k_sigaction = if (is_mips) - extern struct { - flags: usize, - sigaction: ?fn (i32, *const siginfo_t, ?*const c_void) callconv(.C) void, - mask: [4]u32, +pub const k_sigaction = switch (builtin.arch) { + .mips, .mipsel => extern struct { + flags: c_uint, + handler: ?fn (c_int) callconv(.C) void, + mask: [4]c_ulong, restorer: fn () callconv(.C) void, - } -else - extern struct { - sigaction: ?fn (i32, *const siginfo_t, ?*const c_void) callconv(.C) void, - flags: usize, + }, + .mips64, .mips64el => extern struct { + flags: c_uint, + handler: ?fn (c_int) callconv(.C) void, + mask: [2]c_ulong, restorer: fn () callconv(.C) void, - mask: [2]u32, - }; + }, + else => extern struct { + handler: ?fn (c_int) callconv(.C) void, + flags: c_ulong, + restorer: fn () callconv(.C) void, + mask: [2]c_uint, + }, +}; /// Renamed from `sigaction` to `Sigaction` to avoid conflict with the syscall. pub const Sigaction = extern struct { - pub const sigaction_fn = fn (i32, *const siginfo_t, ?*const c_void) callconv(.C) void; - sigaction: ?sigaction_fn, + pub const handler_fn = fn (c_int) callconv(.C) void; + pub const sigaction_fn = fn (c_int, *const siginfo_t, ?*const c_void) callconv(.C) void; + + handler: extern union { + handler: ?handler_fn, + sigaction: ?sigaction_fn, + }, mask: sigset_t, - flags: u32, + flags: c_uint, restorer: ?fn () callconv(.C) void = null, }; -- cgit v1.2.3