Skip to content

Commit

Permalink
std: fix definition of SIG_IGN, SIG_DFL, etc.
Browse files Browse the repository at this point in the history
POSIX specifies that the sa_handler field of the sigaction struct may
be set to SIG_IGN or SIG_DFL. However, the current constants in the
standard library use the function pointer signature corresponding to
the sa_sigaction field instead.

This may not cause issues in practice because the fields usually occupy
the same memory in a union, but this isn't required by POSIX and there
may be systems we do not yet support that do this differently.

Fixing this also makes the Zig interface less confusing to use after
reading the man page.
  • Loading branch information
ifreund committed Aug 11, 2022
1 parent 7d6a7f5 commit 12fec42
Show file tree
Hide file tree
Showing 8 changed files with 32 additions and 32 deletions.
8 changes: 4 additions & 4 deletions lib/std/c/darwin.zig
Expand Up @@ -814,10 +814,10 @@ pub const sigset_t = u32;
pub const empty_sigset: sigset_t = 0;

pub const SIG = struct {
pub const ERR = @intToPtr(?Sigaction.sigaction_fn, maxInt(usize));
pub const DFL = @intToPtr(?Sigaction.sigaction_fn, 0);
pub const IGN = @intToPtr(?Sigaction.sigaction_fn, 1);
pub const HOLD = @intToPtr(?Sigaction.sigaction_fn, 5);
pub const ERR = @intToPtr(?Sigaction.handler_fn, maxInt(usize));
pub const DFL = @intToPtr(?Sigaction.handler_fn, 0);
pub const IGN = @intToPtr(?Sigaction.handler_fn, 1);
pub const HOLD = @intToPtr(?Sigaction.handler_fn, 5);

/// block specified signal set
pub const _BLOCK = 1;
Expand Down
6 changes: 3 additions & 3 deletions lib/std/c/dragonfly.zig
Expand Up @@ -609,9 +609,9 @@ pub const S = struct {
pub const BADSIG = SIG.ERR;

pub const SIG = struct {
pub const DFL = @intToPtr(?Sigaction.sigaction_fn, 0);
pub const IGN = @intToPtr(?Sigaction.sigaction_fn, 1);
pub const ERR = @intToPtr(?Sigaction.sigaction_fn, maxInt(usize));
pub const DFL = @intToPtr(?Sigaction.handler_fn, 0);
pub const IGN = @intToPtr(?Sigaction.handler_fn, 1);
pub const ERR = @intToPtr(?Sigaction.handler_fn, maxInt(usize));

pub const BLOCK = 1;
pub const UNBLOCK = 2;
Expand Down
6 changes: 3 additions & 3 deletions lib/std/c/freebsd.zig
Expand Up @@ -670,9 +670,9 @@ pub const SIG = struct {
pub const UNBLOCK = 2;
pub const SETMASK = 3;

pub const DFL = @intToPtr(?Sigaction.sigaction_fn, 0);
pub const IGN = @intToPtr(?Sigaction.sigaction_fn, 1);
pub const ERR = @intToPtr(?Sigaction.sigaction_fn, maxInt(usize));
pub const DFL = @intToPtr(?Sigaction.handler_fn, 0);
pub const IGN = @intToPtr(?Sigaction.handler_fn, 1);
pub const ERR = @intToPtr(?Sigaction.handler_fn, maxInt(usize));

pub const WORDS = 4;
pub const MAXSIG = 128;
Expand Down
6 changes: 3 additions & 3 deletions lib/std/c/netbsd.zig
Expand Up @@ -910,9 +910,9 @@ pub const winsize = extern struct {
const NSIG = 32;

pub const SIG = struct {
pub const DFL = @intToPtr(?Sigaction.sigaction_fn, 0);
pub const IGN = @intToPtr(?Sigaction.sigaction_fn, 1);
pub const ERR = @intToPtr(?Sigaction.sigaction_fn, maxInt(usize));
pub const DFL = @intToPtr(?Sigaction.handler_fn, 0);
pub const IGN = @intToPtr(?Sigaction.handler_fn, 1);
pub const ERR = @intToPtr(?Sigaction.handler_fn, maxInt(usize));

pub const WORDS = 4;
pub const MAXSIG = 128;
Expand Down
10 changes: 5 additions & 5 deletions lib/std/c/openbsd.zig
Expand Up @@ -982,11 +982,11 @@ pub const winsize = extern struct {
const NSIG = 33;

pub const SIG = struct {
pub const DFL = @intToPtr(?Sigaction.sigaction_fn, 0);
pub const IGN = @intToPtr(?Sigaction.sigaction_fn, 1);
pub const ERR = @intToPtr(?Sigaction.sigaction_fn, maxInt(usize));
pub const CATCH = @intToPtr(?Sigaction.sigaction_fn, 2);
pub const HOLD = @intToPtr(?Sigaction.sigaction_fn, 3);
pub const DFL = @intToPtr(?Sigaction.handler_fn, 0);
pub const IGN = @intToPtr(?Sigaction.handler_fn, 1);
pub const ERR = @intToPtr(?Sigaction.handler_fn, maxInt(usize));
pub const CATCH = @intToPtr(?Sigaction.handler_fn, 2);
pub const HOLD = @intToPtr(?Sigaction.handler_fn, 3);

pub const HUP = 1;
pub const INT = 2;
Expand Down
8 changes: 4 additions & 4 deletions lib/std/c/solaris.zig
Expand Up @@ -879,10 +879,10 @@ pub const winsize = extern struct {
const NSIG = 75;

pub const SIG = struct {
pub const DFL = @intToPtr(?Sigaction.sigaction_fn, 0);
pub const ERR = @intToPtr(?Sigaction.sigaction_fn, maxInt(usize));
pub const IGN = @intToPtr(?Sigaction.sigaction_fn, 1);
pub const HOLD = @intToPtr(?Sigaction.sigaction_fn, 2);
pub const DFL = @intToPtr(?Sigaction.handler_fn, 0);
pub const ERR = @intToPtr(?Sigaction.handler_fn, maxInt(usize));
pub const IGN = @intToPtr(?Sigaction.handler_fn, 1);
pub const HOLD = @intToPtr(?Sigaction.handler_fn, 2);

pub const WORDS = 4;
pub const MAXSIG = 75;
Expand Down
2 changes: 1 addition & 1 deletion lib/std/debug.zig
Expand Up @@ -1787,7 +1787,7 @@ fn resetSegfaultHandler() void {
return;
}
var act = os.Sigaction{
.handler = .{ .sigaction = os.SIG.DFL },
.handler = .{ .handler = os.SIG.DFL },
.mask = os.empty_sigset,
.flags = 0,
};
Expand Down
18 changes: 9 additions & 9 deletions lib/std/os/linux.zig
Expand Up @@ -1945,9 +1945,9 @@ pub const SIG = if (is_mips) struct {
pub const SYS = 31;
pub const UNUSED = SIG.SYS;

pub const ERR = @intToPtr(?Sigaction.sigaction_fn, maxInt(usize));
pub const DFL = @intToPtr(?Sigaction.sigaction_fn, 0);
pub const IGN = @intToPtr(?Sigaction.sigaction_fn, 1);
pub const ERR = @intToPtr(?Sigaction.handler_fn, maxInt(usize));
pub const DFL = @intToPtr(?Sigaction.handler_fn, 0);
pub const IGN = @intToPtr(?Sigaction.handler_fn, 1);
} else if (is_sparc) struct {
pub const BLOCK = 1;
pub const UNBLOCK = 2;
Expand Down Expand Up @@ -1989,9 +1989,9 @@ pub const SIG = if (is_mips) struct {
pub const PWR = LOST;
pub const IO = SIG.POLL;

pub const ERR = @intToPtr(?Sigaction.sigaction_fn, maxInt(usize));
pub const DFL = @intToPtr(?Sigaction.sigaction_fn, 0);
pub const IGN = @intToPtr(?Sigaction.sigaction_fn, 1);
pub const ERR = @intToPtr(?Sigaction.handler_fn, maxInt(usize));
pub const DFL = @intToPtr(?Sigaction.handler_fn, 0);
pub const IGN = @intToPtr(?Sigaction.handler_fn, 1);
} else struct {
pub const BLOCK = 0;
pub const UNBLOCK = 1;
Expand Down Expand Up @@ -2032,9 +2032,9 @@ pub const SIG = if (is_mips) struct {
pub const SYS = 31;
pub const UNUSED = SIG.SYS;

pub const ERR = @intToPtr(?Sigaction.sigaction_fn, maxInt(usize));
pub const DFL = @intToPtr(?Sigaction.sigaction_fn, 0);
pub const IGN = @intToPtr(?Sigaction.sigaction_fn, 1);
pub const ERR = @intToPtr(?Sigaction.handler_fn, maxInt(usize));
pub const DFL = @intToPtr(?Sigaction.handler_fn, 0);
pub const IGN = @intToPtr(?Sigaction.handler_fn, 1);
};

pub const kernel_rwf = u32;
Expand Down

0 comments on commit 12fec42

Please sign in to comment.