mirror of
https://github.com/ziglang/zig.git
synced 2025-12-06 06:13:07 +00:00
Previously we had a single definition of std.c.cmsghdr for all libc-linking platforms which aliased from the Solaris definition, a superfluous matching one in std.os.dragonfly, and no others. The existing definition from std.c didn't actually work for Linux, as Linux's "len" field is usize in the kernel's definition. Emscripten follows the Linux model of course (but uses the binary-compatible musl definition, which has an endian-sensitive padding scheme to make the len type "socklen_t" even though the kernel uses a usize, which is fair). This unifies and documents all the known *nix-ish cases (I'm not sure if wasi or windows really has cmsghdr support? Could be added later, void for now), such that c.cmsghdr and posix.system.cmsghdr should work correctly for all the known cases here, libc or otherwise.
185 lines
3.7 KiB
Zig
185 lines
3.7 KiB
Zig
const std = @import("../std.zig");
|
|
|
|
const SIG = std.c.SIG;
|
|
const gid_t = std.c.gid_t;
|
|
const iovec = std.c.iovec;
|
|
const pid_t = std.c.pid_t;
|
|
const socklen_t = std.c.socklen_t;
|
|
const uid_t = std.c.uid_t;
|
|
|
|
pub extern "c" fn lwp_gettid() c_int;
|
|
pub extern "c" fn umtx_sleep(ptr: *const volatile c_int, value: c_int, timeout: c_int) c_int;
|
|
pub extern "c" fn umtx_wakeup(ptr: *const volatile c_int, count: c_int) c_int;
|
|
|
|
pub const mcontext_t = extern struct {
|
|
onstack: register_t, // XXX - sigcontext compat.
|
|
rdi: register_t,
|
|
rsi: register_t,
|
|
rdx: register_t,
|
|
rcx: register_t,
|
|
r8: register_t,
|
|
r9: register_t,
|
|
rax: register_t,
|
|
rbx: register_t,
|
|
rbp: register_t,
|
|
r10: register_t,
|
|
r11: register_t,
|
|
r12: register_t,
|
|
r13: register_t,
|
|
r14: register_t,
|
|
r15: register_t,
|
|
xflags: register_t,
|
|
trapno: register_t,
|
|
addr: register_t,
|
|
flags: register_t,
|
|
err: register_t,
|
|
rip: register_t,
|
|
cs: register_t,
|
|
rflags: register_t,
|
|
rsp: register_t, // machine state
|
|
ss: register_t,
|
|
|
|
len: c_uint, // sizeof(mcontext_t)
|
|
fpformat: c_uint,
|
|
ownedfp: c_uint,
|
|
reserved: c_uint,
|
|
unused: [8]c_uint,
|
|
|
|
// NOTE! 64-byte aligned as of here. Also must match savefpu structure.
|
|
fpregs: [256]c_int align(64),
|
|
};
|
|
|
|
pub const register_t = isize;
|
|
|
|
pub const E = enum(u16) {
|
|
/// No error occurred.
|
|
SUCCESS = 0,
|
|
|
|
PERM = 1,
|
|
NOENT = 2,
|
|
SRCH = 3,
|
|
INTR = 4,
|
|
IO = 5,
|
|
NXIO = 6,
|
|
@"2BIG" = 7,
|
|
NOEXEC = 8,
|
|
BADF = 9,
|
|
CHILD = 10,
|
|
DEADLK = 11,
|
|
NOMEM = 12,
|
|
ACCES = 13,
|
|
FAULT = 14,
|
|
NOTBLK = 15,
|
|
BUSY = 16,
|
|
EXIST = 17,
|
|
XDEV = 18,
|
|
NODEV = 19,
|
|
NOTDIR = 20,
|
|
ISDIR = 21,
|
|
INVAL = 22,
|
|
NFILE = 23,
|
|
MFILE = 24,
|
|
NOTTY = 25,
|
|
TXTBSY = 26,
|
|
FBIG = 27,
|
|
NOSPC = 28,
|
|
SPIPE = 29,
|
|
ROFS = 30,
|
|
MLINK = 31,
|
|
PIPE = 32,
|
|
DOM = 33,
|
|
RANGE = 34,
|
|
/// This code is also used for `WOULDBLOCK`.
|
|
AGAIN = 35,
|
|
INPROGRESS = 36,
|
|
ALREADY = 37,
|
|
NOTSOCK = 38,
|
|
DESTADDRREQ = 39,
|
|
MSGSIZE = 40,
|
|
PROTOTYPE = 41,
|
|
NOPROTOOPT = 42,
|
|
PROTONOSUPPORT = 43,
|
|
SOCKTNOSUPPORT = 44,
|
|
/// This code is also used for `NOTSUP`.
|
|
OPNOTSUPP = 45,
|
|
PFNOSUPPORT = 46,
|
|
AFNOSUPPORT = 47,
|
|
ADDRINUSE = 48,
|
|
ADDRNOTAVAIL = 49,
|
|
NETDOWN = 50,
|
|
NETUNREACH = 51,
|
|
NETRESET = 52,
|
|
CONNABORTED = 53,
|
|
CONNRESET = 54,
|
|
NOBUFS = 55,
|
|
ISCONN = 56,
|
|
NOTCONN = 57,
|
|
SHUTDOWN = 58,
|
|
TOOMANYREFS = 59,
|
|
TIMEDOUT = 60,
|
|
CONNREFUSED = 61,
|
|
LOOP = 62,
|
|
NAMETOOLONG = 63,
|
|
HOSTDOWN = 64,
|
|
HOSTUNREACH = 65,
|
|
NOTEMPTY = 66,
|
|
PROCLIM = 67,
|
|
USERS = 68,
|
|
DQUOT = 69,
|
|
STALE = 70,
|
|
REMOTE = 71,
|
|
BADRPC = 72,
|
|
RPCMISMATCH = 73,
|
|
PROGUNAVAIL = 74,
|
|
PROGMISMATCH = 75,
|
|
PROCUNAVAIL = 76,
|
|
NOLCK = 77,
|
|
NOSYS = 78,
|
|
FTYPE = 79,
|
|
AUTH = 80,
|
|
NEEDAUTH = 81,
|
|
IDRM = 82,
|
|
NOMSG = 83,
|
|
OVERFLOW = 84,
|
|
CANCELED = 85,
|
|
ILSEQ = 86,
|
|
NOATTR = 87,
|
|
DOOFUS = 88,
|
|
BADMSG = 89,
|
|
MULTIHOP = 90,
|
|
NOLINK = 91,
|
|
PROTO = 92,
|
|
NOMEDIUM = 93,
|
|
ASYNC = 99,
|
|
_,
|
|
};
|
|
|
|
pub const BADSIG = SIG.ERR;
|
|
|
|
pub const sig_t = *const fn (i32) callconv(.c) void;
|
|
|
|
pub const cmsgcred = extern struct {
|
|
pid: pid_t,
|
|
uid: uid_t,
|
|
euid: uid_t,
|
|
gid: gid_t,
|
|
ngroups: c_short,
|
|
groups: [16]gid_t,
|
|
};
|
|
pub const sf_hdtr = extern struct {
|
|
headers: [*]iovec,
|
|
hdr_cnt: c_int,
|
|
trailers: [*]iovec,
|
|
trl_cnt: c_int,
|
|
};
|
|
|
|
pub const MS_SYNC = 0;
|
|
pub const MS_ASYNC = 1;
|
|
pub const MS_INVALIDATE = 2;
|
|
|
|
pub const POSIX_MADV_SEQUENTIAL = 2;
|
|
pub const POSIX_MADV_RANDOM = 1;
|
|
pub const POSIX_MADV_DONTNEED = 4;
|
|
pub const POSIX_MADV_NORMAL = 0;
|
|
pub const POSIX_MADV_WILLNEED = 3;
|