mirror of
https://github.com/ziglang/zig.git
synced 2024-11-16 17:15:37 +00:00
5a2f6acb44
kFreeBSD is dead. https://lists.debian.org/debian-devel/2023/07/msg00176.html
9764 lines
294 KiB
Zig
9764 lines
294 KiB
Zig
const std = @import("std");
|
|
const builtin = @import("builtin");
|
|
const c = @This();
|
|
const maxInt = std.math.maxInt;
|
|
const assert = std.debug.assert;
|
|
const page_size = std.mem.page_size;
|
|
const native_abi = builtin.abi;
|
|
const native_arch = builtin.cpu.arch;
|
|
const native_os = builtin.os.tag;
|
|
const linux = std.os.linux;
|
|
const emscripten = std.os.emscripten;
|
|
const wasi = std.os.wasi;
|
|
const windows = std.os.windows;
|
|
const ws2_32 = std.os.windows.ws2_32;
|
|
const darwin = @import("c/darwin.zig");
|
|
const freebsd = @import("c/freebsd.zig");
|
|
const solaris = @import("c/solaris.zig");
|
|
const netbsd = @import("c/netbsd.zig");
|
|
const dragonfly = @import("c/dragonfly.zig");
|
|
const haiku = @import("c/haiku.zig");
|
|
const openbsd = @import("c/openbsd.zig");
|
|
|
|
// These constants are shared among all operating systems even when not linking
|
|
// libc.
|
|
|
|
pub const iovec = std.posix.iovec;
|
|
pub const iovec_const = std.posix.iovec_const;
|
|
pub const LOCK = std.posix.LOCK;
|
|
pub const winsize = std.posix.winsize;
|
|
|
|
/// The value of the link editor defined symbol _MH_EXECUTE_SYM is the address
|
|
/// of the mach header in a Mach-O executable file type. It does not appear in
|
|
/// any file type other than a MH_EXECUTE file type. The type of the symbol is
|
|
/// absolute as the header is not part of any section.
|
|
/// This symbol is populated when linking the system's libc, which is guaranteed
|
|
/// on this operating system. However when building object files or libraries,
|
|
/// the system libc won't be linked until the final executable. So we
|
|
/// export a weak symbol here, to be overridden by the real one.
|
|
pub extern var _mh_execute_header: mach_hdr;
|
|
var dummy_execute_header: mach_hdr = undefined;
|
|
comptime {
|
|
if (native_os.isDarwin()) {
|
|
@export(dummy_execute_header, .{ .name = "_mh_execute_header", .linkage = .weak });
|
|
}
|
|
}
|
|
|
|
/// If not linking libc, returns false.
|
|
/// If linking musl libc, returns true.
|
|
/// If linking gnu libc (glibc), returns true if the target version is greater
|
|
/// than or equal to `glibc_version`.
|
|
/// If linking a libc other than these, returns `false`.
|
|
pub inline fn versionCheck(comptime glibc_version: std.SemanticVersion) bool {
|
|
return comptime blk: {
|
|
if (!builtin.link_libc) break :blk false;
|
|
if (native_abi.isMusl()) break :blk true;
|
|
if (builtin.target.isGnuLibC()) {
|
|
const ver = builtin.os.version_range.linux.glibc;
|
|
const order = ver.order(glibc_version);
|
|
break :blk switch (order) {
|
|
.gt, .eq => true,
|
|
.lt => false,
|
|
};
|
|
} else {
|
|
break :blk false;
|
|
}
|
|
};
|
|
}
|
|
|
|
pub const ino_t = switch (native_os) {
|
|
.linux => linux.ino_t,
|
|
.emscripten => emscripten.ino_t,
|
|
.wasi => wasi.inode_t,
|
|
.windows => windows.LARGE_INTEGER,
|
|
.haiku => i64,
|
|
else => u64,
|
|
};
|
|
|
|
pub const off_t = switch (native_os) {
|
|
.linux => linux.off_t,
|
|
.emscripten => emscripten.off_t,
|
|
else => i64,
|
|
};
|
|
|
|
pub const timespec = switch (native_os) {
|
|
.linux => linux.timespec,
|
|
.emscripten => emscripten.timespec,
|
|
.wasi => extern struct {
|
|
sec: time_t,
|
|
nsec: isize,
|
|
|
|
pub fn fromTimestamp(tm: wasi.timestamp_t) timespec {
|
|
const sec: wasi.timestamp_t = tm / 1_000_000_000;
|
|
const nsec = tm - sec * 1_000_000_000;
|
|
return .{
|
|
.sec = @as(time_t, @intCast(sec)),
|
|
.nsec = @as(isize, @intCast(nsec)),
|
|
};
|
|
}
|
|
|
|
pub fn toTimestamp(ts: timespec) wasi.timestamp_t {
|
|
return @as(wasi.timestamp_t, @intCast(ts.sec * 1_000_000_000)) +
|
|
@as(wasi.timestamp_t, @intCast(ts.nsec));
|
|
}
|
|
},
|
|
.windows => extern struct {
|
|
sec: time_t,
|
|
nsec: c_long,
|
|
},
|
|
.dragonfly, .freebsd, .macos, .ios, .tvos, .watchos, .visionos => extern struct {
|
|
sec: isize,
|
|
nsec: isize,
|
|
},
|
|
.netbsd, .solaris, .illumos => extern struct {
|
|
sec: i64,
|
|
nsec: isize,
|
|
},
|
|
.openbsd, .haiku => extern struct {
|
|
sec: time_t,
|
|
nsec: isize,
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
pub const dev_t = switch (native_os) {
|
|
.linux => linux.dev_t,
|
|
.emscripten => emscripten.dev_t,
|
|
.wasi => wasi.device_t,
|
|
.openbsd, .haiku, .solaris, .illumos, .macos, .ios, .tvos, .watchos, .visionos => i32,
|
|
.netbsd, .freebsd => u64,
|
|
else => void,
|
|
};
|
|
|
|
pub const mode_t = switch (native_os) {
|
|
.linux => linux.mode_t,
|
|
.emscripten => emscripten.mode_t,
|
|
.openbsd, .haiku, .netbsd, .solaris, .illumos, .wasi => u32,
|
|
.freebsd, .macos, .ios, .tvos, .watchos, .visionos => u16,
|
|
else => u0,
|
|
};
|
|
|
|
pub const nlink_t = switch (native_os) {
|
|
.linux => linux.nlink_t,
|
|
.emscripten => emscripten.nlink_t,
|
|
.wasi => c_ulonglong,
|
|
.freebsd => u64,
|
|
.openbsd, .netbsd, .solaris, .illumos => u32,
|
|
.haiku => i32,
|
|
else => void,
|
|
};
|
|
|
|
pub const uid_t = switch (native_os) {
|
|
.linux => linux.uid_t,
|
|
.emscripten => emscripten.uid_t,
|
|
else => u32,
|
|
};
|
|
|
|
pub const gid_t = switch (native_os) {
|
|
.linux => linux.gid_t,
|
|
.emscripten => emscripten.gid_t,
|
|
else => u32,
|
|
};
|
|
|
|
pub const blksize_t = switch (native_os) {
|
|
.linux => linux.blksize_t,
|
|
.emscripten => emscripten.blksize_t,
|
|
.wasi => c_long,
|
|
else => i32,
|
|
};
|
|
|
|
pub const passwd = switch (native_os) {
|
|
.linux => extern struct {
|
|
name: ?[*:0]const u8, // username
|
|
passwd: ?[*:0]const u8, // user password
|
|
uid: uid_t, // user ID
|
|
gid: gid_t, // group ID
|
|
gecos: ?[*:0]const u8, // user information
|
|
dir: ?[*:0]const u8, // home directory
|
|
shell: ?[*:0]const u8, // shell program
|
|
},
|
|
.openbsd => extern struct {
|
|
name: ?[*:0]const u8, // user name
|
|
passwd: ?[*:0]const u8, // encrypted password
|
|
uid: uid_t, // user uid
|
|
gid: gid_t, // user gid
|
|
change: time_t, // password change time
|
|
class: ?[*:0]const u8, // user access class
|
|
gecos: ?[*:0]const u8, // Honeywell login info
|
|
dir: ?[*:0]const u8, // home directory
|
|
shell: ?[*:0]const u8, // default shell
|
|
expire: time_t, // account expiration
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
pub const blkcnt_t = switch (native_os) {
|
|
.linux => linux.blkcnt_t,
|
|
.emscripten => emscripten.blkcnt_t,
|
|
.wasi => c_longlong,
|
|
else => i64,
|
|
};
|
|
|
|
pub const fd_t = switch (native_os) {
|
|
.linux => linux.fd_t,
|
|
.wasi => wasi.fd_t,
|
|
.windows => windows.HANDLE,
|
|
else => i32,
|
|
};
|
|
|
|
pub const ARCH = switch (native_os) {
|
|
.linux => linux.ARCH,
|
|
else => void,
|
|
};
|
|
pub const CLOCK = clockid_t;
|
|
pub const clockid_t = switch (native_os) {
|
|
.linux, .emscripten => linux.clockid_t,
|
|
.wasi => wasi.clockid_t,
|
|
.macos, .ios, .tvos, .watchos, .visionos => enum(u32) {
|
|
REALTIME = 0,
|
|
MONOTONIC = 6,
|
|
MONOTONIC_RAW = 4,
|
|
MONOTONIC_RAW_APPROX = 5,
|
|
UPTIME_RAW = 8,
|
|
UPTIME_RAW_APPROX = 9,
|
|
PROCESS_CPUTIME_ID = 12,
|
|
THREAD_CPUTIME_ID = 16,
|
|
_,
|
|
},
|
|
.haiku => enum(i32) {
|
|
/// system-wide monotonic clock (aka system time)
|
|
MONOTONIC = 0,
|
|
/// system-wide real time clock
|
|
REALTIME = -1,
|
|
/// clock measuring the used CPU time of the current process
|
|
PROCESS_CPUTIME_ID = -2,
|
|
/// clock measuring the used CPU time of the current thread
|
|
THREAD_CPUTIME_ID = -3,
|
|
},
|
|
.freebsd => enum(u32) {
|
|
REALTIME = 0,
|
|
VIRTUAL = 1,
|
|
PROF = 2,
|
|
MONOTONIC = 4,
|
|
UPTIME = 5,
|
|
UPTIME_PRECISE = 7,
|
|
UPTIME_FAST = 8,
|
|
REALTIME_PRECISE = 9,
|
|
REALTIME_FAST = 10,
|
|
MONOTONIC_PRECISE = 11,
|
|
MONOTONIC_FAST = 12,
|
|
SECOND = 13,
|
|
THREAD_CPUTIME_ID = 14,
|
|
PROCESS_CPUTIME_ID = 15,
|
|
},
|
|
.solaris, .illumos => enum(u32) {
|
|
VIRTUAL = 1,
|
|
THREAD_CPUTIME_ID = 2,
|
|
REALTIME = 3,
|
|
MONOTONIC = 4,
|
|
PROCESS_CPUTIME_ID = 5,
|
|
},
|
|
.netbsd => enum(u32) {
|
|
REALTIME = 0,
|
|
VIRTUAL = 1,
|
|
PROF = 2,
|
|
MONOTONIC = 3,
|
|
THREAD_CPUTIME_ID = 0x20000000,
|
|
PROCESS_CPUTIME_ID = 0x40000000,
|
|
},
|
|
.dragonfly => enum(u32) {
|
|
REALTIME = 0,
|
|
VIRTUAL = 1,
|
|
PROF = 2,
|
|
MONOTONIC = 4,
|
|
UPTIME = 5,
|
|
UPTIME_PRECISE = 7,
|
|
UPTIME_FAST = 8,
|
|
REALTIME_PRECISE = 9,
|
|
REALTIME_FAST = 10,
|
|
MONOTONIC_PRECISE = 11,
|
|
MONOTONIC_FAST = 12,
|
|
SECOND = 13,
|
|
THREAD_CPUTIME_ID = 14,
|
|
PROCESS_CPUTIME_ID = 15,
|
|
},
|
|
.openbsd => enum(u32) {
|
|
REALTIME = 0,
|
|
PROCESS_CPUTIME_ID = 2,
|
|
MONOTONIC = 3,
|
|
THREAD_CPUTIME_ID = 4,
|
|
},
|
|
else => void,
|
|
};
|
|
pub const CPU_COUNT = switch (native_os) {
|
|
.linux => linux.CPU_COUNT,
|
|
.emscripten => emscripten.CPU_COUNT,
|
|
else => void,
|
|
};
|
|
pub const E = switch (native_os) {
|
|
.linux => linux.E,
|
|
.emscripten => emscripten.E,
|
|
.wasi => wasi.errno_t,
|
|
.windows => 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,
|
|
AGAIN = 11,
|
|
NOMEM = 12,
|
|
ACCES = 13,
|
|
FAULT = 14,
|
|
BUSY = 16,
|
|
EXIST = 17,
|
|
XDEV = 18,
|
|
NODEV = 19,
|
|
NOTDIR = 20,
|
|
ISDIR = 21,
|
|
NFILE = 23,
|
|
MFILE = 24,
|
|
NOTTY = 25,
|
|
FBIG = 27,
|
|
NOSPC = 28,
|
|
SPIPE = 29,
|
|
ROFS = 30,
|
|
MLINK = 31,
|
|
PIPE = 32,
|
|
DOM = 33,
|
|
/// Also means `DEADLOCK`.
|
|
DEADLK = 36,
|
|
NAMETOOLONG = 38,
|
|
NOLCK = 39,
|
|
NOSYS = 40,
|
|
NOTEMPTY = 41,
|
|
|
|
INVAL = 22,
|
|
RANGE = 34,
|
|
ILSEQ = 42,
|
|
|
|
// POSIX Supplement
|
|
ADDRINUSE = 100,
|
|
ADDRNOTAVAIL = 101,
|
|
AFNOSUPPORT = 102,
|
|
ALREADY = 103,
|
|
BADMSG = 104,
|
|
CANCELED = 105,
|
|
CONNABORTED = 106,
|
|
CONNREFUSED = 107,
|
|
CONNRESET = 108,
|
|
DESTADDRREQ = 109,
|
|
HOSTUNREACH = 110,
|
|
IDRM = 111,
|
|
INPROGRESS = 112,
|
|
ISCONN = 113,
|
|
LOOP = 114,
|
|
MSGSIZE = 115,
|
|
NETDOWN = 116,
|
|
NETRESET = 117,
|
|
NETUNREACH = 118,
|
|
NOBUFS = 119,
|
|
NODATA = 120,
|
|
NOLINK = 121,
|
|
NOMSG = 122,
|
|
NOPROTOOPT = 123,
|
|
NOSR = 124,
|
|
NOSTR = 125,
|
|
NOTCONN = 126,
|
|
NOTRECOVERABLE = 127,
|
|
NOTSOCK = 128,
|
|
NOTSUP = 129,
|
|
OPNOTSUPP = 130,
|
|
OTHER = 131,
|
|
OVERFLOW = 132,
|
|
OWNERDEAD = 133,
|
|
PROTO = 134,
|
|
PROTONOSUPPORT = 135,
|
|
PROTOTYPE = 136,
|
|
TIME = 137,
|
|
TIMEDOUT = 138,
|
|
TXTBSY = 139,
|
|
WOULDBLOCK = 140,
|
|
DQUOT = 10069,
|
|
_,
|
|
},
|
|
.macos, .ios, .tvos, .watchos, .visionos => darwin.E,
|
|
.freebsd => freebsd.E,
|
|
.solaris, .illumos => enum(u16) {
|
|
/// No error occurred.
|
|
SUCCESS = 0,
|
|
/// Not super-user
|
|
PERM = 1,
|
|
/// No such file or directory
|
|
NOENT = 2,
|
|
/// No such process
|
|
SRCH = 3,
|
|
/// interrupted system call
|
|
INTR = 4,
|
|
/// I/O error
|
|
IO = 5,
|
|
/// No such device or address
|
|
NXIO = 6,
|
|
/// Arg list too long
|
|
@"2BIG" = 7,
|
|
/// Exec format error
|
|
NOEXEC = 8,
|
|
/// Bad file number
|
|
BADF = 9,
|
|
/// No children
|
|
CHILD = 10,
|
|
/// Resource temporarily unavailable.
|
|
/// also: WOULDBLOCK: Operation would block.
|
|
AGAIN = 11,
|
|
/// Not enough core
|
|
NOMEM = 12,
|
|
/// Permission denied
|
|
ACCES = 13,
|
|
/// Bad address
|
|
FAULT = 14,
|
|
/// Block device required
|
|
NOTBLK = 15,
|
|
/// Mount device busy
|
|
BUSY = 16,
|
|
/// File exists
|
|
EXIST = 17,
|
|
/// Cross-device link
|
|
XDEV = 18,
|
|
/// No such device
|
|
NODEV = 19,
|
|
/// Not a directory
|
|
NOTDIR = 20,
|
|
/// Is a directory
|
|
ISDIR = 21,
|
|
/// Invalid argument
|
|
INVAL = 22,
|
|
/// File table overflow
|
|
NFILE = 23,
|
|
/// Too many open files
|
|
MFILE = 24,
|
|
/// Inappropriate ioctl for device
|
|
NOTTY = 25,
|
|
/// Text file busy
|
|
TXTBSY = 26,
|
|
/// File too large
|
|
FBIG = 27,
|
|
/// No space left on device
|
|
NOSPC = 28,
|
|
/// Illegal seek
|
|
SPIPE = 29,
|
|
/// Read only file system
|
|
ROFS = 30,
|
|
/// Too many links
|
|
MLINK = 31,
|
|
/// Broken pipe
|
|
PIPE = 32,
|
|
/// Math arg out of domain of func
|
|
DOM = 33,
|
|
/// Math result not representable
|
|
RANGE = 34,
|
|
/// No message of desired type
|
|
NOMSG = 35,
|
|
/// Identifier removed
|
|
IDRM = 36,
|
|
/// Channel number out of range
|
|
CHRNG = 37,
|
|
/// Level 2 not synchronized
|
|
L2NSYNC = 38,
|
|
/// Level 3 halted
|
|
L3HLT = 39,
|
|
/// Level 3 reset
|
|
L3RST = 40,
|
|
/// Link number out of range
|
|
LNRNG = 41,
|
|
/// Protocol driver not attached
|
|
UNATCH = 42,
|
|
/// No CSI structure available
|
|
NOCSI = 43,
|
|
/// Level 2 halted
|
|
L2HLT = 44,
|
|
/// Deadlock condition.
|
|
DEADLK = 45,
|
|
/// No record locks available.
|
|
NOLCK = 46,
|
|
/// Operation canceled
|
|
CANCELED = 47,
|
|
/// Operation not supported
|
|
NOTSUP = 48,
|
|
|
|
// Filesystem Quotas
|
|
/// Disc quota exceeded
|
|
DQUOT = 49,
|
|
|
|
// Convergent Error Returns
|
|
/// invalid exchange
|
|
BADE = 50,
|
|
/// invalid request descriptor
|
|
BADR = 51,
|
|
/// exchange full
|
|
XFULL = 52,
|
|
/// no anode
|
|
NOANO = 53,
|
|
/// invalid request code
|
|
BADRQC = 54,
|
|
/// invalid slot
|
|
BADSLT = 55,
|
|
/// file locking deadlock error
|
|
DEADLOCK = 56,
|
|
/// bad font file fmt
|
|
BFONT = 57,
|
|
|
|
// Interprocess Robust Locks
|
|
/// process died with the lock
|
|
OWNERDEAD = 58,
|
|
/// lock is not recoverable
|
|
NOTRECOVERABLE = 59,
|
|
/// locked lock was unmapped
|
|
LOCKUNMAPPED = 72,
|
|
/// Facility is not active
|
|
NOTACTIVE = 73,
|
|
/// multihop attempted
|
|
MULTIHOP = 74,
|
|
/// trying to read unreadable message
|
|
BADMSG = 77,
|
|
/// path name is too long
|
|
NAMETOOLONG = 78,
|
|
/// value too large to be stored in data type
|
|
OVERFLOW = 79,
|
|
/// given log. name not unique
|
|
NOTUNIQ = 80,
|
|
/// f.d. invalid for this operation
|
|
BADFD = 81,
|
|
/// Remote address changed
|
|
REMCHG = 82,
|
|
|
|
// Stream Problems
|
|
/// Device not a stream
|
|
NOSTR = 60,
|
|
/// no data (for no delay io)
|
|
NODATA = 61,
|
|
/// timer expired
|
|
TIME = 62,
|
|
/// out of streams resources
|
|
NOSR = 63,
|
|
/// Machine is not on the network
|
|
NONET = 64,
|
|
/// Package not installed
|
|
NOPKG = 65,
|
|
/// The object is remote
|
|
REMOTE = 66,
|
|
/// the link has been severed
|
|
NOLINK = 67,
|
|
/// advertise error
|
|
ADV = 68,
|
|
/// srmount error
|
|
SRMNT = 69,
|
|
/// Communication error on send
|
|
COMM = 70,
|
|
/// Protocol error
|
|
PROTO = 71,
|
|
|
|
// Shared Library Problems
|
|
/// Can't access a needed shared lib.
|
|
LIBACC = 83,
|
|
/// Accessing a corrupted shared lib.
|
|
LIBBAD = 84,
|
|
/// .lib section in a.out corrupted.
|
|
LIBSCN = 85,
|
|
/// Attempting to link in too many libs.
|
|
LIBMAX = 86,
|
|
/// Attempting to exec a shared library.
|
|
LIBEXEC = 87,
|
|
/// Illegal byte sequence.
|
|
ILSEQ = 88,
|
|
/// Unsupported file system operation
|
|
NOSYS = 89,
|
|
/// Symbolic link loop
|
|
LOOP = 90,
|
|
/// Restartable system call
|
|
RESTART = 91,
|
|
/// if pipe/FIFO, don't sleep in stream head
|
|
STRPIPE = 92,
|
|
/// directory not empty
|
|
NOTEMPTY = 93,
|
|
/// Too many users (for UFS)
|
|
USERS = 94,
|
|
|
|
// BSD Networking Software
|
|
// Argument Errors
|
|
/// Socket operation on non-socket
|
|
NOTSOCK = 95,
|
|
/// Destination address required
|
|
DESTADDRREQ = 96,
|
|
/// Message too long
|
|
MSGSIZE = 97,
|
|
/// Protocol wrong type for socket
|
|
PROTOTYPE = 98,
|
|
/// Protocol not available
|
|
NOPROTOOPT = 99,
|
|
/// Protocol not supported
|
|
PROTONOSUPPORT = 120,
|
|
/// Socket type not supported
|
|
SOCKTNOSUPPORT = 121,
|
|
/// Operation not supported on socket
|
|
OPNOTSUPP = 122,
|
|
/// Protocol family not supported
|
|
PFNOSUPPORT = 123,
|
|
/// Address family not supported by
|
|
AFNOSUPPORT = 124,
|
|
/// Address already in use
|
|
ADDRINUSE = 125,
|
|
/// Can't assign requested address
|
|
ADDRNOTAVAIL = 126,
|
|
|
|
// Operational Errors
|
|
/// Network is down
|
|
NETDOWN = 127,
|
|
/// Network is unreachable
|
|
NETUNREACH = 128,
|
|
/// Network dropped connection because
|
|
NETRESET = 129,
|
|
/// Software caused connection abort
|
|
CONNABORTED = 130,
|
|
/// Connection reset by peer
|
|
CONNRESET = 131,
|
|
/// No buffer space available
|
|
NOBUFS = 132,
|
|
/// Socket is already connected
|
|
ISCONN = 133,
|
|
/// Socket is not connected
|
|
NOTCONN = 134,
|
|
/// Can't send after socket shutdown
|
|
SHUTDOWN = 143,
|
|
/// Too many references: can't splice
|
|
TOOMANYREFS = 144,
|
|
/// Connection timed out
|
|
TIMEDOUT = 145,
|
|
/// Connection refused
|
|
CONNREFUSED = 146,
|
|
/// Host is down
|
|
HOSTDOWN = 147,
|
|
/// No route to host
|
|
HOSTUNREACH = 148,
|
|
/// operation already in progress
|
|
ALREADY = 149,
|
|
/// operation now in progress
|
|
INPROGRESS = 150,
|
|
|
|
// SUN Network File System
|
|
/// Stale NFS file handle
|
|
STALE = 151,
|
|
|
|
_,
|
|
},
|
|
.netbsd => netbsd.E,
|
|
.dragonfly => dragonfly.E,
|
|
.haiku => haiku.E,
|
|
.openbsd => openbsd.E,
|
|
else => void,
|
|
};
|
|
pub const Elf_Symndx = switch (native_os) {
|
|
.linux => linux.Elf_Symndx,
|
|
else => void,
|
|
};
|
|
/// Command flags for fcntl(2).
|
|
pub const F = switch (native_os) {
|
|
.linux => linux.F,
|
|
.emscripten => emscripten.F,
|
|
.wasi => struct {
|
|
pub const GETFD = 1;
|
|
pub const SETFD = 2;
|
|
pub const GETFL = 3;
|
|
pub const SETFL = 4;
|
|
},
|
|
.macos, .ios, .tvos, .watchos, .visionos => struct {
|
|
/// duplicate file descriptor
|
|
pub const DUPFD = 0;
|
|
/// get file descriptor flags
|
|
pub const GETFD = 1;
|
|
/// set file descriptor flags
|
|
pub const SETFD = 2;
|
|
/// get file status flags
|
|
pub const GETFL = 3;
|
|
/// set file status flags
|
|
pub const SETFL = 4;
|
|
/// get SIGIO/SIGURG proc/pgrp
|
|
pub const GETOWN = 5;
|
|
/// set SIGIO/SIGURG proc/pgrp
|
|
pub const SETOWN = 6;
|
|
/// get record locking information
|
|
pub const GETLK = 7;
|
|
/// set record locking information
|
|
pub const SETLK = 8;
|
|
/// F.SETLK; wait if blocked
|
|
pub const SETLKW = 9;
|
|
/// F.SETLK; wait if blocked, return on timeout
|
|
pub const SETLKWTIMEOUT = 10;
|
|
pub const FLUSH_DATA = 40;
|
|
/// Used for regression test
|
|
pub const CHKCLEAN = 41;
|
|
/// Preallocate storage
|
|
pub const PREALLOCATE = 42;
|
|
/// Truncate a file without zeroing space
|
|
pub const SETSIZE = 43;
|
|
/// Issue an advisory read async with no copy to user
|
|
pub const RDADVISE = 44;
|
|
/// turn read ahead off/on for this fd
|
|
pub const RDAHEAD = 45;
|
|
/// turn data caching off/on for this fd
|
|
pub const NOCACHE = 48;
|
|
/// file offset to device offset
|
|
pub const LOG2PHYS = 49;
|
|
/// return the full path of the fd
|
|
pub const GETPATH = 50;
|
|
/// fsync + ask the drive to flush to the media
|
|
pub const FULLFSYNC = 51;
|
|
/// find which component (if any) is a package
|
|
pub const PATHPKG_CHECK = 52;
|
|
/// "freeze" all fs operations
|
|
pub const FREEZE_FS = 53;
|
|
/// "thaw" all fs operations
|
|
pub const THAW_FS = 54;
|
|
/// turn data caching off/on (globally) for this file
|
|
pub const GLOBAL_NOCACHE = 55;
|
|
/// add detached signatures
|
|
pub const ADDSIGS = 59;
|
|
/// add signature from same file (used by dyld for shared libs)
|
|
pub const ADDFILESIGS = 61;
|
|
/// used in conjunction with F.NOCACHE to indicate that DIRECT, synchronous writes
|
|
/// should not be used (i.e. its ok to temporarily create cached pages)
|
|
pub const NODIRECT = 62;
|
|
///Get the protection class of a file from the EA, returns int
|
|
pub const GETPROTECTIONCLASS = 63;
|
|
///Set the protection class of a file for the EA, requires int
|
|
pub const SETPROTECTIONCLASS = 64;
|
|
///file offset to device offset, extended
|
|
pub const LOG2PHYS_EXT = 65;
|
|
///get record locking information, per-process
|
|
pub const GETLKPID = 66;
|
|
///Mark the file as being the backing store for another filesystem
|
|
pub const SETBACKINGSTORE = 70;
|
|
///return the full path of the FD, but error in specific mtmd circumstances
|
|
pub const GETPATH_MTMINFO = 71;
|
|
///Returns the code directory, with associated hashes, to the caller
|
|
pub const GETCODEDIR = 72;
|
|
///No SIGPIPE generated on EPIPE
|
|
pub const SETNOSIGPIPE = 73;
|
|
///Status of SIGPIPE for this fd
|
|
pub const GETNOSIGPIPE = 74;
|
|
///For some cases, we need to rewrap the key for AKS/MKB
|
|
pub const TRANSCODEKEY = 75;
|
|
///file being written to a by single writer... if throttling enabled, writes
|
|
///may be broken into smaller chunks with throttling in between
|
|
pub const SINGLE_WRITER = 76;
|
|
///Get the protection version number for this filesystem
|
|
pub const GETPROTECTIONLEVEL = 77;
|
|
///Add detached code signatures (used by dyld for shared libs)
|
|
pub const FINDSIGS = 78;
|
|
///Add signature from same file, only if it is signed by Apple (used by dyld for simulator)
|
|
pub const ADDFILESIGS_FOR_DYLD_SIM = 83;
|
|
///fsync + issue barrier to drive
|
|
pub const BARRIERFSYNC = 85;
|
|
///Add signature from same file, return end offset in structure on success
|
|
pub const ADDFILESIGS_RETURN = 97;
|
|
///Check if Library Validation allows this Mach-O file to be mapped into the calling process
|
|
pub const CHECK_LV = 98;
|
|
///Deallocate a range of the file
|
|
pub const PUNCHHOLE = 99;
|
|
///Trim an active file
|
|
pub const TRIM_ACTIVE_FILE = 100;
|
|
///mark the dup with FD_CLOEXEC
|
|
pub const DUPFD_CLOEXEC = 67;
|
|
/// shared or read lock
|
|
pub const RDLCK = 1;
|
|
/// unlock
|
|
pub const UNLCK = 2;
|
|
/// exclusive or write lock
|
|
pub const WRLCK = 3;
|
|
},
|
|
.freebsd => struct {
|
|
/// Duplicate file descriptor.
|
|
pub const DUPFD = 0;
|
|
/// Get file descriptor flags.
|
|
pub const GETFD = 1;
|
|
/// Set file descriptor flags.
|
|
pub const SETFD = 2;
|
|
/// Get file status flags.
|
|
pub const GETFL = 3;
|
|
/// Set file status flags.
|
|
pub const SETFL = 4;
|
|
|
|
/// Get SIGIO/SIGURG proc/pgrrp.
|
|
pub const GETOWN = 5;
|
|
/// Set SIGIO/SIGURG proc/pgrrp.
|
|
pub const SETOWN = 6;
|
|
|
|
/// Get record locking information.
|
|
pub const GETLK = 11;
|
|
/// Set record locking information.
|
|
pub const SETLK = 12;
|
|
/// Set record locking information and wait if blocked.
|
|
pub const SETLKW = 13;
|
|
|
|
/// Debugging support for remote locks.
|
|
pub const SETLK_REMOTE = 14;
|
|
/// Read ahead.
|
|
pub const READAHEAD = 15;
|
|
|
|
/// DUPFD with FD_CLOEXEC set.
|
|
pub const DUPFD_CLOEXEC = 17;
|
|
/// DUP2FD with FD_CLOEXEC set.
|
|
pub const DUP2FD_CLOEXEC = 18;
|
|
|
|
pub const ADD_SEALS = 19;
|
|
pub const GET_SEALS = 20;
|
|
/// Return `kinfo_file` for a file descriptor.
|
|
pub const KINFO = 22;
|
|
|
|
// Seals (ADD_SEALS, GET_SEALS)
|
|
/// Prevent adding sealings.
|
|
pub const SEAL_SEAL = 0x0001;
|
|
/// May not shrink
|
|
pub const SEAL_SHRINK = 0x0002;
|
|
/// May not grow.
|
|
pub const SEAL_GROW = 0x0004;
|
|
/// May not write.
|
|
pub const SEAL_WRITE = 0x0008;
|
|
|
|
// Record locking flags (GETLK, SETLK, SETLKW).
|
|
/// Shared or read lock.
|
|
pub const RDLCK = 1;
|
|
/// Unlock.
|
|
pub const UNLCK = 2;
|
|
/// Exclusive or write lock.
|
|
pub const WRLCK = 3;
|
|
/// Purge locks for a given system ID.
|
|
pub const UNLCKSYS = 4;
|
|
/// Cancel an async lock request.
|
|
pub const CANCEL = 5;
|
|
|
|
pub const SETOWN_EX = 15;
|
|
pub const GETOWN_EX = 16;
|
|
|
|
pub const GETOWNER_UIDS = 17;
|
|
},
|
|
.solaris, .illumos => struct {
|
|
/// Unlock a previously locked region
|
|
pub const ULOCK = 0;
|
|
/// Lock a region for exclusive use
|
|
pub const LOCK = 1;
|
|
/// Test and lock a region for exclusive use
|
|
pub const TLOCK = 2;
|
|
/// Test a region for other processes locks
|
|
pub const TEST = 3;
|
|
|
|
/// Duplicate fildes
|
|
pub const DUPFD = 0;
|
|
/// Get fildes flags
|
|
pub const GETFD = 1;
|
|
/// Set fildes flags
|
|
pub const SETFD = 2;
|
|
/// Get file flags
|
|
pub const GETFL = 3;
|
|
/// Get file flags including open-only flags
|
|
pub const GETXFL = 45;
|
|
/// Set file flags
|
|
pub const SETFL = 4;
|
|
|
|
/// Unused
|
|
pub const CHKFL = 8;
|
|
/// Duplicate fildes at third arg
|
|
pub const DUP2FD = 9;
|
|
/// Like DUP2FD with O_CLOEXEC set EINVAL is fildes matches arg1
|
|
pub const DUP2FD_CLOEXEC = 36;
|
|
/// Like DUPFD with O_CLOEXEC set
|
|
pub const DUPFD_CLOEXEC = 37;
|
|
|
|
/// Is the file desc. a stream ?
|
|
pub const ISSTREAM = 13;
|
|
/// Turn on private access to file
|
|
pub const PRIV = 15;
|
|
/// Turn off private access to file
|
|
pub const NPRIV = 16;
|
|
/// UFS quota call
|
|
pub const QUOTACTL = 17;
|
|
/// Get number of BLKSIZE blocks allocated
|
|
pub const BLOCKS = 18;
|
|
/// Get optimal I/O block size
|
|
pub const BLKSIZE = 19;
|
|
/// Get owner (socket emulation)
|
|
pub const GETOWN = 23;
|
|
/// Set owner (socket emulation)
|
|
pub const SETOWN = 24;
|
|
/// Object reuse revoke access to file desc.
|
|
pub const REVOKE = 25;
|
|
/// Does vp have NFS locks private to lock manager
|
|
pub const HASREMOTELOCKS = 26;
|
|
|
|
/// Set file lock
|
|
pub const SETLK = 6;
|
|
/// Set file lock and wait
|
|
pub const SETLKW = 7;
|
|
/// Allocate file space
|
|
pub const ALLOCSP = 10;
|
|
/// Free file space
|
|
pub const FREESP = 11;
|
|
/// Get file lock
|
|
pub const GETLK = 14;
|
|
/// Get file lock owned by file
|
|
pub const OFD_GETLK = 47;
|
|
/// Set file lock owned by file
|
|
pub const OFD_SETLK = 48;
|
|
/// Set file lock owned by file and wait
|
|
pub const OFD_SETLKW = 49;
|
|
/// Set a file share reservation
|
|
pub const SHARE = 40;
|
|
/// Remove a file share reservation
|
|
pub const UNSHARE = 41;
|
|
/// Create Poison FD
|
|
pub const BADFD = 46;
|
|
|
|
/// Read lock
|
|
pub const RDLCK = 1;
|
|
/// Write lock
|
|
pub const WRLCK = 2;
|
|
/// Remove lock(s)
|
|
pub const UNLCK = 3;
|
|
/// remove remote locks for a given system
|
|
pub const UNLKSYS = 4;
|
|
|
|
// f_access values
|
|
/// Read-only share access
|
|
pub const RDACC = 0x1;
|
|
/// Write-only share access
|
|
pub const WRACC = 0x2;
|
|
/// Read-Write share access
|
|
pub const RWACC = 0x3;
|
|
|
|
// f_deny values
|
|
/// Don't deny others access
|
|
pub const NODNY = 0x0;
|
|
/// Deny others read share access
|
|
pub const RDDNY = 0x1;
|
|
/// Deny others write share access
|
|
pub const WRDNY = 0x2;
|
|
/// Deny others read or write share access
|
|
pub const RWDNY = 0x3;
|
|
/// private flag: Deny delete share access
|
|
pub const RMDNY = 0x4;
|
|
},
|
|
.netbsd => struct {
|
|
pub const DUPFD = 0;
|
|
pub const GETFD = 1;
|
|
pub const SETFD = 2;
|
|
pub const GETFL = 3;
|
|
pub const SETFL = 4;
|
|
pub const GETOWN = 5;
|
|
pub const SETOWN = 6;
|
|
pub const GETLK = 7;
|
|
pub const SETLK = 8;
|
|
pub const SETLKW = 9;
|
|
pub const CLOSEM = 10;
|
|
pub const MAXFD = 11;
|
|
pub const DUPFD_CLOEXEC = 12;
|
|
pub const GETNOSIGPIPE = 13;
|
|
pub const SETNOSIGPIPE = 14;
|
|
pub const GETPATH = 15;
|
|
|
|
pub const RDLCK = 1;
|
|
pub const WRLCK = 3;
|
|
pub const UNLCK = 2;
|
|
},
|
|
.dragonfly => struct {
|
|
pub const ULOCK = 0;
|
|
pub const LOCK = 1;
|
|
pub const TLOCK = 2;
|
|
pub const TEST = 3;
|
|
|
|
pub const DUPFD = 0;
|
|
pub const GETFD = 1;
|
|
pub const RDLCK = 1;
|
|
pub const SETFD = 2;
|
|
pub const UNLCK = 2;
|
|
pub const WRLCK = 3;
|
|
pub const GETFL = 3;
|
|
pub const SETFL = 4;
|
|
pub const GETOWN = 5;
|
|
pub const SETOWN = 6;
|
|
pub const GETLK = 7;
|
|
pub const SETLK = 8;
|
|
pub const SETLKW = 9;
|
|
pub const DUP2FD = 10;
|
|
pub const DUPFD_CLOEXEC = 17;
|
|
pub const DUP2FD_CLOEXEC = 18;
|
|
pub const GETPATH = 19;
|
|
},
|
|
.haiku => struct {
|
|
pub const DUPFD = 0x0001;
|
|
pub const GETFD = 0x0002;
|
|
pub const SETFD = 0x0004;
|
|
pub const GETFL = 0x0008;
|
|
pub const SETFL = 0x0010;
|
|
|
|
pub const GETLK = 0x0020;
|
|
pub const SETLK = 0x0080;
|
|
pub const SETLKW = 0x0100;
|
|
pub const DUPFD_CLOEXEC = 0x0200;
|
|
|
|
pub const RDLCK = 0x0040;
|
|
pub const UNLCK = 0x0200;
|
|
pub const WRLCK = 0x0400;
|
|
},
|
|
.openbsd => struct {
|
|
pub const DUPFD = 0;
|
|
pub const GETFD = 1;
|
|
pub const SETFD = 2;
|
|
pub const GETFL = 3;
|
|
pub const SETFL = 4;
|
|
|
|
pub const GETOWN = 5;
|
|
pub const SETOWN = 6;
|
|
|
|
pub const GETLK = 7;
|
|
pub const SETLK = 8;
|
|
pub const SETLKW = 9;
|
|
|
|
pub const RDLCK = 1;
|
|
pub const UNLCK = 2;
|
|
pub const WRLCK = 3;
|
|
},
|
|
else => void,
|
|
};
|
|
pub const FD_CLOEXEC = switch (native_os) {
|
|
.linux => linux.FD_CLOEXEC,
|
|
.emscripten => emscripten.FD_CLOEXEC,
|
|
else => 1,
|
|
};
|
|
|
|
/// Test for existence of file.
|
|
pub const F_OK = switch (native_os) {
|
|
.linux => linux.F_OK,
|
|
.emscripten => emscripten.F_OK,
|
|
else => 0,
|
|
};
|
|
/// Test for execute or search permission.
|
|
pub const X_OK = switch (native_os) {
|
|
.linux => linux.X_OK,
|
|
.emscripten => emscripten.X_OK,
|
|
else => 1,
|
|
};
|
|
/// Test for write permission.
|
|
pub const W_OK = switch (native_os) {
|
|
.linux => linux.W_OK,
|
|
.emscripten => emscripten.W_OK,
|
|
else => 2,
|
|
};
|
|
/// Test for read permission.
|
|
pub const R_OK = switch (native_os) {
|
|
.linux => linux.R_OK,
|
|
.emscripten => emscripten.R_OK,
|
|
else => 4,
|
|
};
|
|
|
|
pub const Flock = switch (native_os) {
|
|
.linux => linux.Flock,
|
|
.emscripten => emscripten.Flock,
|
|
.openbsd, .dragonfly, .netbsd, .macos, .ios, .tvos, .watchos, .visionos => extern struct {
|
|
start: off_t,
|
|
len: off_t,
|
|
pid: pid_t,
|
|
type: i16,
|
|
whence: i16,
|
|
},
|
|
.freebsd => extern struct {
|
|
/// Starting offset.
|
|
start: off_t,
|
|
/// Number of consecutive bytes to be locked.
|
|
/// A value of 0 means to the end of the file.
|
|
len: off_t,
|
|
/// Lock owner.
|
|
pid: pid_t,
|
|
/// Lock type.
|
|
type: i16,
|
|
/// Type of the start member.
|
|
whence: i16,
|
|
/// Remote system id or zero for local.
|
|
sysid: i32,
|
|
},
|
|
.solaris, .illumos => extern struct {
|
|
type: c_short,
|
|
whence: c_short,
|
|
start: off_t,
|
|
// len == 0 means until end of file.
|
|
len: off_t,
|
|
sysid: c_int,
|
|
pid: pid_t,
|
|
__pad: [4]c_long,
|
|
},
|
|
.haiku => extern struct {
|
|
type: i16,
|
|
whence: i16,
|
|
start: off_t,
|
|
len: off_t,
|
|
pid: pid_t,
|
|
},
|
|
else => void,
|
|
};
|
|
pub const HOST_NAME_MAX = switch (native_os) {
|
|
.linux => linux.HOST_NAME_MAX,
|
|
.macos, .ios, .tvos, .watchos, .visionos => 72,
|
|
.openbsd, .haiku, .dragonfly, .netbsd, .solaris, .illumos, .freebsd => 255,
|
|
else => {},
|
|
};
|
|
pub const IOV_MAX = switch (native_os) {
|
|
.linux => linux.IOV_MAX,
|
|
.emscripten => emscripten.IOV_MAX,
|
|
.openbsd, .haiku, .solaris, .illumos, .wasi => 1024,
|
|
.macos, .ios, .tvos, .watchos, .visionos => 16,
|
|
.dragonfly, .netbsd, .freebsd => KERN.IOV_MAX,
|
|
else => {},
|
|
};
|
|
pub const CTL = switch (native_os) {
|
|
.freebsd => struct {
|
|
pub const KERN = 1;
|
|
pub const DEBUG = 5;
|
|
},
|
|
.netbsd => struct {
|
|
pub const KERN = 1;
|
|
pub const DEBUG = 5;
|
|
},
|
|
.dragonfly => struct {
|
|
pub const UNSPEC = 0;
|
|
pub const KERN = 1;
|
|
pub const VM = 2;
|
|
pub const VFS = 3;
|
|
pub const NET = 4;
|
|
pub const DEBUG = 5;
|
|
pub const HW = 6;
|
|
pub const MACHDEP = 7;
|
|
pub const USER = 8;
|
|
pub const LWKT = 10;
|
|
pub const MAXID = 11;
|
|
pub const MAXNAME = 12;
|
|
},
|
|
.openbsd => struct {
|
|
pub const UNSPEC = 0;
|
|
pub const KERN = 1;
|
|
pub const VM = 2;
|
|
pub const FS = 3;
|
|
pub const NET = 4;
|
|
pub const DEBUG = 5;
|
|
pub const HW = 6;
|
|
pub const MACHDEP = 7;
|
|
|
|
pub const DDB = 9;
|
|
pub const VFS = 10;
|
|
},
|
|
else => void,
|
|
};
|
|
pub const KERN = switch (native_os) {
|
|
.freebsd => struct {
|
|
/// struct: process entries
|
|
pub const PROC = 14;
|
|
/// path to executable
|
|
pub const PROC_PATHNAME = 12;
|
|
/// file descriptors for process
|
|
pub const PROC_FILEDESC = 33;
|
|
pub const IOV_MAX = 35;
|
|
},
|
|
.netbsd => struct {
|
|
/// struct: process argv/env
|
|
pub const PROC_ARGS = 48;
|
|
/// path to executable
|
|
pub const PROC_PATHNAME = 5;
|
|
pub const IOV_MAX = 38;
|
|
},
|
|
.dragonfly => struct {
|
|
pub const PROC_ALL = 0;
|
|
pub const OSTYPE = 1;
|
|
pub const PROC_PID = 1;
|
|
pub const OSRELEASE = 2;
|
|
pub const PROC_PGRP = 2;
|
|
pub const OSREV = 3;
|
|
pub const PROC_SESSION = 3;
|
|
pub const VERSION = 4;
|
|
pub const PROC_TTY = 4;
|
|
pub const MAXVNODES = 5;
|
|
pub const PROC_UID = 5;
|
|
pub const MAXPROC = 6;
|
|
pub const PROC_RUID = 6;
|
|
pub const MAXFILES = 7;
|
|
pub const PROC_ARGS = 7;
|
|
pub const ARGMAX = 8;
|
|
pub const PROC_CWD = 8;
|
|
pub const PROC_PATHNAME = 9;
|
|
pub const SECURELVL = 9;
|
|
pub const PROC_SIGTRAMP = 10;
|
|
pub const HOSTNAME = 10;
|
|
pub const HOSTID = 11;
|
|
pub const CLOCKRATE = 12;
|
|
pub const VNODE = 13;
|
|
pub const PROC = 14;
|
|
pub const FILE = 15;
|
|
pub const PROC_FLAGMASK = 16;
|
|
pub const PROF = 16;
|
|
pub const PROC_FLAG_LWP = 16;
|
|
pub const POSIX1 = 17;
|
|
pub const NGROUPS = 18;
|
|
pub const JOB_CONTROL = 19;
|
|
pub const SAVED_IDS = 20;
|
|
pub const BOOTTIME = 21;
|
|
pub const NISDOMAINNAME = 22;
|
|
pub const UPDATEINTERVAL = 23;
|
|
pub const OSRELDATE = 24;
|
|
pub const NTP_PLL = 25;
|
|
pub const BOOTFILE = 26;
|
|
pub const MAXFILESPERPROC = 27;
|
|
pub const MAXPROCPERUID = 28;
|
|
pub const DUMPDEV = 29;
|
|
pub const IPC = 30;
|
|
pub const DUMMY = 31;
|
|
pub const PS_STRINGS = 32;
|
|
pub const USRSTACK = 33;
|
|
pub const LOGSIGEXIT = 34;
|
|
pub const IOV_MAX = 35;
|
|
pub const MAXPOSIXLOCKSPERUID = 36;
|
|
pub const MAXID = 37;
|
|
},
|
|
.openbsd => struct {
|
|
pub const OSTYPE = 1;
|
|
pub const OSRELEASE = 2;
|
|
pub const OSREV = 3;
|
|
pub const VERSION = 4;
|
|
pub const MAXVNODES = 5;
|
|
pub const MAXPROC = 6;
|
|
pub const MAXFILES = 7;
|
|
pub const ARGMAX = 8;
|
|
pub const SECURELVL = 9;
|
|
pub const HOSTNAME = 10;
|
|
pub const HOSTID = 11;
|
|
pub const CLOCKRATE = 12;
|
|
|
|
pub const PROF = 16;
|
|
pub const POSIX1 = 17;
|
|
pub const NGROUPS = 18;
|
|
pub const JOB_CONTROL = 19;
|
|
pub const SAVED_IDS = 20;
|
|
pub const BOOTTIME = 21;
|
|
pub const DOMAINNAME = 22;
|
|
pub const MAXPARTITIONS = 23;
|
|
pub const RAWPARTITION = 24;
|
|
pub const MAXTHREAD = 25;
|
|
pub const NTHREADS = 26;
|
|
pub const OSVERSION = 27;
|
|
pub const SOMAXCONN = 28;
|
|
pub const SOMINCONN = 29;
|
|
|
|
pub const NOSUIDCOREDUMP = 32;
|
|
pub const FSYNC = 33;
|
|
pub const SYSVMSG = 34;
|
|
pub const SYSVSEM = 35;
|
|
pub const SYSVSHM = 36;
|
|
|
|
pub const MSGBUFSIZE = 38;
|
|
pub const MALLOCSTATS = 39;
|
|
pub const CPTIME = 40;
|
|
pub const NCHSTATS = 41;
|
|
pub const FORKSTAT = 42;
|
|
pub const NSELCOLL = 43;
|
|
pub const TTY = 44;
|
|
pub const CCPU = 45;
|
|
pub const FSCALE = 46;
|
|
pub const NPROCS = 47;
|
|
pub const MSGBUF = 48;
|
|
pub const POOL = 49;
|
|
pub const STACKGAPRANDOM = 50;
|
|
pub const SYSVIPC_INFO = 51;
|
|
pub const ALLOWKMEM = 52;
|
|
pub const WITNESSWATCH = 53;
|
|
pub const SPLASSERT = 54;
|
|
pub const PROC_ARGS = 55;
|
|
pub const NFILES = 56;
|
|
pub const TTYCOUNT = 57;
|
|
pub const NUMVNODES = 58;
|
|
pub const MBSTAT = 59;
|
|
pub const WITNESS = 60;
|
|
pub const SEMINFO = 61;
|
|
pub const SHMINFO = 62;
|
|
pub const INTRCNT = 63;
|
|
pub const WATCHDOG = 64;
|
|
pub const ALLOWDT = 65;
|
|
pub const PROC = 66;
|
|
pub const MAXCLUSTERS = 67;
|
|
pub const EVCOUNT = 68;
|
|
pub const TIMECOUNTER = 69;
|
|
pub const MAXLOCKSPERUID = 70;
|
|
pub const CPTIME2 = 71;
|
|
pub const CACHEPCT = 72;
|
|
pub const FILE = 73;
|
|
pub const WXABORT = 74;
|
|
pub const CONSDEV = 75;
|
|
pub const NETLIVELOCKS = 76;
|
|
pub const POOL_DEBUG = 77;
|
|
pub const PROC_CWD = 78;
|
|
pub const PROC_NOBROADCASTKILL = 79;
|
|
pub const PROC_VMMAP = 80;
|
|
pub const GLOBAL_PTRACE = 81;
|
|
pub const CONSBUFSIZE = 82;
|
|
pub const CONSBUF = 83;
|
|
pub const AUDIO = 84;
|
|
pub const CPUSTATS = 85;
|
|
pub const PFSTATUS = 86;
|
|
pub const TIMEOUT_STATS = 87;
|
|
pub const UTC_OFFSET = 88;
|
|
pub const VIDEO = 89;
|
|
|
|
pub const PROC_ALL = 0;
|
|
pub const PROC_PID = 1;
|
|
pub const PROC_PGRP = 2;
|
|
pub const PROC_SESSION = 3;
|
|
pub const PROC_TTY = 4;
|
|
pub const PROC_UID = 5;
|
|
pub const PROC_RUID = 6;
|
|
pub const PROC_KTHREAD = 7;
|
|
pub const PROC_SHOW_THREADS = 0x40000000;
|
|
|
|
pub const PROC_ARGV = 1;
|
|
pub const PROC_NARGV = 2;
|
|
pub const PROC_ENV = 3;
|
|
pub const PROC_NENV = 4;
|
|
},
|
|
else => void,
|
|
};
|
|
pub const MADV = switch (native_os) {
|
|
.linux => linux.MADV,
|
|
.emscripten => emscripten.MADV,
|
|
.freebsd => struct {
|
|
pub const NORMAL = 0;
|
|
pub const RANDOM = 1;
|
|
pub const SEQUENTIAL = 2;
|
|
pub const WILLNEED = 3;
|
|
pub const DONTNEED = 4;
|
|
pub const FREE = 5;
|
|
pub const NOSYNC = 6;
|
|
pub const AUTOSYNC = 7;
|
|
pub const NOCORE = 8;
|
|
pub const CORE = 9;
|
|
pub const PROTECT = 10;
|
|
},
|
|
.solaris, .illumos => struct {
|
|
/// no further special treatment
|
|
pub const NORMAL = 0;
|
|
/// expect random page references
|
|
pub const RANDOM = 1;
|
|
/// expect sequential page references
|
|
pub const SEQUENTIAL = 2;
|
|
/// will need these pages
|
|
pub const WILLNEED = 3;
|
|
/// don't need these pages
|
|
pub const DONTNEED = 4;
|
|
/// contents can be freed
|
|
pub const FREE = 5;
|
|
/// default access
|
|
pub const ACCESS_DEFAULT = 6;
|
|
/// next LWP to access heavily
|
|
pub const ACCESS_LWP = 7;
|
|
/// many processes to access heavily
|
|
pub const ACCESS_MANY = 8;
|
|
/// contents will be purged
|
|
pub const PURGE = 9;
|
|
},
|
|
.dragonfly => struct {
|
|
pub const SEQUENTIAL = 2;
|
|
pub const CONTROL_END = SETMAP;
|
|
pub const DONTNEED = 4;
|
|
pub const RANDOM = 1;
|
|
pub const WILLNEED = 3;
|
|
pub const NORMAL = 0;
|
|
pub const CONTROL_START = INVAL;
|
|
pub const FREE = 5;
|
|
pub const NOSYNC = 6;
|
|
pub const AUTOSYNC = 7;
|
|
pub const NOCORE = 8;
|
|
pub const CORE = 9;
|
|
pub const INVAL = 10;
|
|
pub const SETMAP = 11;
|
|
},
|
|
else => void,
|
|
};
|
|
pub const MSF = switch (native_os) {
|
|
.linux => linux.MSF,
|
|
.emscripten => emscripten.MSF,
|
|
.macos, .ios, .tvos, .watchos, .visionos => struct {
|
|
pub const ASYNC = 0x1;
|
|
pub const INVALIDATE = 0x2;
|
|
/// invalidate, leave mapped
|
|
pub const KILLPAGES = 0x4;
|
|
/// deactivate, leave mapped
|
|
pub const DEACTIVATE = 0x8;
|
|
pub const SYNC = 0x10;
|
|
},
|
|
.openbsd, .haiku, .dragonfly, .netbsd, .solaris, .illumos, .freebsd => struct {
|
|
pub const ASYNC = 1;
|
|
pub const INVALIDATE = 2;
|
|
pub const SYNC = 4;
|
|
},
|
|
else => void,
|
|
};
|
|
pub const MMAP2_UNIT = switch (native_os) {
|
|
.linux => linux.MMAP2_UNIT,
|
|
else => void,
|
|
};
|
|
pub const NAME_MAX = switch (native_os) {
|
|
.linux => linux.NAME_MAX,
|
|
.emscripten => emscripten.NAME_MAX,
|
|
// Haiku's headers make this 256, to contain room for the terminating null
|
|
// character, but POSIX definition says that NAME_MAX does not include the
|
|
// terminating null.
|
|
.haiku, .openbsd, .dragonfly, .netbsd, .solaris, .illumos, .freebsd, .macos, .ios, .tvos, .watchos, .visionos => 255,
|
|
else => {},
|
|
};
|
|
pub const PATH_MAX = switch (native_os) {
|
|
.linux => linux.PATH_MAX,
|
|
.emscripten => emscripten.PATH_MAX,
|
|
.wasi => 4096,
|
|
.windows => 260,
|
|
.openbsd, .haiku, .dragonfly, .netbsd, .solaris, .illumos, .freebsd, .macos, .ios, .tvos, .watchos, .visionos => 1024,
|
|
else => {},
|
|
};
|
|
|
|
pub const POLL = switch (native_os) {
|
|
.linux => linux.POLL,
|
|
.emscripten => emscripten.POLL,
|
|
.wasi => struct {
|
|
pub const RDNORM = 0x1;
|
|
pub const WRNORM = 0x2;
|
|
pub const IN = RDNORM;
|
|
pub const OUT = WRNORM;
|
|
pub const ERR = 0x1000;
|
|
pub const HUP = 0x2000;
|
|
pub const NVAL = 0x4000;
|
|
},
|
|
.windows => ws2_32.POLL,
|
|
.macos, .ios, .tvos, .watchos, .visionos => struct {
|
|
pub const IN = 0x001;
|
|
pub const PRI = 0x002;
|
|
pub const OUT = 0x004;
|
|
pub const RDNORM = 0x040;
|
|
pub const WRNORM = OUT;
|
|
pub const RDBAND = 0x080;
|
|
pub const WRBAND = 0x100;
|
|
|
|
pub const EXTEND = 0x0200;
|
|
pub const ATTRIB = 0x0400;
|
|
pub const NLINK = 0x0800;
|
|
pub const WRITE = 0x1000;
|
|
|
|
pub const ERR = 0x008;
|
|
pub const HUP = 0x010;
|
|
pub const NVAL = 0x020;
|
|
|
|
pub const STANDARD = IN | PRI | OUT | RDNORM | RDBAND | WRBAND | ERR | HUP | NVAL;
|
|
},
|
|
.freebsd => struct {
|
|
/// any readable data available.
|
|
pub const IN = 0x0001;
|
|
/// OOB/Urgent readable data.
|
|
pub const PRI = 0x0002;
|
|
/// file descriptor is writeable.
|
|
pub const OUT = 0x0004;
|
|
/// non-OOB/URG data available.
|
|
pub const RDNORM = 0x0040;
|
|
/// no write type differentiation.
|
|
pub const WRNORM = OUT;
|
|
/// OOB/Urgent readable data.
|
|
pub const RDBAND = 0x0080;
|
|
/// OOB/Urgent data can be written.
|
|
pub const WRBAND = 0x0100;
|
|
/// like IN, except ignore EOF.
|
|
pub const INIGNEOF = 0x2000;
|
|
/// some poll error occurred.
|
|
pub const ERR = 0x0008;
|
|
/// file descriptor was "hung up".
|
|
pub const HUP = 0x0010;
|
|
/// requested events "invalid".
|
|
pub const NVAL = 0x0020;
|
|
|
|
pub const STANDARD = IN | PRI | OUT | RDNORM | RDBAND | WRBAND | ERR | HUP | NVAL;
|
|
},
|
|
.solaris, .illumos => struct {
|
|
pub const IN = 0x0001;
|
|
pub const PRI = 0x0002;
|
|
pub const OUT = 0x0004;
|
|
pub const RDNORM = 0x0040;
|
|
pub const WRNORM = .OUT;
|
|
pub const RDBAND = 0x0080;
|
|
pub const WRBAND = 0x0100;
|
|
/// Read-side hangup.
|
|
pub const RDHUP = 0x4000;
|
|
|
|
/// Non-testable events (may not be specified in events).
|
|
pub const ERR = 0x0008;
|
|
pub const HUP = 0x0010;
|
|
pub const NVAL = 0x0020;
|
|
|
|
/// Events to control `/dev/poll` (not specified in revents)
|
|
pub const REMOVE = 0x0800;
|
|
pub const ONESHOT = 0x1000;
|
|
pub const ET = 0x2000;
|
|
},
|
|
.dragonfly, .netbsd => struct {
|
|
/// Testable events (may be specified in events field).
|
|
pub const IN = 0x0001;
|
|
pub const PRI = 0x0002;
|
|
pub const OUT = 0x0004;
|
|
pub const RDNORM = 0x0040;
|
|
pub const WRNORM = OUT;
|
|
pub const RDBAND = 0x0080;
|
|
pub const WRBAND = 0x0100;
|
|
|
|
/// Non-testable events (may not be specified in events field).
|
|
pub const ERR = 0x0008;
|
|
pub const HUP = 0x0010;
|
|
pub const NVAL = 0x0020;
|
|
},
|
|
.haiku => struct {
|
|
/// any readable data available
|
|
pub const IN = 0x0001;
|
|
/// file descriptor is writeable
|
|
pub const OUT = 0x0002;
|
|
pub const RDNORM = IN;
|
|
pub const WRNORM = OUT;
|
|
/// priority readable data
|
|
pub const RDBAND = 0x0008;
|
|
/// priority data can be written
|
|
pub const WRBAND = 0x0010;
|
|
/// high priority readable data
|
|
pub const PRI = 0x0020;
|
|
|
|
/// errors pending
|
|
pub const ERR = 0x0004;
|
|
/// disconnected
|
|
pub const HUP = 0x0080;
|
|
/// invalid file descriptor
|
|
pub const NVAL = 0x1000;
|
|
},
|
|
.openbsd => struct {
|
|
pub const IN = 0x0001;
|
|
pub const PRI = 0x0002;
|
|
pub const OUT = 0x0004;
|
|
pub const ERR = 0x0008;
|
|
pub const HUP = 0x0010;
|
|
pub const NVAL = 0x0020;
|
|
pub const RDNORM = 0x0040;
|
|
pub const NORM = RDNORM;
|
|
pub const WRNORM = OUT;
|
|
pub const RDBAND = 0x0080;
|
|
pub const WRBAND = 0x0100;
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
/// Basic memory protection flags
|
|
pub const PROT = switch (native_os) {
|
|
.linux => linux.PROT,
|
|
.emscripten => emscripten.PROT,
|
|
.openbsd, .haiku, .dragonfly, .netbsd, .solaris, .illumos, .freebsd, .windows => struct {
|
|
/// page can not be accessed
|
|
pub const NONE = 0x0;
|
|
/// page can be read
|
|
pub const READ = 0x1;
|
|
/// page can be written
|
|
pub const WRITE = 0x2;
|
|
/// page can be executed
|
|
pub const EXEC = 0x4;
|
|
},
|
|
.macos, .ios, .tvos, .watchos, .visionos => struct {
|
|
/// [MC2] no permissions
|
|
pub const NONE: vm_prot_t = 0x00;
|
|
/// [MC2] pages can be read
|
|
pub const READ: vm_prot_t = 0x01;
|
|
/// [MC2] pages can be written
|
|
pub const WRITE: vm_prot_t = 0x02;
|
|
/// [MC2] pages can be executed
|
|
pub const EXEC: vm_prot_t = 0x04;
|
|
/// When a caller finds that they cannot obtain write permission on a
|
|
/// mapped entry, the following flag can be used. The entry will be
|
|
/// made "needs copy" effectively copying the object (using COW),
|
|
/// and write permission will be added to the maximum protections for
|
|
/// the associated entry.
|
|
pub const COPY: vm_prot_t = 0x10;
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
pub const REG = switch (native_os) {
|
|
.linux => linux.REG,
|
|
.emscripten => emscripten.REG,
|
|
.freebsd => switch (builtin.cpu.arch) {
|
|
.aarch64 => struct {
|
|
pub const FP = 29;
|
|
pub const SP = 31;
|
|
pub const PC = 32;
|
|
},
|
|
.arm => struct {
|
|
pub const FP = 11;
|
|
pub const SP = 13;
|
|
pub const PC = 15;
|
|
},
|
|
.x86_64 => struct {
|
|
pub const RBP = 12;
|
|
pub const RIP = 21;
|
|
pub const RSP = 24;
|
|
},
|
|
else => struct {},
|
|
},
|
|
.solaris, .illumos => struct {
|
|
pub const R15 = 0;
|
|
pub const R14 = 1;
|
|
pub const R13 = 2;
|
|
pub const R12 = 3;
|
|
pub const R11 = 4;
|
|
pub const R10 = 5;
|
|
pub const R9 = 6;
|
|
pub const R8 = 7;
|
|
pub const RDI = 8;
|
|
pub const RSI = 9;
|
|
pub const RBP = 10;
|
|
pub const RBX = 11;
|
|
pub const RDX = 12;
|
|
pub const RCX = 13;
|
|
pub const RAX = 14;
|
|
pub const RIP = 17;
|
|
pub const RSP = 20;
|
|
},
|
|
.netbsd => switch (builtin.cpu.arch) {
|
|
.aarch64 => struct {
|
|
pub const FP = 29;
|
|
pub const SP = 31;
|
|
pub const PC = 32;
|
|
},
|
|
.arm => struct {
|
|
pub const FP = 11;
|
|
pub const SP = 13;
|
|
pub const PC = 15;
|
|
},
|
|
.x86_64 => struct {
|
|
pub const RDI = 0;
|
|
pub const RSI = 1;
|
|
pub const RDX = 2;
|
|
pub const RCX = 3;
|
|
pub const R8 = 4;
|
|
pub const R9 = 5;
|
|
pub const R10 = 6;
|
|
pub const R11 = 7;
|
|
pub const R12 = 8;
|
|
pub const R13 = 9;
|
|
pub const R14 = 10;
|
|
pub const R15 = 11;
|
|
pub const RBP = 12;
|
|
pub const RBX = 13;
|
|
pub const RAX = 14;
|
|
pub const GS = 15;
|
|
pub const FS = 16;
|
|
pub const ES = 17;
|
|
pub const DS = 18;
|
|
pub const TRAPNO = 19;
|
|
pub const ERR = 20;
|
|
pub const RIP = 21;
|
|
pub const CS = 22;
|
|
pub const RFLAGS = 23;
|
|
pub const RSP = 24;
|
|
pub const SS = 25;
|
|
},
|
|
else => struct {},
|
|
},
|
|
else => struct {},
|
|
};
|
|
pub const RLIM = switch (native_os) {
|
|
.linux => linux.RLIM,
|
|
.emscripten => emscripten.RLIM,
|
|
.openbsd, .haiku, .dragonfly, .netbsd, .freebsd, .macos, .ios, .tvos, .watchos, .visionos => struct {
|
|
/// No limit
|
|
pub const INFINITY: rlim_t = (1 << 63) - 1;
|
|
|
|
pub const SAVED_MAX = INFINITY;
|
|
pub const SAVED_CUR = INFINITY;
|
|
},
|
|
.solaris, .illumos => struct {
|
|
/// No limit
|
|
pub const INFINITY: rlim_t = (1 << 63) - 3;
|
|
pub const SAVED_MAX: rlim_t = (1 << 63) - 2;
|
|
pub const SAVED_CUR: rlim_t = (1 << 63) - 1;
|
|
},
|
|
else => void,
|
|
};
|
|
pub const S = switch (native_os) {
|
|
.linux => linux.S,
|
|
.emscripten => emscripten.S,
|
|
.wasi => struct {
|
|
pub const IEXEC = @compileError("TODO audit this");
|
|
pub const IFBLK = 0x6000;
|
|
pub const IFCHR = 0x2000;
|
|
pub const IFDIR = 0x4000;
|
|
pub const IFIFO = 0xc000;
|
|
pub const IFLNK = 0xa000;
|
|
pub const IFMT = IFBLK | IFCHR | IFDIR | IFIFO | IFLNK | IFREG | IFSOCK;
|
|
pub const IFREG = 0x8000;
|
|
/// There's no concept of UNIX domain socket but we define this value here
|
|
/// in order to line with other OSes.
|
|
pub const IFSOCK = 0x1;
|
|
},
|
|
.macos, .ios, .tvos, .watchos, .visionos => struct {
|
|
pub const IFMT = 0o170000;
|
|
|
|
pub const IFIFO = 0o010000;
|
|
pub const IFCHR = 0o020000;
|
|
pub const IFDIR = 0o040000;
|
|
pub const IFBLK = 0o060000;
|
|
pub const IFREG = 0o100000;
|
|
pub const IFLNK = 0o120000;
|
|
pub const IFSOCK = 0o140000;
|
|
pub const IFWHT = 0o160000;
|
|
|
|
pub const ISUID = 0o4000;
|
|
pub const ISGID = 0o2000;
|
|
pub const ISVTX = 0o1000;
|
|
pub const IRWXU = 0o700;
|
|
pub const IRUSR = 0o400;
|
|
pub const IWUSR = 0o200;
|
|
pub const IXUSR = 0o100;
|
|
pub const IRWXG = 0o070;
|
|
pub const IRGRP = 0o040;
|
|
pub const IWGRP = 0o020;
|
|
pub const IXGRP = 0o010;
|
|
pub const IRWXO = 0o007;
|
|
pub const IROTH = 0o004;
|
|
pub const IWOTH = 0o002;
|
|
pub const IXOTH = 0o001;
|
|
|
|
pub fn ISFIFO(m: u32) bool {
|
|
return m & IFMT == IFIFO;
|
|
}
|
|
|
|
pub fn ISCHR(m: u32) bool {
|
|
return m & IFMT == IFCHR;
|
|
}
|
|
|
|
pub fn ISDIR(m: u32) bool {
|
|
return m & IFMT == IFDIR;
|
|
}
|
|
|
|
pub fn ISBLK(m: u32) bool {
|
|
return m & IFMT == IFBLK;
|
|
}
|
|
|
|
pub fn ISREG(m: u32) bool {
|
|
return m & IFMT == IFREG;
|
|
}
|
|
|
|
pub fn ISLNK(m: u32) bool {
|
|
return m & IFMT == IFLNK;
|
|
}
|
|
|
|
pub fn ISSOCK(m: u32) bool {
|
|
return m & IFMT == IFSOCK;
|
|
}
|
|
|
|
pub fn IWHT(m: u32) bool {
|
|
return m & IFMT == IFWHT;
|
|
}
|
|
},
|
|
.freebsd => struct {
|
|
pub const IFMT = 0o170000;
|
|
|
|
pub const IFIFO = 0o010000;
|
|
pub const IFCHR = 0o020000;
|
|
pub const IFDIR = 0o040000;
|
|
pub const IFBLK = 0o060000;
|
|
pub const IFREG = 0o100000;
|
|
pub const IFLNK = 0o120000;
|
|
pub const IFSOCK = 0o140000;
|
|
pub const IFWHT = 0o160000;
|
|
|
|
pub const ISUID = 0o4000;
|
|
pub const ISGID = 0o2000;
|
|
pub const ISVTX = 0o1000;
|
|
pub const IRWXU = 0o700;
|
|
pub const IRUSR = 0o400;
|
|
pub const IWUSR = 0o200;
|
|
pub const IXUSR = 0o100;
|
|
pub const IRWXG = 0o070;
|
|
pub const IRGRP = 0o040;
|
|
pub const IWGRP = 0o020;
|
|
pub const IXGRP = 0o010;
|
|
pub const IRWXO = 0o007;
|
|
pub const IROTH = 0o004;
|
|
pub const IWOTH = 0o002;
|
|
pub const IXOTH = 0o001;
|
|
|
|
pub fn ISFIFO(m: u32) bool {
|
|
return m & IFMT == IFIFO;
|
|
}
|
|
|
|
pub fn ISCHR(m: u32) bool {
|
|
return m & IFMT == IFCHR;
|
|
}
|
|
|
|
pub fn ISDIR(m: u32) bool {
|
|
return m & IFMT == IFDIR;
|
|
}
|
|
|
|
pub fn ISBLK(m: u32) bool {
|
|
return m & IFMT == IFBLK;
|
|
}
|
|
|
|
pub fn ISREG(m: u32) bool {
|
|
return m & IFMT == IFREG;
|
|
}
|
|
|
|
pub fn ISLNK(m: u32) bool {
|
|
return m & IFMT == IFLNK;
|
|
}
|
|
|
|
pub fn ISSOCK(m: u32) bool {
|
|
return m & IFMT == IFSOCK;
|
|
}
|
|
|
|
pub fn IWHT(m: u32) bool {
|
|
return m & IFMT == IFWHT;
|
|
}
|
|
},
|
|
.solaris, .illumos => struct {
|
|
pub const IFMT = 0o170000;
|
|
|
|
pub const IFIFO = 0o010000;
|
|
pub const IFCHR = 0o020000;
|
|
pub const IFDIR = 0o040000;
|
|
pub const IFBLK = 0o060000;
|
|
pub const IFREG = 0o100000;
|
|
pub const IFLNK = 0o120000;
|
|
pub const IFSOCK = 0o140000;
|
|
/// SunOS 2.6 Door
|
|
pub const IFDOOR = 0o150000;
|
|
/// Solaris 10 Event Port
|
|
pub const IFPORT = 0o160000;
|
|
|
|
pub const ISUID = 0o4000;
|
|
pub const ISGID = 0o2000;
|
|
pub const ISVTX = 0o1000;
|
|
pub const IRWXU = 0o700;
|
|
pub const IRUSR = 0o400;
|
|
pub const IWUSR = 0o200;
|
|
pub const IXUSR = 0o100;
|
|
pub const IRWXG = 0o070;
|
|
pub const IRGRP = 0o040;
|
|
pub const IWGRP = 0o020;
|
|
pub const IXGRP = 0o010;
|
|
pub const IRWXO = 0o007;
|
|
pub const IROTH = 0o004;
|
|
pub const IWOTH = 0o002;
|
|
pub const IXOTH = 0o001;
|
|
|
|
pub fn ISFIFO(m: u32) bool {
|
|
return m & IFMT == IFIFO;
|
|
}
|
|
|
|
pub fn ISCHR(m: u32) bool {
|
|
return m & IFMT == IFCHR;
|
|
}
|
|
|
|
pub fn ISDIR(m: u32) bool {
|
|
return m & IFMT == IFDIR;
|
|
}
|
|
|
|
pub fn ISBLK(m: u32) bool {
|
|
return m & IFMT == IFBLK;
|
|
}
|
|
|
|
pub fn ISREG(m: u32) bool {
|
|
return m & IFMT == IFREG;
|
|
}
|
|
|
|
pub fn ISLNK(m: u32) bool {
|
|
return m & IFMT == IFLNK;
|
|
}
|
|
|
|
pub fn ISSOCK(m: u32) bool {
|
|
return m & IFMT == IFSOCK;
|
|
}
|
|
|
|
pub fn ISDOOR(m: u32) bool {
|
|
return m & IFMT == IFDOOR;
|
|
}
|
|
|
|
pub fn ISPORT(m: u32) bool {
|
|
return m & IFMT == IFPORT;
|
|
}
|
|
},
|
|
.netbsd => struct {
|
|
pub const IFMT = 0o170000;
|
|
|
|
pub const IFIFO = 0o010000;
|
|
pub const IFCHR = 0o020000;
|
|
pub const IFDIR = 0o040000;
|
|
pub const IFBLK = 0o060000;
|
|
pub const IFREG = 0o100000;
|
|
pub const IFLNK = 0o120000;
|
|
pub const IFSOCK = 0o140000;
|
|
pub const IFWHT = 0o160000;
|
|
|
|
pub const ISUID = 0o4000;
|
|
pub const ISGID = 0o2000;
|
|
pub const ISVTX = 0o1000;
|
|
pub const IRWXU = 0o700;
|
|
pub const IRUSR = 0o400;
|
|
pub const IWUSR = 0o200;
|
|
pub const IXUSR = 0o100;
|
|
pub const IRWXG = 0o070;
|
|
pub const IRGRP = 0o040;
|
|
pub const IWGRP = 0o020;
|
|
pub const IXGRP = 0o010;
|
|
pub const IRWXO = 0o007;
|
|
pub const IROTH = 0o004;
|
|
pub const IWOTH = 0o002;
|
|
pub const IXOTH = 0o001;
|
|
|
|
pub fn ISFIFO(m: u32) bool {
|
|
return m & IFMT == IFIFO;
|
|
}
|
|
|
|
pub fn ISCHR(m: u32) bool {
|
|
return m & IFMT == IFCHR;
|
|
}
|
|
|
|
pub fn ISDIR(m: u32) bool {
|
|
return m & IFMT == IFDIR;
|
|
}
|
|
|
|
pub fn ISBLK(m: u32) bool {
|
|
return m & IFMT == IFBLK;
|
|
}
|
|
|
|
pub fn ISREG(m: u32) bool {
|
|
return m & IFMT == IFREG;
|
|
}
|
|
|
|
pub fn ISLNK(m: u32) bool {
|
|
return m & IFMT == IFLNK;
|
|
}
|
|
|
|
pub fn ISSOCK(m: u32) bool {
|
|
return m & IFMT == IFSOCK;
|
|
}
|
|
|
|
pub fn IWHT(m: u32) bool {
|
|
return m & IFMT == IFWHT;
|
|
}
|
|
},
|
|
.dragonfly => struct {
|
|
pub const IREAD = IRUSR;
|
|
pub const IEXEC = IXUSR;
|
|
pub const IWRITE = IWUSR;
|
|
pub const IXOTH = 1;
|
|
pub const IWOTH = 2;
|
|
pub const IROTH = 4;
|
|
pub const IRWXO = 7;
|
|
pub const IXGRP = 8;
|
|
pub const IWGRP = 16;
|
|
pub const IRGRP = 32;
|
|
pub const IRWXG = 56;
|
|
pub const IXUSR = 64;
|
|
pub const IWUSR = 128;
|
|
pub const IRUSR = 256;
|
|
pub const IRWXU = 448;
|
|
pub const ISTXT = 512;
|
|
pub const BLKSIZE = 512;
|
|
pub const ISVTX = 512;
|
|
pub const ISGID = 1024;
|
|
pub const ISUID = 2048;
|
|
pub const IFIFO = 4096;
|
|
pub const IFCHR = 8192;
|
|
pub const IFDIR = 16384;
|
|
pub const IFBLK = 24576;
|
|
pub const IFREG = 32768;
|
|
pub const IFDB = 36864;
|
|
pub const IFLNK = 40960;
|
|
pub const IFSOCK = 49152;
|
|
pub const IFWHT = 57344;
|
|
pub const IFMT = 61440;
|
|
|
|
pub fn ISCHR(m: u32) bool {
|
|
return m & IFMT == IFCHR;
|
|
}
|
|
},
|
|
.haiku => struct {
|
|
pub const IFMT = 0o170000;
|
|
pub const IFSOCK = 0o140000;
|
|
pub const IFLNK = 0o120000;
|
|
pub const IFREG = 0o100000;
|
|
pub const IFBLK = 0o060000;
|
|
pub const IFDIR = 0o040000;
|
|
pub const IFCHR = 0o020000;
|
|
pub const IFIFO = 0o010000;
|
|
pub const INDEX_DIR = 0o4000000000;
|
|
|
|
pub const IUMSK = 0o7777;
|
|
pub const ISUID = 0o4000;
|
|
pub const ISGID = 0o2000;
|
|
pub const ISVTX = 0o1000;
|
|
pub const IRWXU = 0o700;
|
|
pub const IRUSR = 0o400;
|
|
pub const IWUSR = 0o200;
|
|
pub const IXUSR = 0o100;
|
|
pub const IRWXG = 0o070;
|
|
pub const IRGRP = 0o040;
|
|
pub const IWGRP = 0o020;
|
|
pub const IXGRP = 0o010;
|
|
pub const IRWXO = 0o007;
|
|
pub const IROTH = 0o004;
|
|
pub const IWOTH = 0o002;
|
|
pub const IXOTH = 0o001;
|
|
|
|
pub fn ISREG(m: u32) bool {
|
|
return m & IFMT == IFREG;
|
|
}
|
|
|
|
pub fn ISLNK(m: u32) bool {
|
|
return m & IFMT == IFLNK;
|
|
}
|
|
|
|
pub fn ISBLK(m: u32) bool {
|
|
return m & IFMT == IFBLK;
|
|
}
|
|
|
|
pub fn ISDIR(m: u32) bool {
|
|
return m & IFMT == IFDIR;
|
|
}
|
|
|
|
pub fn ISCHR(m: u32) bool {
|
|
return m & IFMT == IFCHR;
|
|
}
|
|
|
|
pub fn ISFIFO(m: u32) bool {
|
|
return m & IFMT == IFIFO;
|
|
}
|
|
|
|
pub fn ISSOCK(m: u32) bool {
|
|
return m & IFMT == IFSOCK;
|
|
}
|
|
|
|
pub fn ISINDEX(m: u32) bool {
|
|
return m & INDEX_DIR == INDEX_DIR;
|
|
}
|
|
},
|
|
.openbsd => struct {
|
|
pub const IFMT = 0o170000;
|
|
|
|
pub const IFIFO = 0o010000;
|
|
pub const IFCHR = 0o020000;
|
|
pub const IFDIR = 0o040000;
|
|
pub const IFBLK = 0o060000;
|
|
pub const IFREG = 0o100000;
|
|
pub const IFLNK = 0o120000;
|
|
pub const IFSOCK = 0o140000;
|
|
|
|
pub const ISUID = 0o4000;
|
|
pub const ISGID = 0o2000;
|
|
pub const ISVTX = 0o1000;
|
|
pub const IRWXU = 0o700;
|
|
pub const IRUSR = 0o400;
|
|
pub const IWUSR = 0o200;
|
|
pub const IXUSR = 0o100;
|
|
pub const IRWXG = 0o070;
|
|
pub const IRGRP = 0o040;
|
|
pub const IWGRP = 0o020;
|
|
pub const IXGRP = 0o010;
|
|
pub const IRWXO = 0o007;
|
|
pub const IROTH = 0o004;
|
|
pub const IWOTH = 0o002;
|
|
pub const IXOTH = 0o001;
|
|
|
|
pub fn ISFIFO(m: u32) bool {
|
|
return m & IFMT == IFIFO;
|
|
}
|
|
|
|
pub fn ISCHR(m: u32) bool {
|
|
return m & IFMT == IFCHR;
|
|
}
|
|
|
|
pub fn ISDIR(m: u32) bool {
|
|
return m & IFMT == IFDIR;
|
|
}
|
|
|
|
pub fn ISBLK(m: u32) bool {
|
|
return m & IFMT == IFBLK;
|
|
}
|
|
|
|
pub fn ISREG(m: u32) bool {
|
|
return m & IFMT == IFREG;
|
|
}
|
|
|
|
pub fn ISLNK(m: u32) bool {
|
|
return m & IFMT == IFLNK;
|
|
}
|
|
|
|
pub fn ISSOCK(m: u32) bool {
|
|
return m & IFMT == IFSOCK;
|
|
}
|
|
},
|
|
else => void,
|
|
};
|
|
pub const SA = switch (native_os) {
|
|
.linux => linux.SA,
|
|
.emscripten => emscripten.SA,
|
|
.macos, .ios, .tvos, .watchos, .visionos => struct {
|
|
/// take signal on signal stack
|
|
pub const ONSTACK = 0x0001;
|
|
/// restart system on signal return
|
|
pub const RESTART = 0x0002;
|
|
/// reset to SIG.DFL when taking signal
|
|
pub const RESETHAND = 0x0004;
|
|
/// do not generate SIG.CHLD on child stop
|
|
pub const NOCLDSTOP = 0x0008;
|
|
/// don't mask the signal we're delivering
|
|
pub const NODEFER = 0x0010;
|
|
/// don't keep zombies around
|
|
pub const NOCLDWAIT = 0x0020;
|
|
/// signal handler with SIGINFO args
|
|
pub const SIGINFO = 0x0040;
|
|
/// do not bounce off kernel's sigtramp
|
|
pub const USERTRAMP = 0x0100;
|
|
/// signal handler with SIGINFO args with 64bit regs information
|
|
pub const @"64REGSET" = 0x0200;
|
|
},
|
|
.freebsd => struct {
|
|
pub const ONSTACK = 0x0001;
|
|
pub const RESTART = 0x0002;
|
|
pub const RESETHAND = 0x0004;
|
|
pub const NOCLDSTOP = 0x0008;
|
|
pub const NODEFER = 0x0010;
|
|
pub const NOCLDWAIT = 0x0020;
|
|
pub const SIGINFO = 0x0040;
|
|
},
|
|
.solaris, .illumos => struct {
|
|
pub const ONSTACK = 0x00000001;
|
|
pub const RESETHAND = 0x00000002;
|
|
pub const RESTART = 0x00000004;
|
|
pub const SIGINFO = 0x00000008;
|
|
pub const NODEFER = 0x00000010;
|
|
pub const NOCLDWAIT = 0x00010000;
|
|
},
|
|
.netbsd => struct {
|
|
pub const ONSTACK = 0x0001;
|
|
pub const RESTART = 0x0002;
|
|
pub const RESETHAND = 0x0004;
|
|
pub const NOCLDSTOP = 0x0008;
|
|
pub const NODEFER = 0x0010;
|
|
pub const NOCLDWAIT = 0x0020;
|
|
pub const SIGINFO = 0x0040;
|
|
},
|
|
.dragonfly => struct {
|
|
pub const ONSTACK = 0x0001;
|
|
pub const RESTART = 0x0002;
|
|
pub const RESETHAND = 0x0004;
|
|
pub const NODEFER = 0x0010;
|
|
pub const NOCLDWAIT = 0x0020;
|
|
pub const SIGINFO = 0x0040;
|
|
},
|
|
.haiku => struct {
|
|
pub const NOCLDSTOP = 0x01;
|
|
pub const NOCLDWAIT = 0x02;
|
|
pub const RESETHAND = 0x04;
|
|
pub const NODEFER = 0x08;
|
|
pub const RESTART = 0x10;
|
|
pub const ONSTACK = 0x20;
|
|
pub const SIGINFO = 0x40;
|
|
pub const NOMASK = NODEFER;
|
|
pub const STACK = ONSTACK;
|
|
pub const ONESHOT = RESETHAND;
|
|
},
|
|
.openbsd => struct {
|
|
pub const ONSTACK = 0x0001;
|
|
pub const RESTART = 0x0002;
|
|
pub const RESETHAND = 0x0004;
|
|
pub const NOCLDSTOP = 0x0008;
|
|
pub const NODEFER = 0x0010;
|
|
pub const NOCLDWAIT = 0x0020;
|
|
pub const SIGINFO = 0x0040;
|
|
},
|
|
else => void,
|
|
};
|
|
pub const sigval_t = switch (native_os) {
|
|
.netbsd, .solaris, .illumos => extern union {
|
|
int: i32,
|
|
ptr: ?*anyopaque,
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
pub const SC = switch (native_os) {
|
|
.linux => linux.SC,
|
|
else => void,
|
|
};
|
|
pub const SEEK = switch (native_os) {
|
|
.linux => linux.SEEK,
|
|
.emscripten => emscripten.SEEK,
|
|
.wasi => struct {
|
|
pub const SET: wasi.whence_t = .SET;
|
|
pub const CUR: wasi.whence_t = .CUR;
|
|
pub const END: wasi.whence_t = .END;
|
|
},
|
|
.openbsd, .haiku, .netbsd, .freebsd, .macos, .ios, .tvos, .watchos, .visionos, .windows => struct {
|
|
pub const SET = 0;
|
|
pub const CUR = 1;
|
|
pub const END = 2;
|
|
},
|
|
.dragonfly, .solaris, .illumos => struct {
|
|
pub const SET = 0;
|
|
pub const CUR = 1;
|
|
pub const END = 2;
|
|
pub const DATA = 3;
|
|
pub const HOLE = 4;
|
|
},
|
|
else => void,
|
|
};
|
|
pub const SHUT = switch (native_os) {
|
|
.linux => linux.SHUT,
|
|
.emscripten => emscripten.SHUT,
|
|
else => struct {
|
|
pub const RD = 0;
|
|
pub const WR = 1;
|
|
pub const RDWR = 2;
|
|
},
|
|
};
|
|
|
|
/// Signal types
|
|
pub const SIG = switch (native_os) {
|
|
.linux => linux.SIG,
|
|
.emscripten => emscripten.SIG,
|
|
.windows => struct {
|
|
/// interrupt
|
|
pub const INT = 2;
|
|
/// illegal instruction - invalid function image
|
|
pub const ILL = 4;
|
|
/// floating point exception
|
|
pub const FPE = 8;
|
|
/// segment violation
|
|
pub const SEGV = 11;
|
|
/// Software termination signal from kill
|
|
pub const TERM = 15;
|
|
/// Ctrl-Break sequence
|
|
pub const BREAK = 21;
|
|
/// abnormal termination triggered by abort call
|
|
pub const ABRT = 22;
|
|
/// SIGABRT compatible with other platforms, same as SIGABRT
|
|
pub const ABRT_COMPAT = 6;
|
|
|
|
// Signal action codes
|
|
/// default signal action
|
|
pub const DFL = 0;
|
|
/// ignore signal
|
|
pub const IGN = 1;
|
|
/// return current value
|
|
pub const GET = 2;
|
|
/// signal gets error
|
|
pub const SGE = 3;
|
|
/// acknowledge
|
|
pub const ACK = 4;
|
|
/// Signal error value (returned by signal call on error)
|
|
pub const ERR = -1;
|
|
},
|
|
.macos, .ios, .tvos, .watchos, .visionos => struct {
|
|
pub const ERR: ?Sigaction.handler_fn = @ptrFromInt(maxInt(usize));
|
|
pub const DFL: ?Sigaction.handler_fn = @ptrFromInt(0);
|
|
pub const IGN: ?Sigaction.handler_fn = @ptrFromInt(1);
|
|
pub const HOLD: ?Sigaction.handler_fn = @ptrFromInt(5);
|
|
|
|
/// block specified signal set
|
|
pub const BLOCK = 1;
|
|
/// unblock specified signal set
|
|
pub const UNBLOCK = 2;
|
|
/// set specified signal set
|
|
pub const SETMASK = 3;
|
|
/// hangup
|
|
pub const HUP = 1;
|
|
/// interrupt
|
|
pub const INT = 2;
|
|
/// quit
|
|
pub const QUIT = 3;
|
|
/// illegal instruction (not reset when caught)
|
|
pub const ILL = 4;
|
|
/// trace trap (not reset when caught)
|
|
pub const TRAP = 5;
|
|
/// abort()
|
|
pub const ABRT = 6;
|
|
/// pollable event ([XSR] generated, not supported)
|
|
pub const POLL = 7;
|
|
/// compatibility
|
|
pub const IOT = ABRT;
|
|
/// EMT instruction
|
|
pub const EMT = 7;
|
|
/// floating point exception
|
|
pub const FPE = 8;
|
|
/// kill (cannot be caught or ignored)
|
|
pub const KILL = 9;
|
|
/// bus error
|
|
pub const BUS = 10;
|
|
/// segmentation violation
|
|
pub const SEGV = 11;
|
|
/// bad argument to system call
|
|
pub const SYS = 12;
|
|
/// write on a pipe with no one to read it
|
|
pub const PIPE = 13;
|
|
/// alarm clock
|
|
pub const ALRM = 14;
|
|
/// software termination signal from kill
|
|
pub const TERM = 15;
|
|
/// urgent condition on IO channel
|
|
pub const URG = 16;
|
|
/// sendable stop signal not from tty
|
|
pub const STOP = 17;
|
|
/// stop signal from tty
|
|
pub const TSTP = 18;
|
|
/// continue a stopped process
|
|
pub const CONT = 19;
|
|
/// to parent on child stop or exit
|
|
pub const CHLD = 20;
|
|
/// to readers pgrp upon background tty read
|
|
pub const TTIN = 21;
|
|
/// like TTIN for output if (tp->t_local<OSTOP)
|
|
pub const TTOU = 22;
|
|
/// input/output possible signal
|
|
pub const IO = 23;
|
|
/// exceeded CPU time limit
|
|
pub const XCPU = 24;
|
|
/// exceeded file size limit
|
|
pub const XFSZ = 25;
|
|
/// virtual time alarm
|
|
pub const VTALRM = 26;
|
|
/// profiling time alarm
|
|
pub const PROF = 27;
|
|
/// window size changes
|
|
pub const WINCH = 28;
|
|
/// information request
|
|
pub const INFO = 29;
|
|
/// user defined signal 1
|
|
pub const USR1 = 30;
|
|
/// user defined signal 2
|
|
pub const USR2 = 31;
|
|
},
|
|
.freebsd => struct {
|
|
pub const HUP = 1;
|
|
pub const INT = 2;
|
|
pub const QUIT = 3;
|
|
pub const ILL = 4;
|
|
pub const TRAP = 5;
|
|
pub const ABRT = 6;
|
|
pub const IOT = ABRT;
|
|
pub const EMT = 7;
|
|
pub const FPE = 8;
|
|
pub const KILL = 9;
|
|
pub const BUS = 10;
|
|
pub const SEGV = 11;
|
|
pub const SYS = 12;
|
|
pub const PIPE = 13;
|
|
pub const ALRM = 14;
|
|
pub const TERM = 15;
|
|
pub const URG = 16;
|
|
pub const STOP = 17;
|
|
pub const TSTP = 18;
|
|
pub const CONT = 19;
|
|
pub const CHLD = 20;
|
|
pub const TTIN = 21;
|
|
pub const TTOU = 22;
|
|
pub const IO = 23;
|
|
pub const XCPU = 24;
|
|
pub const XFSZ = 25;
|
|
pub const VTALRM = 26;
|
|
pub const PROF = 27;
|
|
pub const WINCH = 28;
|
|
pub const INFO = 29;
|
|
pub const USR1 = 30;
|
|
pub const USR2 = 31;
|
|
pub const THR = 32;
|
|
pub const LWP = THR;
|
|
pub const LIBRT = 33;
|
|
|
|
pub const RTMIN = 65;
|
|
pub const RTMAX = 126;
|
|
|
|
pub const BLOCK = 1;
|
|
pub const UNBLOCK = 2;
|
|
pub const SETMASK = 3;
|
|
|
|
pub const DFL: ?Sigaction.handler_fn = @ptrFromInt(0);
|
|
pub const IGN: ?Sigaction.handler_fn = @ptrFromInt(1);
|
|
pub const ERR: ?Sigaction.handler_fn = @ptrFromInt(maxInt(usize));
|
|
|
|
pub const WORDS = 4;
|
|
pub const MAXSIG = 128;
|
|
|
|
pub inline fn IDX(sig: usize) usize {
|
|
return sig - 1;
|
|
}
|
|
pub inline fn WORD(sig: usize) usize {
|
|
return IDX(sig) >> 5;
|
|
}
|
|
pub inline fn BIT(sig: usize) usize {
|
|
return 1 << (IDX(sig) & 31);
|
|
}
|
|
pub inline fn VALID(sig: usize) usize {
|
|
return sig <= MAXSIG and sig > 0;
|
|
}
|
|
},
|
|
.solaris, .illumos => struct {
|
|
pub const DFL: ?Sigaction.handler_fn = @ptrFromInt(0);
|
|
pub const ERR: ?Sigaction.handler_fn = @ptrFromInt(maxInt(usize));
|
|
pub const IGN: ?Sigaction.handler_fn = @ptrFromInt(1);
|
|
pub const HOLD: ?Sigaction.handler_fn = @ptrFromInt(2);
|
|
|
|
pub const WORDS = 4;
|
|
pub const MAXSIG = 75;
|
|
|
|
pub const SIG_BLOCK = 1;
|
|
pub const SIG_UNBLOCK = 2;
|
|
pub const SIG_SETMASK = 3;
|
|
|
|
pub const HUP = 1;
|
|
pub const INT = 2;
|
|
pub const QUIT = 3;
|
|
pub const ILL = 4;
|
|
pub const TRAP = 5;
|
|
pub const IOT = 6;
|
|
pub const ABRT = 6;
|
|
pub const EMT = 7;
|
|
pub const FPE = 8;
|
|
pub const KILL = 9;
|
|
pub const BUS = 10;
|
|
pub const SEGV = 11;
|
|
pub const SYS = 12;
|
|
pub const PIPE = 13;
|
|
pub const ALRM = 14;
|
|
pub const TERM = 15;
|
|
pub const USR1 = 16;
|
|
pub const USR2 = 17;
|
|
pub const CLD = 18;
|
|
pub const CHLD = 18;
|
|
pub const PWR = 19;
|
|
pub const WINCH = 20;
|
|
pub const URG = 21;
|
|
pub const POLL = 22;
|
|
pub const IO = .POLL;
|
|
pub const STOP = 23;
|
|
pub const TSTP = 24;
|
|
pub const CONT = 25;
|
|
pub const TTIN = 26;
|
|
pub const TTOU = 27;
|
|
pub const VTALRM = 28;
|
|
pub const PROF = 29;
|
|
pub const XCPU = 30;
|
|
pub const XFSZ = 31;
|
|
pub const WAITING = 32;
|
|
pub const LWP = 33;
|
|
pub const FREEZE = 34;
|
|
pub const THAW = 35;
|
|
pub const CANCEL = 36;
|
|
pub const LOST = 37;
|
|
pub const XRES = 38;
|
|
pub const JVM1 = 39;
|
|
pub const JVM2 = 40;
|
|
pub const INFO = 41;
|
|
|
|
pub const RTMIN = 42;
|
|
pub const RTMAX = 74;
|
|
|
|
pub inline fn IDX(sig: usize) usize {
|
|
return sig - 1;
|
|
}
|
|
pub inline fn WORD(sig: usize) usize {
|
|
return IDX(sig) >> 5;
|
|
}
|
|
pub inline fn BIT(sig: usize) usize {
|
|
return 1 << (IDX(sig) & 31);
|
|
}
|
|
pub inline fn VALID(sig: usize) usize {
|
|
return sig <= MAXSIG and sig > 0;
|
|
}
|
|
},
|
|
.netbsd => struct {
|
|
pub const DFL: ?Sigaction.handler_fn = @ptrFromInt(0);
|
|
pub const IGN: ?Sigaction.handler_fn = @ptrFromInt(1);
|
|
pub const ERR: ?Sigaction.handler_fn = @ptrFromInt(maxInt(usize));
|
|
|
|
pub const WORDS = 4;
|
|
pub const MAXSIG = 128;
|
|
|
|
pub const BLOCK = 1;
|
|
pub const UNBLOCK = 2;
|
|
pub const SETMASK = 3;
|
|
|
|
pub const HUP = 1;
|
|
pub const INT = 2;
|
|
pub const QUIT = 3;
|
|
pub const ILL = 4;
|
|
pub const TRAP = 5;
|
|
pub const ABRT = 6;
|
|
pub const IOT = ABRT;
|
|
pub const EMT = 7;
|
|
pub const FPE = 8;
|
|
pub const KILL = 9;
|
|
pub const BUS = 10;
|
|
pub const SEGV = 11;
|
|
pub const SYS = 12;
|
|
pub const PIPE = 13;
|
|
pub const ALRM = 14;
|
|
pub const TERM = 15;
|
|
pub const URG = 16;
|
|
pub const STOP = 17;
|
|
pub const TSTP = 18;
|
|
pub const CONT = 19;
|
|
pub const CHLD = 20;
|
|
pub const TTIN = 21;
|
|
pub const TTOU = 22;
|
|
pub const IO = 23;
|
|
pub const XCPU = 24;
|
|
pub const XFSZ = 25;
|
|
pub const VTALRM = 26;
|
|
pub const PROF = 27;
|
|
pub const WINCH = 28;
|
|
pub const INFO = 29;
|
|
pub const USR1 = 30;
|
|
pub const USR2 = 31;
|
|
pub const PWR = 32;
|
|
|
|
pub const RTMIN = 33;
|
|
pub const RTMAX = 63;
|
|
|
|
pub inline fn IDX(sig: usize) usize {
|
|
return sig - 1;
|
|
}
|
|
pub inline fn WORD(sig: usize) usize {
|
|
return IDX(sig) >> 5;
|
|
}
|
|
pub inline fn BIT(sig: usize) usize {
|
|
return 1 << (IDX(sig) & 31);
|
|
}
|
|
pub inline fn VALID(sig: usize) usize {
|
|
return sig <= MAXSIG and sig > 0;
|
|
}
|
|
},
|
|
.dragonfly => struct {
|
|
pub const DFL: ?Sigaction.handler_fn = @ptrFromInt(0);
|
|
pub const IGN: ?Sigaction.handler_fn = @ptrFromInt(1);
|
|
pub const ERR: ?Sigaction.handler_fn = @ptrFromInt(maxInt(usize));
|
|
|
|
pub const BLOCK = 1;
|
|
pub const UNBLOCK = 2;
|
|
pub const SETMASK = 3;
|
|
|
|
pub const IOT = ABRT;
|
|
pub const HUP = 1;
|
|
pub const INT = 2;
|
|
pub const QUIT = 3;
|
|
pub const ILL = 4;
|
|
pub const TRAP = 5;
|
|
pub const ABRT = 6;
|
|
pub const EMT = 7;
|
|
pub const FPE = 8;
|
|
pub const KILL = 9;
|
|
pub const BUS = 10;
|
|
pub const SEGV = 11;
|
|
pub const SYS = 12;
|
|
pub const PIPE = 13;
|
|
pub const ALRM = 14;
|
|
pub const TERM = 15;
|
|
pub const URG = 16;
|
|
pub const STOP = 17;
|
|
pub const TSTP = 18;
|
|
pub const CONT = 19;
|
|
pub const CHLD = 20;
|
|
pub const TTIN = 21;
|
|
pub const TTOU = 22;
|
|
pub const IO = 23;
|
|
pub const XCPU = 24;
|
|
pub const XFSZ = 25;
|
|
pub const VTALRM = 26;
|
|
pub const PROF = 27;
|
|
pub const WINCH = 28;
|
|
pub const INFO = 29;
|
|
pub const USR1 = 30;
|
|
pub const USR2 = 31;
|
|
pub const THR = 32;
|
|
pub const CKPT = 33;
|
|
pub const CKPTEXIT = 34;
|
|
|
|
pub const WORDS = 4;
|
|
},
|
|
.haiku => struct {
|
|
pub const DFL: ?Sigaction.handler_fn = @ptrFromInt(0);
|
|
pub const IGN: ?Sigaction.handler_fn = @ptrFromInt(1);
|
|
pub const ERR: ?Sigaction.handler_fn = @ptrFromInt(maxInt(usize));
|
|
|
|
pub const HOLD: ?Sigaction.handler_fn = @ptrFromInt(3);
|
|
|
|
pub const HUP = 1;
|
|
pub const INT = 2;
|
|
pub const QUIT = 3;
|
|
pub const ILL = 4;
|
|
pub const CHLD = 5;
|
|
pub const ABRT = 6;
|
|
pub const IOT = ABRT;
|
|
pub const PIPE = 7;
|
|
pub const FPE = 8;
|
|
pub const KILL = 9;
|
|
pub const STOP = 10;
|
|
pub const SEGV = 11;
|
|
pub const CONT = 12;
|
|
pub const TSTP = 13;
|
|
pub const ALRM = 14;
|
|
pub const TERM = 15;
|
|
pub const TTIN = 16;
|
|
pub const TTOU = 17;
|
|
pub const USR1 = 18;
|
|
pub const USR2 = 19;
|
|
pub const WINCH = 20;
|
|
pub const KILLTHR = 21;
|
|
pub const TRAP = 22;
|
|
pub const POLL = 23;
|
|
pub const PROF = 24;
|
|
pub const SYS = 25;
|
|
pub const URG = 26;
|
|
pub const VTALRM = 27;
|
|
pub const XCPU = 28;
|
|
pub const XFSZ = 29;
|
|
pub const BUS = 30;
|
|
pub const RESERVED1 = 31;
|
|
pub const RESERVED2 = 32;
|
|
|
|
pub const BLOCK = 1;
|
|
pub const UNBLOCK = 2;
|
|
pub const SETMASK = 3;
|
|
},
|
|
.openbsd => struct {
|
|
pub const DFL: ?Sigaction.handler_fn = @ptrFromInt(0);
|
|
pub const IGN: ?Sigaction.handler_fn = @ptrFromInt(1);
|
|
pub const ERR: ?Sigaction.handler_fn = @ptrFromInt(maxInt(usize));
|
|
pub const CATCH: ?Sigaction.handler_fn = @ptrFromInt(2);
|
|
pub const HOLD: ?Sigaction.handler_fn = @ptrFromInt(3);
|
|
|
|
pub const HUP = 1;
|
|
pub const INT = 2;
|
|
pub const QUIT = 3;
|
|
pub const ILL = 4;
|
|
pub const TRAP = 5;
|
|
pub const ABRT = 6;
|
|
pub const IOT = ABRT;
|
|
pub const EMT = 7;
|
|
pub const FPE = 8;
|
|
pub const KILL = 9;
|
|
pub const BUS = 10;
|
|
pub const SEGV = 11;
|
|
pub const SYS = 12;
|
|
pub const PIPE = 13;
|
|
pub const ALRM = 14;
|
|
pub const TERM = 15;
|
|
pub const URG = 16;
|
|
pub const STOP = 17;
|
|
pub const TSTP = 18;
|
|
pub const CONT = 19;
|
|
pub const CHLD = 20;
|
|
pub const TTIN = 21;
|
|
pub const TTOU = 22;
|
|
pub const IO = 23;
|
|
pub const XCPU = 24;
|
|
pub const XFSZ = 25;
|
|
pub const VTALRM = 26;
|
|
pub const PROF = 27;
|
|
pub const WINCH = 28;
|
|
pub const INFO = 29;
|
|
pub const USR1 = 30;
|
|
pub const USR2 = 31;
|
|
pub const PWR = 32;
|
|
|
|
pub const BLOCK = 1;
|
|
pub const UNBLOCK = 2;
|
|
pub const SETMASK = 3;
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
pub const SIOCGIFINDEX = switch (native_os) {
|
|
.linux => linux.SIOCGIFINDEX,
|
|
.emscripten => emscripten.SIOCGIFINDEX,
|
|
.solaris, .illumos => solaris.SIOCGLIFINDEX,
|
|
else => void,
|
|
};
|
|
|
|
pub const STDIN_FILENO = switch (native_os) {
|
|
.linux => linux.STDIN_FILENO,
|
|
.emscripten => emscripten.STDIN_FILENO,
|
|
else => 0,
|
|
};
|
|
pub const STDOUT_FILENO = switch (native_os) {
|
|
.linux => linux.STDOUT_FILENO,
|
|
.emscripten => emscripten.STDOUT_FILENO,
|
|
else => 1,
|
|
};
|
|
pub const STDERR_FILENO = switch (native_os) {
|
|
.linux => linux.STDERR_FILENO,
|
|
.emscripten => emscripten.STDERR_FILENO,
|
|
else => 2,
|
|
};
|
|
|
|
pub const SYS = switch (native_os) {
|
|
.linux => linux.SYS,
|
|
else => void,
|
|
};
|
|
/// Renamed from `sigaction` to `Sigaction` to avoid conflict with function name.
|
|
pub const Sigaction = switch (native_os) {
|
|
.linux => linux.Sigaction,
|
|
.emscripten => emscripten.Sigaction,
|
|
.netbsd, .macos, .ios, .tvos, .watchos, .visionos => extern struct {
|
|
pub const handler_fn = *align(1) const fn (i32) callconv(.C) void;
|
|
pub const sigaction_fn = *const fn (i32, *const siginfo_t, ?*anyopaque) callconv(.C) void;
|
|
|
|
handler: extern union {
|
|
handler: ?handler_fn,
|
|
sigaction: ?sigaction_fn,
|
|
},
|
|
mask: sigset_t,
|
|
flags: c_uint,
|
|
},
|
|
.dragonfly, .freebsd => extern struct {
|
|
pub const handler_fn = *align(1) const fn (i32) callconv(.C) void;
|
|
pub const sigaction_fn = *const fn (i32, *const siginfo_t, ?*anyopaque) callconv(.C) void;
|
|
|
|
/// signal handler
|
|
handler: extern union {
|
|
handler: ?handler_fn,
|
|
sigaction: ?sigaction_fn,
|
|
},
|
|
/// see signal options
|
|
flags: c_uint,
|
|
/// signal mask to apply
|
|
mask: sigset_t,
|
|
},
|
|
.solaris, .illumos => extern struct {
|
|
pub const handler_fn = *align(1) const fn (i32) callconv(.C) void;
|
|
pub const sigaction_fn = *const fn (i32, *const siginfo_t, ?*anyopaque) callconv(.C) void;
|
|
|
|
/// signal options
|
|
flags: c_uint,
|
|
/// signal handler
|
|
handler: extern union {
|
|
handler: ?handler_fn,
|
|
sigaction: ?sigaction_fn,
|
|
},
|
|
/// signal mask to apply
|
|
mask: sigset_t,
|
|
},
|
|
.haiku => extern struct {
|
|
pub const handler_fn = *align(1) const fn (i32) callconv(.C) void;
|
|
pub const sigaction_fn = *const fn (i32, *const siginfo_t, ?*anyopaque) callconv(.C) void;
|
|
|
|
/// signal handler
|
|
handler: extern union {
|
|
handler: handler_fn,
|
|
sigaction: sigaction_fn,
|
|
},
|
|
|
|
/// signal mask to apply
|
|
mask: sigset_t,
|
|
|
|
/// see signal options
|
|
flags: i32,
|
|
|
|
/// will be passed to the signal handler, BeOS extension
|
|
userdata: *allowzero anyopaque = undefined,
|
|
},
|
|
.openbsd => extern struct {
|
|
pub const handler_fn = *align(1) const fn (i32) callconv(.C) void;
|
|
pub const sigaction_fn = *const fn (i32, *const siginfo_t, ?*anyopaque) callconv(.C) void;
|
|
|
|
/// signal handler
|
|
handler: extern union {
|
|
handler: ?handler_fn,
|
|
sigaction: ?sigaction_fn,
|
|
},
|
|
/// signal mask to apply
|
|
mask: sigset_t,
|
|
/// signal options
|
|
flags: c_uint,
|
|
},
|
|
else => void,
|
|
};
|
|
pub const T = switch (native_os) {
|
|
.linux => linux.T,
|
|
.macos, .ios, .tvos, .watchos, .visionos => struct {
|
|
pub const IOCGWINSZ = ior(0x40000000, 't', 104, @sizeOf(winsize));
|
|
|
|
fn ior(inout: u32, group: usize, num: usize, len: usize) usize {
|
|
return (inout | ((len & IOCPARM_MASK) << 16) | ((group) << 8) | (num));
|
|
}
|
|
},
|
|
.freebsd => struct {
|
|
pub const IOCEXCL = 0x2000740d;
|
|
pub const IOCNXCL = 0x2000740e;
|
|
pub const IOCSCTTY = 0x20007461;
|
|
pub const IOCGPGRP = 0x40047477;
|
|
pub const IOCSPGRP = 0x80047476;
|
|
pub const IOCOUTQ = 0x40047473;
|
|
pub const IOCSTI = 0x80017472;
|
|
pub const IOCGWINSZ = 0x40087468;
|
|
pub const IOCSWINSZ = 0x80087467;
|
|
pub const IOCMGET = 0x4004746a;
|
|
pub const IOCMBIS = 0x8004746c;
|
|
pub const IOCMBIC = 0x8004746b;
|
|
pub const IOCMSET = 0x8004746d;
|
|
pub const FIONREAD = 0x4004667f;
|
|
pub const IOCCONS = 0x80047462;
|
|
pub const IOCPKT = 0x80047470;
|
|
pub const FIONBIO = 0x8004667e;
|
|
pub const IOCNOTTY = 0x20007471;
|
|
pub const IOCSETD = 0x8004741b;
|
|
pub const IOCGETD = 0x4004741a;
|
|
pub const IOCSBRK = 0x2000747b;
|
|
pub const IOCCBRK = 0x2000747a;
|
|
pub const IOCGSID = 0x40047463;
|
|
pub const IOCGPTN = 0x4004740f;
|
|
pub const IOCSIG = 0x2004745f;
|
|
},
|
|
.solaris, .illumos => struct {
|
|
pub const CGETA = tioc('T', 1);
|
|
pub const CSETA = tioc('T', 2);
|
|
pub const CSETAW = tioc('T', 3);
|
|
pub const CSETAF = tioc('T', 4);
|
|
pub const CSBRK = tioc('T', 5);
|
|
pub const CXONC = tioc('T', 6);
|
|
pub const CFLSH = tioc('T', 7);
|
|
pub const IOCGWINSZ = tioc('T', 104);
|
|
pub const IOCSWINSZ = tioc('T', 103);
|
|
// Softcarrier ioctls
|
|
pub const IOCGSOFTCAR = tioc('T', 105);
|
|
pub const IOCSSOFTCAR = tioc('T', 106);
|
|
// termios ioctls
|
|
pub const CGETS = tioc('T', 13);
|
|
pub const CSETS = tioc('T', 14);
|
|
pub const CSANOW = tioc('T', 14);
|
|
pub const CSETSW = tioc('T', 15);
|
|
pub const CSADRAIN = tioc('T', 15);
|
|
pub const CSETSF = tioc('T', 16);
|
|
pub const IOCSETLD = tioc('T', 123);
|
|
pub const IOCGETLD = tioc('T', 124);
|
|
// NTP PPS ioctls
|
|
pub const IOCGPPS = tioc('T', 125);
|
|
pub const IOCSPPS = tioc('T', 126);
|
|
pub const IOCGPPSEV = tioc('T', 127);
|
|
|
|
pub const IOCGETD = tioc('t', 0);
|
|
pub const IOCSETD = tioc('t', 1);
|
|
pub const IOCHPCL = tioc('t', 2);
|
|
pub const IOCGETP = tioc('t', 8);
|
|
pub const IOCSETP = tioc('t', 9);
|
|
pub const IOCSETN = tioc('t', 10);
|
|
pub const IOCEXCL = tioc('t', 13);
|
|
pub const IOCNXCL = tioc('t', 14);
|
|
pub const IOCFLUSH = tioc('t', 16);
|
|
pub const IOCSETC = tioc('t', 17);
|
|
pub const IOCGETC = tioc('t', 18);
|
|
/// bis local mode bits
|
|
pub const IOCLBIS = tioc('t', 127);
|
|
/// bic local mode bits
|
|
pub const IOCLBIC = tioc('t', 126);
|
|
/// set entire local mode word
|
|
pub const IOCLSET = tioc('t', 125);
|
|
/// get local modes
|
|
pub const IOCLGET = tioc('t', 124);
|
|
/// set break bit
|
|
pub const IOCSBRK = tioc('t', 123);
|
|
/// clear break bit
|
|
pub const IOCCBRK = tioc('t', 122);
|
|
/// set data terminal ready
|
|
pub const IOCSDTR = tioc('t', 121);
|
|
/// clear data terminal ready
|
|
pub const IOCCDTR = tioc('t', 120);
|
|
/// set local special chars
|
|
pub const IOCSLTC = tioc('t', 117);
|
|
/// get local special chars
|
|
pub const IOCGLTC = tioc('t', 116);
|
|
/// driver output queue size
|
|
pub const IOCOUTQ = tioc('t', 115);
|
|
/// void tty association
|
|
pub const IOCNOTTY = tioc('t', 113);
|
|
/// get a ctty
|
|
pub const IOCSCTTY = tioc('t', 132);
|
|
/// stop output, like ^S
|
|
pub const IOCSTOP = tioc('t', 111);
|
|
/// start output, like ^Q
|
|
pub const IOCSTART = tioc('t', 110);
|
|
/// get pgrp of tty
|
|
pub const IOCGPGRP = tioc('t', 20);
|
|
/// set pgrp of tty
|
|
pub const IOCSPGRP = tioc('t', 21);
|
|
/// get session id on ctty
|
|
pub const IOCGSID = tioc('t', 22);
|
|
/// simulate terminal input
|
|
pub const IOCSTI = tioc('t', 23);
|
|
/// set all modem bits
|
|
pub const IOCMSET = tioc('t', 26);
|
|
/// bis modem bits
|
|
pub const IOCMBIS = tioc('t', 27);
|
|
/// bic modem bits
|
|
pub const IOCMBIC = tioc('t', 28);
|
|
/// get all modem bits
|
|
pub const IOCMGET = tioc('t', 29);
|
|
|
|
fn tioc(t: u16, num: u8) u16 {
|
|
return (t << 8) | num;
|
|
}
|
|
},
|
|
.netbsd => struct {
|
|
pub const IOCCBRK = 0x2000747a;
|
|
pub const IOCCDTR = 0x20007478;
|
|
pub const IOCCONS = 0x80047462;
|
|
pub const IOCDCDTIMESTAMP = 0x40107458;
|
|
pub const IOCDRAIN = 0x2000745e;
|
|
pub const IOCEXCL = 0x2000740d;
|
|
pub const IOCEXT = 0x80047460;
|
|
pub const IOCFLAG_CDTRCTS = 0x10;
|
|
pub const IOCFLAG_CLOCAL = 0x2;
|
|
pub const IOCFLAG_CRTSCTS = 0x4;
|
|
pub const IOCFLAG_MDMBUF = 0x8;
|
|
pub const IOCFLAG_SOFTCAR = 0x1;
|
|
pub const IOCFLUSH = 0x80047410;
|
|
pub const IOCGETA = 0x402c7413;
|
|
pub const IOCGETD = 0x4004741a;
|
|
pub const IOCGFLAGS = 0x4004745d;
|
|
pub const IOCGLINED = 0x40207442;
|
|
pub const IOCGPGRP = 0x40047477;
|
|
pub const IOCGQSIZE = 0x40047481;
|
|
pub const IOCGRANTPT = 0x20007447;
|
|
pub const IOCGSID = 0x40047463;
|
|
pub const IOCGSIZE = 0x40087468;
|
|
pub const IOCGWINSZ = 0x40087468;
|
|
pub const IOCMBIC = 0x8004746b;
|
|
pub const IOCMBIS = 0x8004746c;
|
|
pub const IOCMGET = 0x4004746a;
|
|
pub const IOCMSET = 0x8004746d;
|
|
pub const IOCM_CAR = 0x40;
|
|
pub const IOCM_CD = 0x40;
|
|
pub const IOCM_CTS = 0x20;
|
|
pub const IOCM_DSR = 0x100;
|
|
pub const IOCM_DTR = 0x2;
|
|
pub const IOCM_LE = 0x1;
|
|
pub const IOCM_RI = 0x80;
|
|
pub const IOCM_RNG = 0x80;
|
|
pub const IOCM_RTS = 0x4;
|
|
pub const IOCM_SR = 0x10;
|
|
pub const IOCM_ST = 0x8;
|
|
pub const IOCNOTTY = 0x20007471;
|
|
pub const IOCNXCL = 0x2000740e;
|
|
pub const IOCOUTQ = 0x40047473;
|
|
pub const IOCPKT = 0x80047470;
|
|
pub const IOCPKT_DATA = 0x0;
|
|
pub const IOCPKT_DOSTOP = 0x20;
|
|
pub const IOCPKT_FLUSHREAD = 0x1;
|
|
pub const IOCPKT_FLUSHWRITE = 0x2;
|
|
pub const IOCPKT_IOCTL = 0x40;
|
|
pub const IOCPKT_NOSTOP = 0x10;
|
|
pub const IOCPKT_START = 0x8;
|
|
pub const IOCPKT_STOP = 0x4;
|
|
pub const IOCPTMGET = 0x40287446;
|
|
pub const IOCPTSNAME = 0x40287448;
|
|
pub const IOCRCVFRAME = 0x80087445;
|
|
pub const IOCREMOTE = 0x80047469;
|
|
pub const IOCSBRK = 0x2000747b;
|
|
pub const IOCSCTTY = 0x20007461;
|
|
pub const IOCSDTR = 0x20007479;
|
|
pub const IOCSETA = 0x802c7414;
|
|
pub const IOCSETAF = 0x802c7416;
|
|
pub const IOCSETAW = 0x802c7415;
|
|
pub const IOCSETD = 0x8004741b;
|
|
pub const IOCSFLAGS = 0x8004745c;
|
|
pub const IOCSIG = 0x2000745f;
|
|
pub const IOCSLINED = 0x80207443;
|
|
pub const IOCSPGRP = 0x80047476;
|
|
pub const IOCSQSIZE = 0x80047480;
|
|
pub const IOCSSIZE = 0x80087467;
|
|
pub const IOCSTART = 0x2000746e;
|
|
pub const IOCSTAT = 0x80047465;
|
|
pub const IOCSTI = 0x80017472;
|
|
pub const IOCSTOP = 0x2000746f;
|
|
pub const IOCSWINSZ = 0x80087467;
|
|
pub const IOCUCNTL = 0x80047466;
|
|
pub const IOCXMTFRAME = 0x80087444;
|
|
},
|
|
.haiku => struct {
|
|
pub const CGETA = 0x8000;
|
|
pub const CSETA = 0x8001;
|
|
pub const CSETAF = 0x8002;
|
|
pub const CSETAW = 0x8003;
|
|
pub const CWAITEVENT = 0x8004;
|
|
pub const CSBRK = 0x8005;
|
|
pub const CFLSH = 0x8006;
|
|
pub const CXONC = 0x8007;
|
|
pub const CQUERYCONNECTED = 0x8008;
|
|
pub const CGETBITS = 0x8009;
|
|
pub const CSETDTR = 0x8010;
|
|
pub const CSETRTS = 0x8011;
|
|
pub const IOCGWINSZ = 0x8012;
|
|
pub const IOCSWINSZ = 0x8013;
|
|
pub const CVTIME = 0x8014;
|
|
pub const IOCGPGRP = 0x8015;
|
|
pub const IOCSPGRP = 0x8016;
|
|
pub const IOCSCTTY = 0x8017;
|
|
pub const IOCMGET = 0x8018;
|
|
pub const IOCMSET = 0x8019;
|
|
pub const IOCSBRK = 0x8020;
|
|
pub const IOCCBRK = 0x8021;
|
|
pub const IOCMBIS = 0x8022;
|
|
pub const IOCMBIC = 0x8023;
|
|
pub const IOCGSID = 0x8024;
|
|
|
|
pub const FIONREAD = 0xbe000001;
|
|
pub const FIONBIO = 0xbe000000;
|
|
},
|
|
.openbsd => struct {
|
|
pub const IOCCBRK = 0x2000747a;
|
|
pub const IOCCDTR = 0x20007478;
|
|
pub const IOCCONS = 0x80047462;
|
|
pub const IOCDCDTIMESTAMP = 0x40107458;
|
|
pub const IOCDRAIN = 0x2000745e;
|
|
pub const IOCEXCL = 0x2000740d;
|
|
pub const IOCEXT = 0x80047460;
|
|
pub const IOCFLAG_CDTRCTS = 0x10;
|
|
pub const IOCFLAG_CLOCAL = 0x2;
|
|
pub const IOCFLAG_CRTSCTS = 0x4;
|
|
pub const IOCFLAG_MDMBUF = 0x8;
|
|
pub const IOCFLAG_SOFTCAR = 0x1;
|
|
pub const IOCFLUSH = 0x80047410;
|
|
pub const IOCGETA = 0x402c7413;
|
|
pub const IOCGETD = 0x4004741a;
|
|
pub const IOCGFLAGS = 0x4004745d;
|
|
pub const IOCGLINED = 0x40207442;
|
|
pub const IOCGPGRP = 0x40047477;
|
|
pub const IOCGQSIZE = 0x40047481;
|
|
pub const IOCGRANTPT = 0x20007447;
|
|
pub const IOCGSID = 0x40047463;
|
|
pub const IOCGSIZE = 0x40087468;
|
|
pub const IOCGWINSZ = 0x40087468;
|
|
pub const IOCMBIC = 0x8004746b;
|
|
pub const IOCMBIS = 0x8004746c;
|
|
pub const IOCMGET = 0x4004746a;
|
|
pub const IOCMSET = 0x8004746d;
|
|
pub const IOCM_CAR = 0x40;
|
|
pub const IOCM_CD = 0x40;
|
|
pub const IOCM_CTS = 0x20;
|
|
pub const IOCM_DSR = 0x100;
|
|
pub const IOCM_DTR = 0x2;
|
|
pub const IOCM_LE = 0x1;
|
|
pub const IOCM_RI = 0x80;
|
|
pub const IOCM_RNG = 0x80;
|
|
pub const IOCM_RTS = 0x4;
|
|
pub const IOCM_SR = 0x10;
|
|
pub const IOCM_ST = 0x8;
|
|
pub const IOCNOTTY = 0x20007471;
|
|
pub const IOCNXCL = 0x2000740e;
|
|
pub const IOCOUTQ = 0x40047473;
|
|
pub const IOCPKT = 0x80047470;
|
|
pub const IOCPKT_DATA = 0x0;
|
|
pub const IOCPKT_DOSTOP = 0x20;
|
|
pub const IOCPKT_FLUSHREAD = 0x1;
|
|
pub const IOCPKT_FLUSHWRITE = 0x2;
|
|
pub const IOCPKT_IOCTL = 0x40;
|
|
pub const IOCPKT_NOSTOP = 0x10;
|
|
pub const IOCPKT_START = 0x8;
|
|
pub const IOCPKT_STOP = 0x4;
|
|
pub const IOCPTMGET = 0x40287446;
|
|
pub const IOCPTSNAME = 0x40287448;
|
|
pub const IOCRCVFRAME = 0x80087445;
|
|
pub const IOCREMOTE = 0x80047469;
|
|
pub const IOCSBRK = 0x2000747b;
|
|
pub const IOCSCTTY = 0x20007461;
|
|
pub const IOCSDTR = 0x20007479;
|
|
pub const IOCSETA = 0x802c7414;
|
|
pub const IOCSETAF = 0x802c7416;
|
|
pub const IOCSETAW = 0x802c7415;
|
|
pub const IOCSETD = 0x8004741b;
|
|
pub const IOCSFLAGS = 0x8004745c;
|
|
pub const IOCSIG = 0x2000745f;
|
|
pub const IOCSLINED = 0x80207443;
|
|
pub const IOCSPGRP = 0x80047476;
|
|
pub const IOCSQSIZE = 0x80047480;
|
|
pub const IOCSSIZE = 0x80087467;
|
|
pub const IOCSTART = 0x2000746e;
|
|
pub const IOCSTAT = 0x80047465;
|
|
pub const IOCSTI = 0x80017472;
|
|
pub const IOCSTOP = 0x2000746f;
|
|
pub const IOCSWINSZ = 0x80087467;
|
|
pub const IOCUCNTL = 0x80047466;
|
|
pub const IOCXMTFRAME = 0x80087444;
|
|
},
|
|
else => void,
|
|
};
|
|
pub const IOCPARM_MASK = switch (native_os) {
|
|
.windows => ws2_32.IOCPARM_MASK,
|
|
.macos, .ios, .tvos, .watchos, .visionos => 0x1fff,
|
|
else => void,
|
|
};
|
|
pub const TCSA = std.posix.TCSA;
|
|
pub const TFD = switch (native_os) {
|
|
.linux => linux.TFD,
|
|
else => void,
|
|
};
|
|
pub const VDSO = switch (native_os) {
|
|
.linux => linux.VDSO,
|
|
else => void,
|
|
};
|
|
pub const W = switch (native_os) {
|
|
.linux => linux.W,
|
|
.emscripten => emscripten.W,
|
|
.macos, .ios, .tvos, .watchos, .visionos => struct {
|
|
/// [XSI] no hang in wait/no child to reap
|
|
pub const NOHANG = 0x00000001;
|
|
/// [XSI] notify on stop, untraced child
|
|
pub const UNTRACED = 0x00000002;
|
|
|
|
pub fn EXITSTATUS(x: u32) u8 {
|
|
return @as(u8, @intCast(x >> 8));
|
|
}
|
|
pub fn TERMSIG(x: u32) u32 {
|
|
return status(x);
|
|
}
|
|
pub fn STOPSIG(x: u32) u32 {
|
|
return x >> 8;
|
|
}
|
|
pub fn IFEXITED(x: u32) bool {
|
|
return status(x) == 0;
|
|
}
|
|
pub fn IFSTOPPED(x: u32) bool {
|
|
return status(x) == stopped and STOPSIG(x) != 0x13;
|
|
}
|
|
pub fn IFSIGNALED(x: u32) bool {
|
|
return status(x) != stopped and status(x) != 0;
|
|
}
|
|
|
|
fn status(x: u32) u32 {
|
|
return x & 0o177;
|
|
}
|
|
const stopped = 0o177;
|
|
},
|
|
.freebsd => struct {
|
|
pub const NOHANG = 1;
|
|
pub const UNTRACED = 2;
|
|
pub const STOPPED = UNTRACED;
|
|
pub const CONTINUED = 4;
|
|
pub const NOWAIT = 8;
|
|
pub const EXITED = 16;
|
|
pub const TRAPPED = 32;
|
|
|
|
pub fn EXITSTATUS(s: u32) u8 {
|
|
return @as(u8, @intCast((s & 0xff00) >> 8));
|
|
}
|
|
pub fn TERMSIG(s: u32) u32 {
|
|
return s & 0x7f;
|
|
}
|
|
pub fn STOPSIG(s: u32) u32 {
|
|
return EXITSTATUS(s);
|
|
}
|
|
pub fn IFEXITED(s: u32) bool {
|
|
return TERMSIG(s) == 0;
|
|
}
|
|
pub fn IFSTOPPED(s: u32) bool {
|
|
return @as(u16, @truncate((((s & 0xffff) *% 0x10001) >> 8))) > 0x7f00;
|
|
}
|
|
pub fn IFSIGNALED(s: u32) bool {
|
|
return (s & 0xffff) -% 1 < 0xff;
|
|
}
|
|
},
|
|
.solaris, .illumos => struct {
|
|
pub const EXITED = 0o001;
|
|
pub const TRAPPED = 0o002;
|
|
pub const UNTRACED = 0o004;
|
|
pub const STOPPED = UNTRACED;
|
|
pub const CONTINUED = 0o010;
|
|
pub const NOHANG = 0o100;
|
|
pub const NOWAIT = 0o200;
|
|
|
|
pub fn EXITSTATUS(s: u32) u8 {
|
|
return @as(u8, @intCast((s >> 8) & 0xff));
|
|
}
|
|
pub fn TERMSIG(s: u32) u32 {
|
|
return s & 0x7f;
|
|
}
|
|
pub fn STOPSIG(s: u32) u32 {
|
|
return EXITSTATUS(s);
|
|
}
|
|
pub fn IFEXITED(s: u32) bool {
|
|
return TERMSIG(s) == 0;
|
|
}
|
|
|
|
pub fn IFCONTINUED(s: u32) bool {
|
|
return ((s & 0o177777) == 0o177777);
|
|
}
|
|
|
|
pub fn IFSTOPPED(s: u32) bool {
|
|
return (s & 0x00ff != 0o177) and !(s & 0xff00 != 0);
|
|
}
|
|
|
|
pub fn IFSIGNALED(s: u32) bool {
|
|
return s & 0x00ff > 0 and s & 0xff00 == 0;
|
|
}
|
|
},
|
|
.netbsd => struct {
|
|
pub const NOHANG = 0x00000001;
|
|
pub const UNTRACED = 0x00000002;
|
|
pub const STOPPED = UNTRACED;
|
|
pub const CONTINUED = 0x00000010;
|
|
pub const NOWAIT = 0x00010000;
|
|
pub const EXITED = 0x00000020;
|
|
pub const TRAPPED = 0x00000040;
|
|
|
|
pub fn EXITSTATUS(s: u32) u8 {
|
|
return @as(u8, @intCast((s >> 8) & 0xff));
|
|
}
|
|
pub fn TERMSIG(s: u32) u32 {
|
|
return s & 0x7f;
|
|
}
|
|
pub fn STOPSIG(s: u32) u32 {
|
|
return EXITSTATUS(s);
|
|
}
|
|
pub fn IFEXITED(s: u32) bool {
|
|
return TERMSIG(s) == 0;
|
|
}
|
|
|
|
pub fn IFCONTINUED(s: u32) bool {
|
|
return ((s & 0x7f) == 0xffff);
|
|
}
|
|
|
|
pub fn IFSTOPPED(s: u32) bool {
|
|
return ((s & 0x7f != 0x7f) and !IFCONTINUED(s));
|
|
}
|
|
|
|
pub fn IFSIGNALED(s: u32) bool {
|
|
return !IFSTOPPED(s) and !IFCONTINUED(s) and !IFEXITED(s);
|
|
}
|
|
},
|
|
.dragonfly => struct {
|
|
pub const NOHANG = 0x0001;
|
|
pub const UNTRACED = 0x0002;
|
|
pub const CONTINUED = 0x0004;
|
|
pub const STOPPED = UNTRACED;
|
|
pub const NOWAIT = 0x0008;
|
|
pub const EXITED = 0x0010;
|
|
pub const TRAPPED = 0x0020;
|
|
|
|
pub fn EXITSTATUS(s: u32) u8 {
|
|
return @as(u8, @intCast((s & 0xff00) >> 8));
|
|
}
|
|
pub fn TERMSIG(s: u32) u32 {
|
|
return s & 0x7f;
|
|
}
|
|
pub fn STOPSIG(s: u32) u32 {
|
|
return EXITSTATUS(s);
|
|
}
|
|
pub fn IFEXITED(s: u32) bool {
|
|
return TERMSIG(s) == 0;
|
|
}
|
|
pub fn IFSTOPPED(s: u32) bool {
|
|
return @as(u16, @truncate((((s & 0xffff) *% 0x10001) >> 8))) > 0x7f00;
|
|
}
|
|
pub fn IFSIGNALED(s: u32) bool {
|
|
return (s & 0xffff) -% 1 < 0xff;
|
|
}
|
|
},
|
|
.haiku => struct {
|
|
pub const NOHANG = 0x1;
|
|
pub const UNTRACED = 0x2;
|
|
pub const CONTINUED = 0x4;
|
|
pub const EXITED = 0x08;
|
|
pub const STOPPED = 0x10;
|
|
pub const NOWAIT = 0x20;
|
|
|
|
pub fn EXITSTATUS(s: u32) u8 {
|
|
return @as(u8, @intCast(s & 0xff));
|
|
}
|
|
|
|
pub fn TERMSIG(s: u32) u32 {
|
|
return (s >> 8) & 0xff;
|
|
}
|
|
|
|
pub fn STOPSIG(s: u32) u32 {
|
|
return (s >> 16) & 0xff;
|
|
}
|
|
|
|
pub fn IFEXITED(s: u32) bool {
|
|
return (s & ~@as(u32, 0xff)) == 0;
|
|
}
|
|
|
|
pub fn IFSTOPPED(s: u32) bool {
|
|
return ((s >> 16) & 0xff) != 0;
|
|
}
|
|
|
|
pub fn IFSIGNALED(s: u32) bool {
|
|
return ((s >> 8) & 0xff) != 0;
|
|
}
|
|
},
|
|
.openbsd => struct {
|
|
pub const NOHANG = 1;
|
|
pub const UNTRACED = 2;
|
|
pub const CONTINUED = 8;
|
|
|
|
pub fn EXITSTATUS(s: u32) u8 {
|
|
return @as(u8, @intCast((s >> 8) & 0xff));
|
|
}
|
|
pub fn TERMSIG(s: u32) u32 {
|
|
return (s & 0x7f);
|
|
}
|
|
pub fn STOPSIG(s: u32) u32 {
|
|
return EXITSTATUS(s);
|
|
}
|
|
pub fn IFEXITED(s: u32) bool {
|
|
return TERMSIG(s) == 0;
|
|
}
|
|
|
|
pub fn IFCONTINUED(s: u32) bool {
|
|
return ((s & 0o177777) == 0o177777);
|
|
}
|
|
|
|
pub fn IFSTOPPED(s: u32) bool {
|
|
return (s & 0xff == 0o177);
|
|
}
|
|
|
|
pub fn IFSIGNALED(s: u32) bool {
|
|
return (((s) & 0o177) != 0o177) and (((s) & 0o177) != 0);
|
|
}
|
|
},
|
|
else => void,
|
|
};
|
|
pub const clock_t = switch (native_os) {
|
|
.linux => linux.clock_t,
|
|
.emscripten => emscripten.clock_t,
|
|
.macos, .ios, .tvos, .watchos, .visionos => c_ulong,
|
|
.freebsd => isize,
|
|
.openbsd, .solaris, .illumos => i64,
|
|
.netbsd => u32,
|
|
.haiku => i32,
|
|
else => void,
|
|
};
|
|
pub const cpu_set_t = switch (native_os) {
|
|
.linux => linux.cpu_set_t,
|
|
.emscripten => emscripten.cpu_set_t,
|
|
else => void,
|
|
};
|
|
pub const dl_phdr_info = switch (native_os) {
|
|
.linux => linux.dl_phdr_info,
|
|
.emscripten => emscripten.dl_phdr_info,
|
|
.freebsd => extern struct {
|
|
/// Module relocation base.
|
|
addr: if (builtin.target.ptrBitWidth() == 32) std.elf.Elf32_Addr else std.elf.Elf64_Addr,
|
|
/// Module name.
|
|
name: ?[*:0]const u8,
|
|
/// Pointer to module's phdr.
|
|
phdr: [*]std.elf.Phdr,
|
|
/// Number of entries in phdr.
|
|
phnum: u16,
|
|
/// Total number of loads.
|
|
adds: u64,
|
|
/// Total number of unloads.
|
|
subs: u64,
|
|
tls_modid: usize,
|
|
tls_data: ?*anyopaque,
|
|
},
|
|
.solaris, .illumos => extern struct {
|
|
addr: std.elf.Addr,
|
|
name: ?[*:0]const u8,
|
|
phdr: [*]std.elf.Phdr,
|
|
phnum: std.elf.Half,
|
|
/// Incremented when a new object is mapped into the process.
|
|
adds: u64,
|
|
/// Incremented when an object is unmapped from the process.
|
|
subs: u64,
|
|
},
|
|
.openbsd, .haiku, .dragonfly, .netbsd => extern struct {
|
|
addr: usize,
|
|
name: ?[*:0]const u8,
|
|
phdr: [*]std.elf.Phdr,
|
|
phnum: u16,
|
|
},
|
|
else => void,
|
|
};
|
|
pub const epoll_event = switch (native_os) {
|
|
.linux => linux.epoll_event,
|
|
else => void,
|
|
};
|
|
pub const ifreq = switch (native_os) {
|
|
.linux => linux.ifreq,
|
|
.emscripten => emscripten.ifreq,
|
|
.solaris, .illumos => lifreq,
|
|
else => void,
|
|
};
|
|
pub const itimerspec = switch (native_os) {
|
|
.linux => linux.itimerspec,
|
|
.haiku => extern struct {
|
|
interval: timespec,
|
|
value: timespec,
|
|
},
|
|
else => void,
|
|
};
|
|
pub const msghdr = switch (native_os) {
|
|
.linux => linux.msghdr,
|
|
.openbsd, .emscripten, .dragonfly, .freebsd, .netbsd, .haiku, .solaris, .illumos => extern struct {
|
|
/// optional address
|
|
name: ?*sockaddr,
|
|
/// size of address
|
|
namelen: socklen_t,
|
|
/// scatter/gather array
|
|
iov: [*]iovec,
|
|
/// # elements in iov
|
|
iovlen: i32,
|
|
/// ancillary data
|
|
control: ?*anyopaque,
|
|
/// ancillary data buffer len
|
|
controllen: socklen_t,
|
|
/// flags on received message
|
|
flags: i32,
|
|
},
|
|
else => void,
|
|
};
|
|
pub const msghdr_const = switch (native_os) {
|
|
.linux => linux.msghdr_const,
|
|
.openbsd, .emscripten, .dragonfly, .freebsd, .netbsd, .haiku, .solaris, .illumos => extern struct {
|
|
/// optional address
|
|
name: ?*const sockaddr,
|
|
/// size of address
|
|
namelen: socklen_t,
|
|
/// scatter/gather array
|
|
iov: [*]const iovec_const,
|
|
/// # elements in iov
|
|
iovlen: i32,
|
|
/// ancillary data
|
|
control: ?*const anyopaque,
|
|
/// ancillary data buffer len
|
|
controllen: socklen_t,
|
|
/// flags on received message
|
|
flags: i32,
|
|
},
|
|
else => void,
|
|
};
|
|
pub const nfds_t = switch (native_os) {
|
|
.linux => linux.nfds_t,
|
|
.emscripten => emscripten.nfds_t,
|
|
.haiku, .solaris, .illumos, .wasi => usize,
|
|
.windows => c_ulong,
|
|
.openbsd, .dragonfly, .netbsd, .freebsd, .macos, .ios, .tvos, .watchos, .visionos => u32,
|
|
else => void,
|
|
};
|
|
pub const perf_event_attr = switch (native_os) {
|
|
.linux => linux.perf_event_attr,
|
|
else => void,
|
|
};
|
|
pub const pid_t = switch (native_os) {
|
|
.linux => linux.pid_t,
|
|
.emscripten => emscripten.pid_t,
|
|
.windows => windows.HANDLE,
|
|
else => i32,
|
|
};
|
|
pub const pollfd = switch (native_os) {
|
|
.linux => linux.pollfd,
|
|
.emscripten => emscripten.pollfd,
|
|
.windows => ws2_32.pollfd,
|
|
else => extern struct {
|
|
fd: fd_t,
|
|
events: i16,
|
|
revents: i16,
|
|
},
|
|
};
|
|
pub const rlim_t = switch (native_os) {
|
|
.linux => linux.rlim_t,
|
|
.emscripten => emscripten.rlim_t,
|
|
.openbsd, .netbsd, .solaris, .illumos, .macos, .ios, .tvos, .watchos, .visionos => u64,
|
|
.haiku, .dragonfly, .freebsd => i64,
|
|
else => void,
|
|
};
|
|
pub const rlimit = switch (native_os) {
|
|
.linux, .emscripten => linux.rlimit,
|
|
.windows => void,
|
|
else => extern struct {
|
|
/// Soft limit
|
|
cur: rlim_t,
|
|
/// Hard limit
|
|
max: rlim_t,
|
|
},
|
|
};
|
|
pub const rlimit_resource = switch (native_os) {
|
|
.linux => linux.rlimit_resource,
|
|
.emscripten => emscripten.rlimit_resource,
|
|
.openbsd, .macos, .ios, .tvos, .watchos, .visionos => enum(c_int) {
|
|
CPU = 0,
|
|
FSIZE = 1,
|
|
DATA = 2,
|
|
STACK = 3,
|
|
CORE = 4,
|
|
RSS = 5,
|
|
MEMLOCK = 6,
|
|
NPROC = 7,
|
|
NOFILE = 8,
|
|
_,
|
|
|
|
pub const AS: rlimit_resource = .RSS;
|
|
},
|
|
.freebsd => enum(c_int) {
|
|
CPU = 0,
|
|
FSIZE = 1,
|
|
DATA = 2,
|
|
STACK = 3,
|
|
CORE = 4,
|
|
RSS = 5,
|
|
MEMLOCK = 6,
|
|
NPROC = 7,
|
|
NOFILE = 8,
|
|
SBSIZE = 9,
|
|
VMEM = 10,
|
|
NPTS = 11,
|
|
SWAP = 12,
|
|
KQUEUES = 13,
|
|
UMTXP = 14,
|
|
_,
|
|
|
|
pub const AS: rlimit_resource = .VMEM;
|
|
},
|
|
.solaris, .illumos => enum(c_int) {
|
|
CPU = 0,
|
|
FSIZE = 1,
|
|
DATA = 2,
|
|
STACK = 3,
|
|
CORE = 4,
|
|
NOFILE = 5,
|
|
VMEM = 6,
|
|
_,
|
|
|
|
pub const AS: rlimit_resource = .VMEM;
|
|
},
|
|
.netbsd => enum(c_int) {
|
|
CPU = 0,
|
|
FSIZE = 1,
|
|
DATA = 2,
|
|
STACK = 3,
|
|
CORE = 4,
|
|
RSS = 5,
|
|
MEMLOCK = 6,
|
|
NPROC = 7,
|
|
NOFILE = 8,
|
|
SBSIZE = 9,
|
|
VMEM = 10,
|
|
NTHR = 11,
|
|
_,
|
|
|
|
pub const AS: rlimit_resource = .VMEM;
|
|
},
|
|
.dragonfly => enum(c_int) {
|
|
CPU = 0,
|
|
FSIZE = 1,
|
|
DATA = 2,
|
|
STACK = 3,
|
|
CORE = 4,
|
|
RSS = 5,
|
|
MEMLOCK = 6,
|
|
NPROC = 7,
|
|
NOFILE = 8,
|
|
SBSIZE = 9,
|
|
VMEM = 10,
|
|
POSIXLOCKS = 11,
|
|
_,
|
|
|
|
pub const AS: rlimit_resource = .VMEM;
|
|
},
|
|
.haiku => enum(i32) {
|
|
CORE = 0,
|
|
CPU = 1,
|
|
DATA = 2,
|
|
FSIZE = 3,
|
|
NOFILE = 4,
|
|
STACK = 5,
|
|
AS = 6,
|
|
NOVMON = 7,
|
|
_,
|
|
},
|
|
else => void,
|
|
};
|
|
pub const rusage = switch (native_os) {
|
|
.linux => linux.rusage,
|
|
.emscripten => emscripten.rusage,
|
|
.macos, .ios, .tvos, .watchos, .visionos => extern struct {
|
|
utime: timeval,
|
|
stime: timeval,
|
|
maxrss: isize,
|
|
ixrss: isize,
|
|
idrss: isize,
|
|
isrss: isize,
|
|
minflt: isize,
|
|
majflt: isize,
|
|
nswap: isize,
|
|
inblock: isize,
|
|
oublock: isize,
|
|
msgsnd: isize,
|
|
msgrcv: isize,
|
|
nsignals: isize,
|
|
nvcsw: isize,
|
|
nivcsw: isize,
|
|
|
|
pub const SELF = 0;
|
|
pub const CHILDREN = -1;
|
|
},
|
|
.solaris, .illumos => extern struct {
|
|
utime: timeval,
|
|
stime: timeval,
|
|
maxrss: isize,
|
|
ixrss: isize,
|
|
idrss: isize,
|
|
isrss: isize,
|
|
minflt: isize,
|
|
majflt: isize,
|
|
nswap: isize,
|
|
inblock: isize,
|
|
oublock: isize,
|
|
msgsnd: isize,
|
|
msgrcv: isize,
|
|
nsignals: isize,
|
|
nvcsw: isize,
|
|
nivcsw: isize,
|
|
|
|
pub const SELF = 0;
|
|
pub const CHILDREN = -1;
|
|
pub const THREAD = 1;
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
pub const siginfo_t = switch (native_os) {
|
|
.linux => linux.siginfo_t,
|
|
.emscripten => emscripten.siginfo_t,
|
|
.macos, .ios, .tvos, .watchos, .visionos => extern struct {
|
|
signo: c_int,
|
|
errno: c_int,
|
|
code: c_int,
|
|
pid: pid_t,
|
|
uid: uid_t,
|
|
status: c_int,
|
|
addr: *allowzero anyopaque,
|
|
value: extern union {
|
|
int: c_int,
|
|
ptr: *anyopaque,
|
|
},
|
|
si_band: c_long,
|
|
_pad: [7]c_ulong,
|
|
},
|
|
.freebsd => extern struct {
|
|
// Signal number.
|
|
signo: c_int,
|
|
// Errno association.
|
|
errno: c_int,
|
|
/// Signal code.
|
|
///
|
|
/// Cause of signal, one of the SI_ macros or signal-specific values, i.e.
|
|
/// one of the FPE_... values for SIGFPE.
|
|
/// This value is equivalent to the second argument to an old-style FreeBSD
|
|
/// signal handler.
|
|
code: c_int,
|
|
/// Sending process.
|
|
pid: pid_t,
|
|
/// Sender's ruid.
|
|
uid: uid_t,
|
|
/// Exit value.
|
|
status: c_int,
|
|
/// Faulting instruction.
|
|
addr: *allowzero anyopaque,
|
|
/// Signal value.
|
|
value: sigval,
|
|
reason: extern union {
|
|
fault: extern struct {
|
|
/// Machine specific trap code.
|
|
trapno: c_int,
|
|
},
|
|
timer: extern struct {
|
|
timerid: c_int,
|
|
overrun: c_int,
|
|
},
|
|
mesgq: extern struct {
|
|
mqd: c_int,
|
|
},
|
|
poll: extern struct {
|
|
/// Band event for SIGPOLL. UNUSED.
|
|
band: c_long,
|
|
},
|
|
spare: extern struct {
|
|
spare1: c_long,
|
|
spare2: [7]c_int,
|
|
},
|
|
},
|
|
},
|
|
.solaris, .illumos => extern struct {
|
|
signo: c_int,
|
|
code: c_int,
|
|
errno: c_int,
|
|
// 64bit architectures insert 4bytes of padding here, this is done by
|
|
// correctly aligning the reason field
|
|
reason: extern union {
|
|
proc: extern struct {
|
|
pid: pid_t,
|
|
pdata: extern union {
|
|
kill: extern struct {
|
|
uid: uid_t,
|
|
value: sigval_t,
|
|
},
|
|
cld: extern struct {
|
|
utime: clock_t,
|
|
status: c_int,
|
|
stime: clock_t,
|
|
},
|
|
},
|
|
contract: solaris.ctid_t,
|
|
zone: solaris.zoneid_t,
|
|
},
|
|
fault: extern struct {
|
|
addr: *allowzero anyopaque,
|
|
trapno: c_int,
|
|
pc: ?*anyopaque,
|
|
},
|
|
file: extern struct {
|
|
// fd not currently available for SIGPOLL.
|
|
fd: c_int,
|
|
band: c_long,
|
|
},
|
|
prof: extern struct {
|
|
addr: ?*anyopaque,
|
|
timestamp: timespec,
|
|
syscall: c_short,
|
|
sysarg: u8,
|
|
fault: u8,
|
|
args: [8]c_long,
|
|
state: [10]c_int,
|
|
},
|
|
rctl: extern struct {
|
|
entity: i32,
|
|
},
|
|
__pad: [256 - 4 * @sizeOf(c_int)]u8,
|
|
} align(@sizeOf(usize)),
|
|
|
|
comptime {
|
|
assert(@sizeOf(@This()) == 256);
|
|
assert(@alignOf(@This()) == @sizeOf(usize));
|
|
}
|
|
},
|
|
.netbsd => extern union {
|
|
pad: [128]u8,
|
|
info: netbsd._ksiginfo,
|
|
},
|
|
.dragonfly => extern struct {
|
|
signo: c_int,
|
|
errno: c_int,
|
|
code: c_int,
|
|
pid: c_int,
|
|
uid: uid_t,
|
|
status: c_int,
|
|
addr: *allowzero anyopaque,
|
|
value: sigval,
|
|
band: c_long,
|
|
__spare__: [7]c_int,
|
|
},
|
|
.haiku => extern struct {
|
|
signo: i32,
|
|
code: i32,
|
|
errno: i32,
|
|
|
|
pid: pid_t,
|
|
uid: uid_t,
|
|
addr: *allowzero anyopaque,
|
|
},
|
|
.openbsd => extern struct {
|
|
signo: c_int,
|
|
code: c_int,
|
|
errno: c_int,
|
|
data: extern union {
|
|
proc: extern struct {
|
|
pid: pid_t,
|
|
pdata: extern union {
|
|
kill: extern struct {
|
|
uid: uid_t,
|
|
value: sigval,
|
|
},
|
|
cld: extern struct {
|
|
utime: clock_t,
|
|
stime: clock_t,
|
|
status: c_int,
|
|
},
|
|
},
|
|
},
|
|
fault: extern struct {
|
|
addr: *allowzero anyopaque,
|
|
trapno: c_int,
|
|
},
|
|
__pad: [128 - 3 * @sizeOf(c_int)]u8,
|
|
},
|
|
|
|
comptime {
|
|
if (@sizeOf(usize) == 4)
|
|
assert(@sizeOf(@This()) == 128)
|
|
else
|
|
// Take into account the padding between errno and data fields.
|
|
assert(@sizeOf(@This()) == 136);
|
|
}
|
|
},
|
|
else => void,
|
|
};
|
|
pub const sigset_t = switch (native_os) {
|
|
.linux => linux.sigset_t,
|
|
.emscripten => emscripten.sigset_t,
|
|
.openbsd, .macos, .ios, .tvos, .watchos, .visionos => u32,
|
|
.dragonfly, .netbsd, .solaris, .illumos, .freebsd => extern struct {
|
|
__bits: [SIG.WORDS]u32,
|
|
},
|
|
.haiku => u64,
|
|
else => u0,
|
|
};
|
|
pub const empty_sigset: sigset_t = switch (native_os) {
|
|
.linux => linux.empty_sigset,
|
|
.emscripten => emscripten.empty_sigset,
|
|
.dragonfly, .netbsd, .solaris, .illumos, .freebsd => .{ .__bits = [_]u32{0} ** SIG.WORDS },
|
|
else => 0,
|
|
};
|
|
pub const filled_sigset = switch (native_os) {
|
|
.linux => linux.filled_sigset,
|
|
.haiku => ~@as(sigset_t, 0),
|
|
else => 0,
|
|
};
|
|
pub const sigval = switch (native_os) {
|
|
.linux => linux.sigval,
|
|
.openbsd, .dragonfly, .freebsd => extern union {
|
|
int: c_int,
|
|
ptr: ?*anyopaque,
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
pub const addrinfo = switch (native_os) {
|
|
.linux, .emscripten => linux.addrinfo,
|
|
.windows => ws2_32.addrinfo,
|
|
.freebsd, .macos, .ios, .tvos, .watchos, .visionos => extern struct {
|
|
flags: AI,
|
|
family: i32,
|
|
socktype: i32,
|
|
protocol: i32,
|
|
addrlen: socklen_t,
|
|
canonname: ?[*:0]u8,
|
|
addr: ?*sockaddr,
|
|
next: ?*addrinfo,
|
|
},
|
|
.solaris, .illumos => extern struct {
|
|
flags: AI,
|
|
family: i32,
|
|
socktype: i32,
|
|
protocol: i32,
|
|
addrlen: socklen_t,
|
|
canonname: ?[*:0]u8,
|
|
addr: ?*sockaddr,
|
|
next: ?*addrinfo,
|
|
},
|
|
.netbsd => extern struct {
|
|
flags: AI,
|
|
family: i32,
|
|
socktype: i32,
|
|
protocol: i32,
|
|
addrlen: socklen_t,
|
|
canonname: ?[*:0]u8,
|
|
addr: ?*sockaddr,
|
|
next: ?*addrinfo,
|
|
},
|
|
.dragonfly => extern struct {
|
|
flags: AI,
|
|
family: i32,
|
|
socktype: i32,
|
|
protocol: i32,
|
|
addrlen: socklen_t,
|
|
canonname: ?[*:0]u8,
|
|
addr: ?*sockaddr,
|
|
next: ?*addrinfo,
|
|
},
|
|
.haiku => extern struct {
|
|
flags: AI,
|
|
family: i32,
|
|
socktype: i32,
|
|
protocol: i32,
|
|
addrlen: socklen_t,
|
|
canonname: ?[*:0]u8,
|
|
addr: ?*sockaddr,
|
|
next: ?*addrinfo,
|
|
},
|
|
.openbsd => extern struct {
|
|
flags: AI,
|
|
family: c_int,
|
|
socktype: c_int,
|
|
protocol: c_int,
|
|
addrlen: socklen_t,
|
|
addr: ?*sockaddr,
|
|
canonname: ?[*:0]u8,
|
|
next: ?*addrinfo,
|
|
},
|
|
else => void,
|
|
};
|
|
pub const sockaddr = switch (native_os) {
|
|
.linux, .emscripten => linux.sockaddr,
|
|
.windows => ws2_32.sockaddr,
|
|
.macos, .ios, .tvos, .watchos, .visionos => extern struct {
|
|
len: u8,
|
|
family: sa_family_t,
|
|
data: [14]u8,
|
|
|
|
pub const SS_MAXSIZE = 128;
|
|
pub const storage = extern struct {
|
|
len: u8 align(8),
|
|
family: sa_family_t,
|
|
padding: [126]u8 = undefined,
|
|
|
|
comptime {
|
|
assert(@sizeOf(storage) == SS_MAXSIZE);
|
|
assert(@alignOf(storage) == 8);
|
|
}
|
|
};
|
|
pub const in = extern struct {
|
|
len: u8 = @sizeOf(in),
|
|
family: sa_family_t = AF.INET,
|
|
port: in_port_t,
|
|
addr: u32,
|
|
zero: [8]u8 = [8]u8{ 0, 0, 0, 0, 0, 0, 0, 0 },
|
|
};
|
|
pub const in6 = extern struct {
|
|
len: u8 = @sizeOf(in6),
|
|
family: sa_family_t = AF.INET6,
|
|
port: in_port_t,
|
|
flowinfo: u32,
|
|
addr: [16]u8,
|
|
scope_id: u32,
|
|
};
|
|
|
|
/// UNIX domain socket
|
|
pub const un = extern struct {
|
|
len: u8 = @sizeOf(un),
|
|
family: sa_family_t = AF.UNIX,
|
|
path: [104]u8,
|
|
};
|
|
},
|
|
.freebsd => extern struct {
|
|
/// total length
|
|
len: u8,
|
|
/// address family
|
|
family: sa_family_t,
|
|
/// actually longer; address value
|
|
data: [14]u8,
|
|
|
|
pub const SS_MAXSIZE = 128;
|
|
pub const storage = extern struct {
|
|
len: u8 align(8),
|
|
family: sa_family_t,
|
|
padding: [126]u8 = undefined,
|
|
|
|
comptime {
|
|
assert(@sizeOf(storage) == SS_MAXSIZE);
|
|
assert(@alignOf(storage) == 8);
|
|
}
|
|
};
|
|
|
|
pub const in = extern struct {
|
|
len: u8 = @sizeOf(in),
|
|
family: sa_family_t = AF.INET,
|
|
port: in_port_t,
|
|
addr: u32,
|
|
zero: [8]u8 = [8]u8{ 0, 0, 0, 0, 0, 0, 0, 0 },
|
|
};
|
|
|
|
pub const in6 = extern struct {
|
|
len: u8 = @sizeOf(in6),
|
|
family: sa_family_t = AF.INET6,
|
|
port: in_port_t,
|
|
flowinfo: u32,
|
|
addr: [16]u8,
|
|
scope_id: u32,
|
|
};
|
|
|
|
pub const un = extern struct {
|
|
len: u8 = @sizeOf(un),
|
|
family: sa_family_t = AF.UNIX,
|
|
path: [104]u8,
|
|
};
|
|
},
|
|
.solaris, .illumos => extern struct {
|
|
/// address family
|
|
family: sa_family_t,
|
|
|
|
/// actually longer; address value
|
|
data: [14]u8,
|
|
|
|
pub const SS_MAXSIZE = 256;
|
|
pub const storage = extern struct {
|
|
family: sa_family_t align(8),
|
|
padding: [254]u8 = undefined,
|
|
|
|
comptime {
|
|
assert(@sizeOf(storage) == SS_MAXSIZE);
|
|
assert(@alignOf(storage) == 8);
|
|
}
|
|
};
|
|
|
|
pub const in = extern struct {
|
|
family: sa_family_t = AF.INET,
|
|
port: in_port_t,
|
|
addr: u32,
|
|
zero: [8]u8 = [8]u8{ 0, 0, 0, 0, 0, 0, 0, 0 },
|
|
};
|
|
|
|
pub const in6 = extern struct {
|
|
family: sa_family_t = AF.INET6,
|
|
port: in_port_t,
|
|
flowinfo: u32,
|
|
addr: [16]u8,
|
|
scope_id: u32,
|
|
__src_id: u32 = 0,
|
|
};
|
|
|
|
/// Definitions for UNIX IPC domain.
|
|
pub const un = extern struct {
|
|
family: sa_family_t = AF.UNIX,
|
|
path: [108]u8,
|
|
};
|
|
},
|
|
.netbsd => extern struct {
|
|
/// total length
|
|
len: u8,
|
|
/// address family
|
|
family: sa_family_t,
|
|
/// actually longer; address value
|
|
data: [14]u8,
|
|
|
|
pub const SS_MAXSIZE = 128;
|
|
pub const storage = extern struct {
|
|
len: u8 align(8),
|
|
family: sa_family_t,
|
|
padding: [126]u8 = undefined,
|
|
|
|
comptime {
|
|
assert(@sizeOf(storage) == SS_MAXSIZE);
|
|
assert(@alignOf(storage) == 8);
|
|
}
|
|
};
|
|
|
|
pub const in = extern struct {
|
|
len: u8 = @sizeOf(in),
|
|
family: sa_family_t = AF.INET,
|
|
port: in_port_t,
|
|
addr: u32,
|
|
zero: [8]u8 = [8]u8{ 0, 0, 0, 0, 0, 0, 0, 0 },
|
|
};
|
|
|
|
pub const in6 = extern struct {
|
|
len: u8 = @sizeOf(in6),
|
|
family: sa_family_t = AF.INET6,
|
|
port: in_port_t,
|
|
flowinfo: u32,
|
|
addr: [16]u8,
|
|
scope_id: u32,
|
|
};
|
|
|
|
/// Definitions for UNIX IPC domain.
|
|
pub const un = extern struct {
|
|
/// total sockaddr length
|
|
len: u8 = @sizeOf(un),
|
|
|
|
family: sa_family_t = AF.LOCAL,
|
|
|
|
/// path name
|
|
path: [104]u8,
|
|
};
|
|
},
|
|
.dragonfly => extern struct {
|
|
len: u8,
|
|
family: sa_family_t,
|
|
data: [14]u8,
|
|
|
|
pub const SS_MAXSIZE = 128;
|
|
pub const storage = extern struct {
|
|
len: u8 align(8),
|
|
family: sa_family_t,
|
|
padding: [126]u8 = undefined,
|
|
|
|
comptime {
|
|
assert(@sizeOf(storage) == SS_MAXSIZE);
|
|
assert(@alignOf(storage) == 8);
|
|
}
|
|
};
|
|
|
|
pub const in = extern struct {
|
|
len: u8 = @sizeOf(in),
|
|
family: sa_family_t = AF.INET,
|
|
port: in_port_t,
|
|
addr: u32,
|
|
zero: [8]u8 = [8]u8{ 0, 0, 0, 0, 0, 0, 0, 0 },
|
|
};
|
|
|
|
pub const in6 = extern struct {
|
|
len: u8 = @sizeOf(in6),
|
|
family: sa_family_t = AF.INET6,
|
|
port: in_port_t,
|
|
flowinfo: u32,
|
|
addr: [16]u8,
|
|
scope_id: u32,
|
|
};
|
|
|
|
pub const un = extern struct {
|
|
len: u8 = @sizeOf(un),
|
|
family: sa_family_t = AF.UNIX,
|
|
path: [104]u8,
|
|
};
|
|
},
|
|
.haiku => extern struct {
|
|
/// total length
|
|
len: u8,
|
|
/// address family
|
|
family: sa_family_t,
|
|
/// actually longer; address value
|
|
data: [14]u8,
|
|
|
|
pub const SS_MAXSIZE = 128;
|
|
pub const storage = extern struct {
|
|
len: u8 align(8),
|
|
family: sa_family_t,
|
|
padding: [126]u8 = undefined,
|
|
|
|
comptime {
|
|
assert(@sizeOf(storage) == SS_MAXSIZE);
|
|
assert(@alignOf(storage) == 8);
|
|
}
|
|
};
|
|
|
|
pub const in = extern struct {
|
|
len: u8 = @sizeOf(in),
|
|
family: sa_family_t = AF.INET,
|
|
port: in_port_t,
|
|
addr: u32,
|
|
zero: [8]u8 = [8]u8{ 0, 0, 0, 0, 0, 0, 0, 0 },
|
|
};
|
|
|
|
pub const in6 = extern struct {
|
|
len: u8 = @sizeOf(in6),
|
|
family: sa_family_t = AF.INET6,
|
|
port: in_port_t,
|
|
flowinfo: u32,
|
|
addr: [16]u8,
|
|
scope_id: u32,
|
|
};
|
|
|
|
pub const un = extern struct {
|
|
len: u8 = @sizeOf(un),
|
|
family: sa_family_t = AF.UNIX,
|
|
path: [104]u8,
|
|
};
|
|
},
|
|
.openbsd => extern struct {
|
|
/// total length
|
|
len: u8,
|
|
/// address family
|
|
family: sa_family_t,
|
|
/// actually longer; address value
|
|
data: [14]u8,
|
|
|
|
pub const SS_MAXSIZE = 256;
|
|
pub const storage = extern struct {
|
|
len: u8 align(8),
|
|
family: sa_family_t,
|
|
padding: [254]u8 = undefined,
|
|
|
|
comptime {
|
|
assert(@sizeOf(storage) == SS_MAXSIZE);
|
|
assert(@alignOf(storage) == 8);
|
|
}
|
|
};
|
|
|
|
pub const in = extern struct {
|
|
len: u8 = @sizeOf(in),
|
|
family: sa_family_t = AF.INET,
|
|
port: in_port_t,
|
|
addr: u32,
|
|
zero: [8]u8 = [8]u8{ 0, 0, 0, 0, 0, 0, 0, 0 },
|
|
};
|
|
|
|
pub const in6 = extern struct {
|
|
len: u8 = @sizeOf(in6),
|
|
family: sa_family_t = AF.INET6,
|
|
port: in_port_t,
|
|
flowinfo: u32,
|
|
addr: [16]u8,
|
|
scope_id: u32,
|
|
};
|
|
|
|
/// Definitions for UNIX IPC domain.
|
|
pub const un = extern struct {
|
|
/// total sockaddr length
|
|
len: u8 = @sizeOf(un),
|
|
|
|
family: sa_family_t = AF.LOCAL,
|
|
|
|
/// path name
|
|
path: [104]u8,
|
|
};
|
|
},
|
|
else => void,
|
|
};
|
|
pub const socklen_t = switch (native_os) {
|
|
.linux, .emscripten => linux.socklen_t,
|
|
.windows => ws2_32.socklen_t,
|
|
else => u32,
|
|
};
|
|
pub const in_port_t = u16;
|
|
pub const sa_family_t = switch (native_os) {
|
|
.linux, .emscripten => linux.sa_family_t,
|
|
.windows => ws2_32.ADDRESS_FAMILY,
|
|
.openbsd, .haiku, .dragonfly, .netbsd, .freebsd, .macos, .ios, .tvos, .watchos, .visionos => u8,
|
|
.solaris, .illumos => u16,
|
|
else => void,
|
|
};
|
|
pub const AF = switch (native_os) {
|
|
.linux, .emscripten => linux.AF,
|
|
.windows => ws2_32.AF,
|
|
.macos, .ios, .tvos, .watchos, .visionos => struct {
|
|
pub const UNSPEC = 0;
|
|
pub const LOCAL = 1;
|
|
pub const UNIX = LOCAL;
|
|
pub const INET = 2;
|
|
pub const SYS_CONTROL = 2;
|
|
pub const IMPLINK = 3;
|
|
pub const PUP = 4;
|
|
pub const CHAOS = 5;
|
|
pub const NS = 6;
|
|
pub const ISO = 7;
|
|
pub const OSI = ISO;
|
|
pub const ECMA = 8;
|
|
pub const DATAKIT = 9;
|
|
pub const CCITT = 10;
|
|
pub const SNA = 11;
|
|
pub const DECnet = 12;
|
|
pub const DLI = 13;
|
|
pub const LAT = 14;
|
|
pub const HYLINK = 15;
|
|
pub const APPLETALK = 16;
|
|
pub const ROUTE = 17;
|
|
pub const LINK = 18;
|
|
pub const XTP = 19;
|
|
pub const COIP = 20;
|
|
pub const CNT = 21;
|
|
pub const RTIP = 22;
|
|
pub const IPX = 23;
|
|
pub const SIP = 24;
|
|
pub const PIP = 25;
|
|
pub const ISDN = 28;
|
|
pub const E164 = ISDN;
|
|
pub const KEY = 29;
|
|
pub const INET6 = 30;
|
|
pub const NATM = 31;
|
|
pub const SYSTEM = 32;
|
|
pub const NETBIOS = 33;
|
|
pub const PPP = 34;
|
|
pub const MAX = 40;
|
|
},
|
|
.freebsd => struct {
|
|
pub const UNSPEC = 0;
|
|
pub const UNIX = 1;
|
|
pub const LOCAL = UNIX;
|
|
pub const FILE = LOCAL;
|
|
pub const INET = 2;
|
|
pub const IMPLINK = 3;
|
|
pub const PUP = 4;
|
|
pub const CHAOS = 5;
|
|
pub const NETBIOS = 6;
|
|
pub const ISO = 7;
|
|
pub const OSI = ISO;
|
|
pub const ECMA = 8;
|
|
pub const DATAKIT = 9;
|
|
pub const CCITT = 10;
|
|
pub const SNA = 11;
|
|
pub const DECnet = 12;
|
|
pub const DLI = 13;
|
|
pub const LAT = 14;
|
|
pub const HYLINK = 15;
|
|
pub const APPLETALK = 16;
|
|
pub const ROUTE = 17;
|
|
pub const LINK = 18;
|
|
pub const pseudo_XTP = 19;
|
|
pub const COIP = 20;
|
|
pub const CNT = 21;
|
|
pub const pseudo_RTIP = 22;
|
|
pub const IPX = 23;
|
|
pub const SIP = 24;
|
|
pub const pseudo_PIP = 25;
|
|
pub const ISDN = 26;
|
|
pub const E164 = ISDN;
|
|
pub const pseudo_KEY = 27;
|
|
pub const INET6 = 28;
|
|
pub const NATM = 29;
|
|
pub const ATM = 30;
|
|
pub const pseudo_HDRCMPLT = 31;
|
|
pub const NETGRAPH = 32;
|
|
pub const SLOW = 33;
|
|
pub const SCLUSTER = 34;
|
|
pub const ARP = 35;
|
|
pub const BLUETOOTH = 36;
|
|
pub const IEEE80211 = 37;
|
|
pub const INET_SDP = 40;
|
|
pub const INET6_SDP = 42;
|
|
pub const MAX = 42;
|
|
},
|
|
.solaris, .illumos => struct {
|
|
pub const UNSPEC = 0;
|
|
pub const UNIX = 1;
|
|
pub const LOCAL = UNIX;
|
|
pub const FILE = UNIX;
|
|
pub const INET = 2;
|
|
pub const IMPLINK = 3;
|
|
pub const PUP = 4;
|
|
pub const CHAOS = 5;
|
|
pub const NS = 6;
|
|
pub const NBS = 7;
|
|
pub const ECMA = 8;
|
|
pub const DATAKIT = 9;
|
|
pub const CCITT = 10;
|
|
pub const SNA = 11;
|
|
pub const DECnet = 12;
|
|
pub const DLI = 13;
|
|
pub const LAT = 14;
|
|
pub const HYLINK = 15;
|
|
pub const APPLETALK = 16;
|
|
pub const NIT = 17;
|
|
pub const @"802" = 18;
|
|
pub const OSI = 19;
|
|
pub const X25 = 20;
|
|
pub const OSINET = 21;
|
|
pub const GOSIP = 22;
|
|
pub const IPX = 23;
|
|
pub const ROUTE = 24;
|
|
pub const LINK = 25;
|
|
pub const INET6 = 26;
|
|
pub const KEY = 27;
|
|
pub const NCA = 28;
|
|
pub const POLICY = 29;
|
|
pub const INET_OFFLOAD = 30;
|
|
pub const TRILL = 31;
|
|
pub const PACKET = 32;
|
|
pub const LX_NETLINK = 33;
|
|
pub const MAX = 33;
|
|
},
|
|
.netbsd => struct {
|
|
pub const UNSPEC = 0;
|
|
pub const LOCAL = 1;
|
|
pub const UNIX = LOCAL;
|
|
pub const INET = 2;
|
|
pub const IMPLINK = 3;
|
|
pub const PUP = 4;
|
|
pub const CHAOS = 5;
|
|
pub const NS = 6;
|
|
pub const ISO = 7;
|
|
pub const OSI = ISO;
|
|
pub const ECMA = 8;
|
|
pub const DATAKIT = 9;
|
|
pub const CCITT = 10;
|
|
pub const SNA = 11;
|
|
pub const DECnet = 12;
|
|
pub const DLI = 13;
|
|
pub const LAT = 14;
|
|
pub const HYLINK = 15;
|
|
pub const APPLETALK = 16;
|
|
pub const OROUTE = 17;
|
|
pub const LINK = 18;
|
|
pub const COIP = 20;
|
|
pub const CNT = 21;
|
|
pub const IPX = 23;
|
|
pub const INET6 = 24;
|
|
pub const ISDN = 26;
|
|
pub const E164 = ISDN;
|
|
pub const NATM = 27;
|
|
pub const ARP = 28;
|
|
pub const BLUETOOTH = 31;
|
|
pub const IEEE80211 = 32;
|
|
pub const MPLS = 33;
|
|
pub const ROUTE = 34;
|
|
pub const CAN = 35;
|
|
pub const ETHER = 36;
|
|
pub const MAX = 37;
|
|
},
|
|
.dragonfly => struct {
|
|
pub const UNSPEC = 0;
|
|
pub const OSI = ISO;
|
|
pub const UNIX = LOCAL;
|
|
pub const LOCAL = 1;
|
|
pub const INET = 2;
|
|
pub const IMPLINK = 3;
|
|
pub const PUP = 4;
|
|
pub const CHAOS = 5;
|
|
pub const NETBIOS = 6;
|
|
pub const ISO = 7;
|
|
pub const ECMA = 8;
|
|
pub const DATAKIT = 9;
|
|
pub const CCITT = 10;
|
|
pub const SNA = 11;
|
|
pub const DLI = 13;
|
|
pub const LAT = 14;
|
|
pub const HYLINK = 15;
|
|
pub const APPLETALK = 16;
|
|
pub const ROUTE = 17;
|
|
pub const LINK = 18;
|
|
pub const COIP = 20;
|
|
pub const CNT = 21;
|
|
pub const IPX = 23;
|
|
pub const SIP = 24;
|
|
pub const ISDN = 26;
|
|
pub const INET6 = 28;
|
|
pub const NATM = 29;
|
|
pub const ATM = 30;
|
|
pub const NETGRAPH = 32;
|
|
pub const BLUETOOTH = 33;
|
|
pub const MPLS = 34;
|
|
pub const MAX = 36;
|
|
},
|
|
.haiku => struct {
|
|
pub const UNSPEC = 0;
|
|
pub const INET = 1;
|
|
pub const APPLETALK = 2;
|
|
pub const ROUTE = 3;
|
|
pub const LINK = 4;
|
|
pub const INET6 = 5;
|
|
pub const DLI = 6;
|
|
pub const IPX = 7;
|
|
pub const NOTIFY = 8;
|
|
pub const LOCAL = 9;
|
|
pub const UNIX = LOCAL;
|
|
pub const BLUETOOTH = 10;
|
|
pub const MAX = 11;
|
|
},
|
|
.openbsd => struct {
|
|
pub const UNSPEC = 0;
|
|
pub const UNIX = 1;
|
|
pub const LOCAL = UNIX;
|
|
pub const INET = 2;
|
|
pub const APPLETALK = 16;
|
|
pub const INET6 = 24;
|
|
pub const KEY = 30;
|
|
pub const ROUTE = 17;
|
|
pub const SNA = 11;
|
|
pub const MPLS = 33;
|
|
pub const BLUETOOTH = 32;
|
|
pub const ISDN = 26;
|
|
pub const MAX = 36;
|
|
},
|
|
else => void,
|
|
};
|
|
pub const PF = switch (native_os) {
|
|
.linux, .emscripten => linux.PF,
|
|
.macos, .ios, .tvos, .watchos, .visionos => struct {
|
|
pub const UNSPEC = AF.UNSPEC;
|
|
pub const LOCAL = AF.LOCAL;
|
|
pub const UNIX = PF.LOCAL;
|
|
pub const INET = AF.INET;
|
|
pub const IMPLINK = AF.IMPLINK;
|
|
pub const PUP = AF.PUP;
|
|
pub const CHAOS = AF.CHAOS;
|
|
pub const NS = AF.NS;
|
|
pub const ISO = AF.ISO;
|
|
pub const OSI = AF.ISO;
|
|
pub const ECMA = AF.ECMA;
|
|
pub const DATAKIT = AF.DATAKIT;
|
|
pub const CCITT = AF.CCITT;
|
|
pub const SNA = AF.SNA;
|
|
pub const DECnet = AF.DECnet;
|
|
pub const DLI = AF.DLI;
|
|
pub const LAT = AF.LAT;
|
|
pub const HYLINK = AF.HYLINK;
|
|
pub const APPLETALK = AF.APPLETALK;
|
|
pub const ROUTE = AF.ROUTE;
|
|
pub const LINK = AF.LINK;
|
|
pub const XTP = AF.XTP;
|
|
pub const COIP = AF.COIP;
|
|
pub const CNT = AF.CNT;
|
|
pub const SIP = AF.SIP;
|
|
pub const IPX = AF.IPX;
|
|
pub const RTIP = AF.RTIP;
|
|
pub const PIP = AF.PIP;
|
|
pub const ISDN = AF.ISDN;
|
|
pub const KEY = AF.KEY;
|
|
pub const INET6 = AF.INET6;
|
|
pub const NATM = AF.NATM;
|
|
pub const SYSTEM = AF.SYSTEM;
|
|
pub const NETBIOS = AF.NETBIOS;
|
|
pub const PPP = AF.PPP;
|
|
pub const MAX = AF.MAX;
|
|
},
|
|
.freebsd => struct {
|
|
pub const UNSPEC = AF.UNSPEC;
|
|
pub const LOCAL = AF.LOCAL;
|
|
pub const UNIX = PF.LOCAL;
|
|
pub const INET = AF.INET;
|
|
pub const IMPLINK = AF.IMPLINK;
|
|
pub const PUP = AF.PUP;
|
|
pub const CHAOS = AF.CHAOS;
|
|
pub const NETBIOS = AF.NETBIOS;
|
|
pub const ISO = AF.ISO;
|
|
pub const OSI = AF.ISO;
|
|
pub const ECMA = AF.ECMA;
|
|
pub const DATAKIT = AF.DATAKIT;
|
|
pub const CCITT = AF.CCITT;
|
|
pub const DECnet = AF.DECnet;
|
|
pub const DLI = AF.DLI;
|
|
pub const LAT = AF.LAT;
|
|
pub const HYLINK = AF.HYLINK;
|
|
pub const APPLETALK = AF.APPLETALK;
|
|
pub const ROUTE = AF.ROUTE;
|
|
pub const LINK = AF.LINK;
|
|
pub const XTP = AF.pseudo_XTP;
|
|
pub const COIP = AF.COIP;
|
|
pub const CNT = AF.CNT;
|
|
pub const SIP = AF.SIP;
|
|
pub const IPX = AF.IPX;
|
|
pub const RTIP = AF.pseudo_RTIP;
|
|
pub const PIP = AF.pseudo_PIP;
|
|
pub const ISDN = AF.ISDN;
|
|
pub const KEY = AF.pseudo_KEY;
|
|
pub const INET6 = AF.pseudo_INET6;
|
|
pub const NATM = AF.NATM;
|
|
pub const ATM = AF.ATM;
|
|
pub const NETGRAPH = AF.NETGRAPH;
|
|
pub const SLOW = AF.SLOW;
|
|
pub const SCLUSTER = AF.SCLUSTER;
|
|
pub const ARP = AF.ARP;
|
|
pub const BLUETOOTH = AF.BLUETOOTH;
|
|
pub const IEEE80211 = AF.IEEE80211;
|
|
pub const INET_SDP = AF.INET_SDP;
|
|
pub const INET6_SDP = AF.INET6_SDP;
|
|
pub const MAX = AF.MAX;
|
|
},
|
|
.solaris, .illumos => struct {
|
|
pub const UNSPEC = AF.UNSPEC;
|
|
pub const UNIX = AF.UNIX;
|
|
pub const LOCAL = UNIX;
|
|
pub const FILE = UNIX;
|
|
pub const INET = AF.INET;
|
|
pub const IMPLINK = AF.IMPLINK;
|
|
pub const PUP = AF.PUP;
|
|
pub const CHAOS = AF.CHAOS;
|
|
pub const NS = AF.NS;
|
|
pub const NBS = AF.NBS;
|
|
pub const ECMA = AF.ECMA;
|
|
pub const DATAKIT = AF.DATAKIT;
|
|
pub const CCITT = AF.CCITT;
|
|
pub const SNA = AF.SNA;
|
|
pub const DECnet = AF.DECnet;
|
|
pub const DLI = AF.DLI;
|
|
pub const LAT = AF.LAT;
|
|
pub const HYLINK = AF.HYLINK;
|
|
pub const APPLETALK = AF.APPLETALK;
|
|
pub const NIT = AF.NIT;
|
|
pub const @"802" = AF.@"802";
|
|
pub const OSI = AF.OSI;
|
|
pub const X25 = AF.X25;
|
|
pub const OSINET = AF.OSINET;
|
|
pub const GOSIP = AF.GOSIP;
|
|
pub const IPX = AF.IPX;
|
|
pub const ROUTE = AF.ROUTE;
|
|
pub const LINK = AF.LINK;
|
|
pub const INET6 = AF.INET6;
|
|
pub const KEY = AF.KEY;
|
|
pub const NCA = AF.NCA;
|
|
pub const POLICY = AF.POLICY;
|
|
pub const TRILL = AF.TRILL;
|
|
pub const PACKET = AF.PACKET;
|
|
pub const LX_NETLINK = AF.LX_NETLINK;
|
|
pub const MAX = AF.MAX;
|
|
},
|
|
.netbsd => struct {
|
|
pub const UNSPEC = AF.UNSPEC;
|
|
pub const LOCAL = AF.LOCAL;
|
|
pub const UNIX = PF.LOCAL;
|
|
pub const INET = AF.INET;
|
|
pub const IMPLINK = AF.IMPLINK;
|
|
pub const PUP = AF.PUP;
|
|
pub const CHAOS = AF.CHAOS;
|
|
pub const NS = AF.NS;
|
|
pub const ISO = AF.ISO;
|
|
pub const OSI = AF.ISO;
|
|
pub const ECMA = AF.ECMA;
|
|
pub const DATAKIT = AF.DATAKIT;
|
|
pub const CCITT = AF.CCITT;
|
|
pub const SNA = AF.SNA;
|
|
pub const DECnet = AF.DECnet;
|
|
pub const DLI = AF.DLI;
|
|
pub const LAT = AF.LAT;
|
|
pub const HYLINK = AF.HYLINK;
|
|
pub const APPLETALK = AF.APPLETALK;
|
|
pub const OROUTE = AF.OROUTE;
|
|
pub const LINK = AF.LINK;
|
|
pub const COIP = AF.COIP;
|
|
pub const CNT = AF.CNT;
|
|
pub const INET6 = AF.INET6;
|
|
pub const IPX = AF.IPX;
|
|
pub const ISDN = AF.ISDN;
|
|
pub const E164 = AF.E164;
|
|
pub const NATM = AF.NATM;
|
|
pub const ARP = AF.ARP;
|
|
pub const BLUETOOTH = AF.BLUETOOTH;
|
|
pub const MPLS = AF.MPLS;
|
|
pub const ROUTE = AF.ROUTE;
|
|
pub const CAN = AF.CAN;
|
|
pub const ETHER = AF.ETHER;
|
|
pub const MAX = AF.MAX;
|
|
},
|
|
.dragonfly => struct {
|
|
pub const INET6 = AF.INET6;
|
|
pub const IMPLINK = AF.IMPLINK;
|
|
pub const ROUTE = AF.ROUTE;
|
|
pub const ISO = AF.ISO;
|
|
pub const PIP = AF.pseudo_PIP;
|
|
pub const CHAOS = AF.CHAOS;
|
|
pub const DATAKIT = AF.DATAKIT;
|
|
pub const INET = AF.INET;
|
|
pub const APPLETALK = AF.APPLETALK;
|
|
pub const SIP = AF.SIP;
|
|
pub const OSI = AF.ISO;
|
|
pub const CNT = AF.CNT;
|
|
pub const LINK = AF.LINK;
|
|
pub const HYLINK = AF.HYLINK;
|
|
pub const MAX = AF.MAX;
|
|
pub const KEY = AF.pseudo_KEY;
|
|
pub const PUP = AF.PUP;
|
|
pub const COIP = AF.COIP;
|
|
pub const SNA = AF.SNA;
|
|
pub const LOCAL = AF.LOCAL;
|
|
pub const NETBIOS = AF.NETBIOS;
|
|
pub const NATM = AF.NATM;
|
|
pub const BLUETOOTH = AF.BLUETOOTH;
|
|
pub const UNSPEC = AF.UNSPEC;
|
|
pub const NETGRAPH = AF.NETGRAPH;
|
|
pub const ECMA = AF.ECMA;
|
|
pub const IPX = AF.IPX;
|
|
pub const DLI = AF.DLI;
|
|
pub const ATM = AF.ATM;
|
|
pub const CCITT = AF.CCITT;
|
|
pub const ISDN = AF.ISDN;
|
|
pub const RTIP = AF.pseudo_RTIP;
|
|
pub const LAT = AF.LAT;
|
|
pub const UNIX = PF.LOCAL;
|
|
pub const XTP = AF.pseudo_XTP;
|
|
pub const DECnet = AF.DECnet;
|
|
},
|
|
.haiku => struct {
|
|
pub const UNSPEC = AF.UNSPEC;
|
|
pub const INET = AF.INET;
|
|
pub const ROUTE = AF.ROUTE;
|
|
pub const LINK = AF.LINK;
|
|
pub const INET6 = AF.INET6;
|
|
pub const LOCAL = AF.LOCAL;
|
|
pub const UNIX = AF.UNIX;
|
|
pub const BLUETOOTH = AF.BLUETOOTH;
|
|
},
|
|
.openbsd => struct {
|
|
pub const UNSPEC = AF.UNSPEC;
|
|
pub const LOCAL = AF.LOCAL;
|
|
pub const UNIX = AF.UNIX;
|
|
pub const INET = AF.INET;
|
|
pub const APPLETALK = AF.APPLETALK;
|
|
pub const INET6 = AF.INET6;
|
|
pub const DECnet = AF.DECnet;
|
|
pub const KEY = AF.KEY;
|
|
pub const ROUTE = AF.ROUTE;
|
|
pub const SNA = AF.SNA;
|
|
pub const MPLS = AF.MPLS;
|
|
pub const BLUETOOTH = AF.BLUETOOTH;
|
|
pub const ISDN = AF.ISDN;
|
|
pub const MAX = AF.MAX;
|
|
},
|
|
else => void,
|
|
};
|
|
pub const DT = switch (native_os) {
|
|
.linux => linux.DT,
|
|
.netbsd, .freebsd, .macos, .ios, .tvos, .watchos, .visionos => struct {
|
|
pub const UNKNOWN = 0;
|
|
pub const FIFO = 1;
|
|
pub const CHR = 2;
|
|
pub const DIR = 4;
|
|
pub const BLK = 6;
|
|
pub const REG = 8;
|
|
pub const LNK = 10;
|
|
pub const SOCK = 12;
|
|
pub const WHT = 14;
|
|
},
|
|
.dragonfly => struct {
|
|
pub const UNKNOWN = 0;
|
|
pub const FIFO = 1;
|
|
pub const CHR = 2;
|
|
pub const DIR = 4;
|
|
pub const BLK = 6;
|
|
pub const REG = 8;
|
|
pub const LNK = 10;
|
|
pub const SOCK = 12;
|
|
pub const WHT = 14;
|
|
pub const DBF = 15;
|
|
},
|
|
.openbsd => struct {
|
|
pub const UNKNOWN = 0;
|
|
pub const FIFO = 1;
|
|
pub const CHR = 2;
|
|
pub const DIR = 4;
|
|
pub const BLK = 6;
|
|
pub const REG = 8;
|
|
pub const LNK = 10;
|
|
pub const SOCK = 12;
|
|
pub const WHT = 14; // XXX
|
|
},
|
|
else => void,
|
|
};
|
|
pub const MSG = switch (native_os) {
|
|
.linux => linux.MSG,
|
|
.emscripten => emscripten.MSG,
|
|
.windows => ws2_32.MSG,
|
|
.haiku => struct {
|
|
pub const OOB = 0x0001;
|
|
pub const PEEK = 0x0002;
|
|
pub const DONTROUTE = 0x0004;
|
|
pub const EOR = 0x0008;
|
|
pub const TRUNC = 0x0010;
|
|
pub const CTRUNC = 0x0020;
|
|
pub const WAITALL = 0x0040;
|
|
pub const DONTWAIT = 0x0080;
|
|
pub const BCAST = 0x0100;
|
|
pub const MCAST = 0x0200;
|
|
pub const EOF = 0x0400;
|
|
pub const NOSIGNAL = 0x0800;
|
|
},
|
|
else => void,
|
|
};
|
|
pub const SOCK = switch (native_os) {
|
|
.linux => linux.SOCK,
|
|
.emscripten => emscripten.SOCK,
|
|
.windows => ws2_32.SOCK,
|
|
.macos, .ios, .tvos, .watchos, .visionos => struct {
|
|
pub const STREAM = 1;
|
|
pub const DGRAM = 2;
|
|
pub const RAW = 3;
|
|
pub const RDM = 4;
|
|
pub const SEQPACKET = 5;
|
|
pub const MAXADDRLEN = 255;
|
|
|
|
/// Not actually supported by Darwin, but Zig supplies a shim.
|
|
/// This numerical value is not ABI-stable. It need only not conflict
|
|
/// with any other `SOCK` bits.
|
|
pub const CLOEXEC = 1 << 15;
|
|
/// Not actually supported by Darwin, but Zig supplies a shim.
|
|
/// This numerical value is not ABI-stable. It need only not conflict
|
|
/// with any other `SOCK` bits.
|
|
pub const NONBLOCK = 1 << 16;
|
|
},
|
|
.freebsd => struct {
|
|
pub const STREAM = 1;
|
|
pub const DGRAM = 2;
|
|
pub const RAW = 3;
|
|
pub const RDM = 4;
|
|
pub const SEQPACKET = 5;
|
|
|
|
pub const CLOEXEC = 0x10000000;
|
|
pub const NONBLOCK = 0x20000000;
|
|
},
|
|
.solaris, .illumos => struct {
|
|
/// Datagram.
|
|
pub const DGRAM = 1;
|
|
/// STREAM.
|
|
pub const STREAM = 2;
|
|
/// Raw-protocol interface.
|
|
pub const RAW = 4;
|
|
/// Reliably-delivered message.
|
|
pub const RDM = 5;
|
|
/// Sequenced packed stream.
|
|
pub const SEQPACKET = 6;
|
|
|
|
pub const NONBLOCK = 0x100000;
|
|
pub const NDELAY = 0x200000;
|
|
pub const CLOEXEC = 0x080000;
|
|
},
|
|
.netbsd => struct {
|
|
pub const STREAM = 1;
|
|
pub const DGRAM = 2;
|
|
pub const RAW = 3;
|
|
pub const RDM = 4;
|
|
pub const SEQPACKET = 5;
|
|
pub const CONN_DGRAM = 6;
|
|
pub const DCCP = CONN_DGRAM;
|
|
|
|
pub const CLOEXEC = 0x10000000;
|
|
pub const NONBLOCK = 0x20000000;
|
|
pub const NOSIGPIPE = 0x40000000;
|
|
pub const FLAGS_MASK = 0xf0000000;
|
|
},
|
|
.dragonfly => struct {
|
|
pub const STREAM = 1;
|
|
pub const DGRAM = 2;
|
|
pub const RAW = 3;
|
|
pub const RDM = 4;
|
|
pub const SEQPACKET = 5;
|
|
pub const MAXADDRLEN = 255;
|
|
pub const CLOEXEC = 0x10000000;
|
|
pub const NONBLOCK = 0x20000000;
|
|
},
|
|
.haiku => struct {
|
|
pub const STREAM = 1;
|
|
pub const DGRAM = 2;
|
|
pub const RAW = 3;
|
|
pub const SEQPACKET = 5;
|
|
pub const MISC = 255;
|
|
},
|
|
.openbsd => struct {
|
|
pub const STREAM = 1;
|
|
pub const DGRAM = 2;
|
|
pub const RAW = 3;
|
|
pub const RDM = 4;
|
|
pub const SEQPACKET = 5;
|
|
|
|
pub const CLOEXEC = 0x8000;
|
|
pub const NONBLOCK = 0x4000;
|
|
},
|
|
else => void,
|
|
};
|
|
pub const TCP = switch (native_os) {
|
|
.linux => linux.TCP,
|
|
.emscripten => emscripten.TCP,
|
|
.windows => ws2_32.TCP,
|
|
else => void,
|
|
};
|
|
pub const IPPROTO = switch (native_os) {
|
|
.linux, .emscripten => linux.IPPROTO,
|
|
.windows => ws2_32.IPPROTO,
|
|
.macos, .ios, .tvos, .watchos, .visionos => struct {
|
|
pub const ICMP = 1;
|
|
pub const ICMPV6 = 58;
|
|
pub const TCP = 6;
|
|
pub const UDP = 17;
|
|
pub const IP = 0;
|
|
pub const IPV6 = 41;
|
|
},
|
|
.freebsd => struct {
|
|
/// dummy for IP
|
|
pub const IP = 0;
|
|
/// control message protocol
|
|
pub const ICMP = 1;
|
|
/// tcp
|
|
pub const TCP = 6;
|
|
/// user datagram protocol
|
|
pub const UDP = 17;
|
|
/// IP6 header
|
|
pub const IPV6 = 41;
|
|
/// raw IP packet
|
|
pub const RAW = 255;
|
|
/// IP6 hop-by-hop options
|
|
pub const HOPOPTS = 0;
|
|
/// group mgmt protocol
|
|
pub const IGMP = 2;
|
|
/// gateway^2 (deprecated)
|
|
pub const GGP = 3;
|
|
/// IPv4 encapsulation
|
|
pub const IPV4 = 4;
|
|
/// for compatibility
|
|
pub const IPIP = IPV4;
|
|
/// Stream protocol II
|
|
pub const ST = 7;
|
|
/// exterior gateway protocol
|
|
pub const EGP = 8;
|
|
/// private interior gateway
|
|
pub const PIGP = 9;
|
|
/// BBN RCC Monitoring
|
|
pub const RCCMON = 10;
|
|
/// network voice protocol
|
|
pub const NVPII = 11;
|
|
/// pup
|
|
pub const PUP = 12;
|
|
/// Argus
|
|
pub const ARGUS = 13;
|
|
/// EMCON
|
|
pub const EMCON = 14;
|
|
/// Cross Net Debugger
|
|
pub const XNET = 15;
|
|
/// Chaos
|
|
pub const CHAOS = 16;
|
|
/// Multiplexing
|
|
pub const MUX = 18;
|
|
/// DCN Measurement Subsystems
|
|
pub const MEAS = 19;
|
|
/// Host Monitoring
|
|
pub const HMP = 20;
|
|
/// Packet Radio Measurement
|
|
pub const PRM = 21;
|
|
/// xns idp
|
|
pub const IDP = 22;
|
|
/// Trunk-1
|
|
pub const TRUNK1 = 23;
|
|
/// Trunk-2
|
|
pub const TRUNK2 = 24;
|
|
/// Leaf-1
|
|
pub const LEAF1 = 25;
|
|
/// Leaf-2
|
|
pub const LEAF2 = 26;
|
|
/// Reliable Data
|
|
pub const RDP = 27;
|
|
/// Reliable Transaction
|
|
pub const IRTP = 28;
|
|
/// tp-4 w/ class negotiation
|
|
pub const TP = 29;
|
|
/// Bulk Data Transfer
|
|
pub const BLT = 30;
|
|
/// Network Services
|
|
pub const NSP = 31;
|
|
/// Merit Internodal
|
|
pub const INP = 32;
|
|
/// Datagram Congestion Control Protocol
|
|
pub const DCCP = 33;
|
|
/// Third Party Connect
|
|
pub const @"3PC" = 34;
|
|
/// InterDomain Policy Routing
|
|
pub const IDPR = 35;
|
|
/// XTP
|
|
pub const XTP = 36;
|
|
/// Datagram Delivery
|
|
pub const DDP = 37;
|
|
/// Control Message Transport
|
|
pub const CMTP = 38;
|
|
/// TP++ Transport
|
|
pub const TPXX = 39;
|
|
/// IL transport protocol
|
|
pub const IL = 40;
|
|
/// Source Demand Routing
|
|
pub const SDRP = 42;
|
|
/// IP6 routing header
|
|
pub const ROUTING = 43;
|
|
/// IP6 fragmentation header
|
|
pub const FRAGMENT = 44;
|
|
/// InterDomain Routing
|
|
pub const IDRP = 45;
|
|
/// resource reservation
|
|
pub const RSVP = 46;
|
|
/// General Routing Encap.
|
|
pub const GRE = 47;
|
|
/// Mobile Host Routing
|
|
pub const MHRP = 48;
|
|
/// BHA
|
|
pub const BHA = 49;
|
|
/// IP6 Encap Sec. Payload
|
|
pub const ESP = 50;
|
|
/// IP6 Auth Header
|
|
pub const AH = 51;
|
|
/// Integ. Net Layer Security
|
|
pub const INLSP = 52;
|
|
/// IP with encryption
|
|
pub const SWIPE = 53;
|
|
/// Next Hop Resolution
|
|
pub const NHRP = 54;
|
|
/// IP Mobility
|
|
pub const MOBILE = 55;
|
|
/// Transport Layer Security
|
|
pub const TLSP = 56;
|
|
/// SKIP
|
|
pub const SKIP = 57;
|
|
/// ICMP6
|
|
pub const ICMPV6 = 58;
|
|
/// IP6 no next header
|
|
pub const NONE = 59;
|
|
/// IP6 destination option
|
|
pub const DSTOPTS = 60;
|
|
/// any host internal protocol
|
|
pub const AHIP = 61;
|
|
/// CFTP
|
|
pub const CFTP = 62;
|
|
/// "hello" routing protocol
|
|
pub const HELLO = 63;
|
|
/// SATNET/Backroom EXPAK
|
|
pub const SATEXPAK = 64;
|
|
/// Kryptolan
|
|
pub const KRYPTOLAN = 65;
|
|
/// Remote Virtual Disk
|
|
pub const RVD = 66;
|
|
/// Pluribus Packet Core
|
|
pub const IPPC = 67;
|
|
/// Any distributed FS
|
|
pub const ADFS = 68;
|
|
/// Satnet Monitoring
|
|
pub const SATMON = 69;
|
|
/// VISA Protocol
|
|
pub const VISA = 70;
|
|
/// Packet Core Utility
|
|
pub const IPCV = 71;
|
|
/// Comp. Prot. Net. Executive
|
|
pub const CPNX = 72;
|
|
/// Comp. Prot. HeartBeat
|
|
pub const CPHB = 73;
|
|
/// Wang Span Network
|
|
pub const WSN = 74;
|
|
/// Packet Video Protocol
|
|
pub const PVP = 75;
|
|
/// BackRoom SATNET Monitoring
|
|
pub const BRSATMON = 76;
|
|
/// Sun net disk proto (temp.)
|
|
pub const ND = 77;
|
|
/// WIDEBAND Monitoring
|
|
pub const WBMON = 78;
|
|
/// WIDEBAND EXPAK
|
|
pub const WBEXPAK = 79;
|
|
/// ISO cnlp
|
|
pub const EON = 80;
|
|
/// VMTP
|
|
pub const VMTP = 81;
|
|
/// Secure VMTP
|
|
pub const SVMTP = 82;
|
|
/// Banyon VINES
|
|
pub const VINES = 83;
|
|
/// TTP
|
|
pub const TTP = 84;
|
|
/// NSFNET-IGP
|
|
pub const IGP = 85;
|
|
/// dissimilar gateway prot.
|
|
pub const DGP = 86;
|
|
/// TCF
|
|
pub const TCF = 87;
|
|
/// Cisco/GXS IGRP
|
|
pub const IGRP = 88;
|
|
/// OSPFIGP
|
|
pub const OSPFIGP = 89;
|
|
/// Strite RPC protocol
|
|
pub const SRPC = 90;
|
|
/// Locus Address Resoloution
|
|
pub const LARP = 91;
|
|
/// Multicast Transport
|
|
pub const MTP = 92;
|
|
/// AX.25 Frames
|
|
pub const AX25 = 93;
|
|
/// IP encapsulated in IP
|
|
pub const IPEIP = 94;
|
|
/// Mobile Int.ing control
|
|
pub const MICP = 95;
|
|
/// Semaphore Comm. security
|
|
pub const SCCSP = 96;
|
|
/// Ethernet IP encapsulation
|
|
pub const ETHERIP = 97;
|
|
/// encapsulation header
|
|
pub const ENCAP = 98;
|
|
/// any private encr. scheme
|
|
pub const APES = 99;
|
|
/// GMTP
|
|
pub const GMTP = 100;
|
|
/// payload compression (IPComp)
|
|
pub const IPCOMP = 108;
|
|
/// SCTP
|
|
pub const SCTP = 132;
|
|
/// IPv6 Mobility Header
|
|
pub const MH = 135;
|
|
/// UDP-Lite
|
|
pub const UDPLITE = 136;
|
|
/// IP6 Host Identity Protocol
|
|
pub const HIP = 139;
|
|
/// IP6 Shim6 Protocol
|
|
pub const SHIM6 = 140;
|
|
/// Protocol Independent Mcast
|
|
pub const PIM = 103;
|
|
/// CARP
|
|
pub const CARP = 112;
|
|
/// PGM
|
|
pub const PGM = 113;
|
|
/// MPLS-in-IP
|
|
pub const MPLS = 137;
|
|
/// PFSYNC
|
|
pub const PFSYNC = 240;
|
|
/// Reserved
|
|
pub const RESERVED_253 = 253;
|
|
/// Reserved
|
|
pub const RESERVED_254 = 254;
|
|
},
|
|
.solaris, .illumos => struct {
|
|
/// dummy for IP
|
|
pub const IP = 0;
|
|
/// Hop by hop header for IPv6
|
|
pub const HOPOPTS = 0;
|
|
/// control message protocol
|
|
pub const ICMP = 1;
|
|
/// group control protocol
|
|
pub const IGMP = 2;
|
|
/// gateway^2 (deprecated)
|
|
pub const GGP = 3;
|
|
/// IP in IP encapsulation
|
|
pub const ENCAP = 4;
|
|
/// tcp
|
|
pub const TCP = 6;
|
|
/// exterior gateway protocol
|
|
pub const EGP = 8;
|
|
/// pup
|
|
pub const PUP = 12;
|
|
/// user datagram protocol
|
|
pub const UDP = 17;
|
|
/// xns idp
|
|
pub const IDP = 22;
|
|
/// IPv6 encapsulated in IP
|
|
pub const IPV6 = 41;
|
|
/// Routing header for IPv6
|
|
pub const ROUTING = 43;
|
|
/// Fragment header for IPv6
|
|
pub const FRAGMENT = 44;
|
|
/// rsvp
|
|
pub const RSVP = 46;
|
|
/// IPsec Encap. Sec. Payload
|
|
pub const ESP = 50;
|
|
/// IPsec Authentication Hdr.
|
|
pub const AH = 51;
|
|
/// ICMP for IPv6
|
|
pub const ICMPV6 = 58;
|
|
/// No next header for IPv6
|
|
pub const NONE = 59;
|
|
/// Destination options
|
|
pub const DSTOPTS = 60;
|
|
/// "hello" routing protocol
|
|
pub const HELLO = 63;
|
|
/// UNOFFICIAL net disk proto
|
|
pub const ND = 77;
|
|
/// ISO clnp
|
|
pub const EON = 80;
|
|
/// OSPF
|
|
pub const OSPF = 89;
|
|
/// PIM routing protocol
|
|
pub const PIM = 103;
|
|
/// Stream Control
|
|
pub const SCTP = 132;
|
|
/// raw IP packet
|
|
pub const RAW = 255;
|
|
/// Sockets Direct Protocol
|
|
pub const PROTO_SDP = 257;
|
|
},
|
|
.netbsd => struct {
|
|
/// dummy for IP
|
|
pub const IP = 0;
|
|
/// IP6 hop-by-hop options
|
|
pub const HOPOPTS = 0;
|
|
/// control message protocol
|
|
pub const ICMP = 1;
|
|
/// group mgmt protocol
|
|
pub const IGMP = 2;
|
|
/// gateway^2 (deprecated)
|
|
pub const GGP = 3;
|
|
/// IP header
|
|
pub const IPV4 = 4;
|
|
/// IP inside IP
|
|
pub const IPIP = 4;
|
|
/// tcp
|
|
pub const TCP = 6;
|
|
/// exterior gateway protocol
|
|
pub const EGP = 8;
|
|
/// pup
|
|
pub const PUP = 12;
|
|
/// user datagram protocol
|
|
pub const UDP = 17;
|
|
/// xns idp
|
|
pub const IDP = 22;
|
|
/// tp-4 w/ class negotiation
|
|
pub const TP = 29;
|
|
/// DCCP
|
|
pub const DCCP = 33;
|
|
/// IP6 header
|
|
pub const IPV6 = 41;
|
|
/// IP6 routing header
|
|
pub const ROUTING = 43;
|
|
/// IP6 fragmentation header
|
|
pub const FRAGMENT = 44;
|
|
/// resource reservation
|
|
pub const RSVP = 46;
|
|
/// GRE encaps RFC 1701
|
|
pub const GRE = 47;
|
|
/// encap. security payload
|
|
pub const ESP = 50;
|
|
/// authentication header
|
|
pub const AH = 51;
|
|
/// IP Mobility RFC 2004
|
|
pub const MOBILE = 55;
|
|
/// IPv6 ICMP
|
|
pub const IPV6_ICMP = 58;
|
|
/// ICMP6
|
|
pub const ICMPV6 = 58;
|
|
/// IP6 no next header
|
|
pub const NONE = 59;
|
|
/// IP6 destination option
|
|
pub const DSTOPTS = 60;
|
|
/// ISO cnlp
|
|
pub const EON = 80;
|
|
/// Ethernet-in-IP
|
|
pub const ETHERIP = 97;
|
|
/// encapsulation header
|
|
pub const ENCAP = 98;
|
|
/// Protocol indep. multicast
|
|
pub const PIM = 103;
|
|
/// IP Payload Comp. Protocol
|
|
pub const IPCOMP = 108;
|
|
/// VRRP RFC 2338
|
|
pub const VRRP = 112;
|
|
/// Common Address Resolution Protocol
|
|
pub const CARP = 112;
|
|
/// L2TPv3
|
|
pub const L2TP = 115;
|
|
/// SCTP
|
|
pub const SCTP = 132;
|
|
/// PFSYNC
|
|
pub const PFSYNC = 240;
|
|
/// raw IP packet
|
|
pub const RAW = 255;
|
|
},
|
|
.dragonfly => struct {
|
|
pub const IP = 0;
|
|
pub const ICMP = 1;
|
|
pub const TCP = 6;
|
|
pub const UDP = 17;
|
|
pub const IPV6 = 41;
|
|
pub const RAW = 255;
|
|
pub const HOPOPTS = 0;
|
|
pub const IGMP = 2;
|
|
pub const GGP = 3;
|
|
pub const IPV4 = 4;
|
|
pub const IPIP = IPV4;
|
|
pub const ST = 7;
|
|
pub const EGP = 8;
|
|
pub const PIGP = 9;
|
|
pub const RCCMON = 10;
|
|
pub const NVPII = 11;
|
|
pub const PUP = 12;
|
|
pub const ARGUS = 13;
|
|
pub const EMCON = 14;
|
|
pub const XNET = 15;
|
|
pub const CHAOS = 16;
|
|
pub const MUX = 18;
|
|
pub const MEAS = 19;
|
|
pub const HMP = 20;
|
|
pub const PRM = 21;
|
|
pub const IDP = 22;
|
|
pub const TRUNK1 = 23;
|
|
pub const TRUNK2 = 24;
|
|
pub const LEAF1 = 25;
|
|
pub const LEAF2 = 26;
|
|
pub const RDP = 27;
|
|
pub const IRTP = 28;
|
|
pub const TP = 29;
|
|
pub const BLT = 30;
|
|
pub const NSP = 31;
|
|
pub const INP = 32;
|
|
pub const SEP = 33;
|
|
pub const @"3PC" = 34;
|
|
pub const IDPR = 35;
|
|
pub const XTP = 36;
|
|
pub const DDP = 37;
|
|
pub const CMTP = 38;
|
|
pub const TPXX = 39;
|
|
pub const IL = 40;
|
|
pub const SDRP = 42;
|
|
pub const ROUTING = 43;
|
|
pub const FRAGMENT = 44;
|
|
pub const IDRP = 45;
|
|
pub const RSVP = 46;
|
|
pub const GRE = 47;
|
|
pub const MHRP = 48;
|
|
pub const BHA = 49;
|
|
pub const ESP = 50;
|
|
pub const AH = 51;
|
|
pub const INLSP = 52;
|
|
pub const SWIPE = 53;
|
|
pub const NHRP = 54;
|
|
pub const MOBILE = 55;
|
|
pub const TLSP = 56;
|
|
pub const SKIP = 57;
|
|
pub const ICMPV6 = 58;
|
|
pub const NONE = 59;
|
|
pub const DSTOPTS = 60;
|
|
pub const AHIP = 61;
|
|
pub const CFTP = 62;
|
|
pub const HELLO = 63;
|
|
pub const SATEXPAK = 64;
|
|
pub const KRYPTOLAN = 65;
|
|
pub const RVD = 66;
|
|
pub const IPPC = 67;
|
|
pub const ADFS = 68;
|
|
pub const SATMON = 69;
|
|
pub const VISA = 70;
|
|
pub const IPCV = 71;
|
|
pub const CPNX = 72;
|
|
pub const CPHB = 73;
|
|
pub const WSN = 74;
|
|
pub const PVP = 75;
|
|
pub const BRSATMON = 76;
|
|
pub const ND = 77;
|
|
pub const WBMON = 78;
|
|
pub const WBEXPAK = 79;
|
|
pub const EON = 80;
|
|
pub const VMTP = 81;
|
|
pub const SVMTP = 82;
|
|
pub const VINES = 83;
|
|
pub const TTP = 84;
|
|
pub const IGP = 85;
|
|
pub const DGP = 86;
|
|
pub const TCF = 87;
|
|
pub const IGRP = 88;
|
|
pub const OSPFIGP = 89;
|
|
pub const SRPC = 90;
|
|
pub const LARP = 91;
|
|
pub const MTP = 92;
|
|
pub const AX25 = 93;
|
|
pub const IPEIP = 94;
|
|
pub const MICP = 95;
|
|
pub const SCCSP = 96;
|
|
pub const ETHERIP = 97;
|
|
pub const ENCAP = 98;
|
|
pub const APES = 99;
|
|
pub const GMTP = 100;
|
|
pub const IPCOMP = 108;
|
|
pub const PIM = 103;
|
|
pub const CARP = 112;
|
|
pub const PGM = 113;
|
|
pub const PFSYNC = 240;
|
|
pub const DIVERT = 254;
|
|
pub const MAX = 256;
|
|
pub const DONE = 257;
|
|
pub const UNKNOWN = 258;
|
|
},
|
|
.haiku => struct {
|
|
pub const IP = 0;
|
|
pub const HOPOPTS = 0;
|
|
pub const ICMP = 1;
|
|
pub const IGMP = 2;
|
|
pub const TCP = 6;
|
|
pub const UDP = 17;
|
|
pub const IPV6 = 41;
|
|
pub const ROUTING = 43;
|
|
pub const FRAGMENT = 44;
|
|
pub const ESP = 50;
|
|
pub const AH = 51;
|
|
pub const ICMPV6 = 58;
|
|
pub const NONE = 59;
|
|
pub const DSTOPTS = 60;
|
|
pub const ETHERIP = 97;
|
|
pub const RAW = 255;
|
|
pub const MAX = 256;
|
|
},
|
|
.openbsd => struct {
|
|
/// dummy for IP
|
|
pub const IP = 0;
|
|
/// IP6 hop-by-hop options
|
|
pub const HOPOPTS = IP;
|
|
/// control message protocol
|
|
pub const ICMP = 1;
|
|
/// group mgmt protocol
|
|
pub const IGMP = 2;
|
|
/// gateway^2 (deprecated)
|
|
pub const GGP = 3;
|
|
/// IP header
|
|
pub const IPV4 = IPIP;
|
|
/// IP inside IP
|
|
pub const IPIP = 4;
|
|
/// tcp
|
|
pub const TCP = 6;
|
|
/// exterior gateway protocol
|
|
pub const EGP = 8;
|
|
/// pup
|
|
pub const PUP = 12;
|
|
/// user datagram protocol
|
|
pub const UDP = 17;
|
|
/// xns idp
|
|
pub const IDP = 22;
|
|
/// tp-4 w/ class negotiation
|
|
pub const TP = 29;
|
|
/// IP6 header
|
|
pub const IPV6 = 41;
|
|
/// IP6 routing header
|
|
pub const ROUTING = 43;
|
|
/// IP6 fragmentation header
|
|
pub const FRAGMENT = 44;
|
|
/// resource reservation
|
|
pub const RSVP = 46;
|
|
/// GRE encaps RFC 1701
|
|
pub const GRE = 47;
|
|
/// encap. security payload
|
|
pub const ESP = 50;
|
|
/// authentication header
|
|
pub const AH = 51;
|
|
/// IP Mobility RFC 2004
|
|
pub const MOBILE = 55;
|
|
/// IPv6 ICMP
|
|
pub const IPV6_ICMP = 58;
|
|
/// ICMP6
|
|
pub const ICMPV6 = 58;
|
|
/// IP6 no next header
|
|
pub const NONE = 59;
|
|
/// IP6 destination option
|
|
pub const DSTOPTS = 60;
|
|
/// ISO cnlp
|
|
pub const EON = 80;
|
|
/// Ethernet-in-IP
|
|
pub const ETHERIP = 97;
|
|
/// encapsulation header
|
|
pub const ENCAP = 98;
|
|
/// Protocol indep. multicast
|
|
pub const PIM = 103;
|
|
/// IP Payload Comp. Protocol
|
|
pub const IPCOMP = 108;
|
|
/// VRRP RFC 2338
|
|
pub const VRRP = 112;
|
|
/// Common Address Resolution Protocol
|
|
pub const CARP = 112;
|
|
/// PFSYNC
|
|
pub const PFSYNC = 240;
|
|
/// raw IP packet
|
|
pub const RAW = 255;
|
|
},
|
|
else => void,
|
|
};
|
|
pub const SOL = switch (native_os) {
|
|
.linux => linux.SOL,
|
|
.emscripten => emscripten.SOL,
|
|
.windows => ws2_32.SOL,
|
|
.openbsd, .haiku, .dragonfly, .netbsd, .freebsd, .macos, .ios, .tvos, .watchos, .visionos => struct {
|
|
pub const SOCKET = 0xffff;
|
|
},
|
|
.solaris, .illumos => struct {
|
|
pub const SOCKET = 0xffff;
|
|
pub const ROUTE = 0xfffe;
|
|
pub const PACKET = 0xfffd;
|
|
pub const FILTER = 0xfffc;
|
|
},
|
|
else => void,
|
|
};
|
|
pub const SO = switch (native_os) {
|
|
.linux => linux.SO,
|
|
.emscripten => emscripten.SO,
|
|
.windows => ws2_32.SO,
|
|
.macos, .ios, .tvos, .watchos, .visionos => struct {
|
|
pub const DEBUG = 0x0001;
|
|
pub const ACCEPTCONN = 0x0002;
|
|
pub const REUSEADDR = 0x0004;
|
|
pub const KEEPALIVE = 0x0008;
|
|
pub const DONTROUTE = 0x0010;
|
|
pub const BROADCAST = 0x0020;
|
|
pub const USELOOPBACK = 0x0040;
|
|
pub const LINGER = 0x1080;
|
|
pub const OOBINLINE = 0x0100;
|
|
pub const REUSEPORT = 0x0200;
|
|
pub const ACCEPTFILTER = 0x1000;
|
|
pub const SNDBUF = 0x1001;
|
|
pub const RCVBUF = 0x1002;
|
|
pub const SNDLOWAT = 0x1003;
|
|
pub const RCVLOWAT = 0x1004;
|
|
pub const SNDTIMEO = 0x1005;
|
|
pub const RCVTIMEO = 0x1006;
|
|
pub const ERROR = 0x1007;
|
|
pub const TYPE = 0x1008;
|
|
|
|
pub const NREAD = 0x1020;
|
|
pub const NKE = 0x1021;
|
|
pub const NOSIGPIPE = 0x1022;
|
|
pub const NOADDRERR = 0x1023;
|
|
pub const NWRITE = 0x1024;
|
|
pub const REUSESHAREUID = 0x1025;
|
|
},
|
|
.freebsd => struct {
|
|
pub const DEBUG = 0x00000001;
|
|
pub const ACCEPTCONN = 0x00000002;
|
|
pub const REUSEADDR = 0x00000004;
|
|
pub const KEEPALIVE = 0x00000008;
|
|
pub const DONTROUTE = 0x00000010;
|
|
pub const BROADCAST = 0x00000020;
|
|
pub const USELOOPBACK = 0x00000040;
|
|
pub const LINGER = 0x00000080;
|
|
pub const OOBINLINE = 0x00000100;
|
|
pub const REUSEPORT = 0x00000200;
|
|
pub const TIMESTAMP = 0x00000400;
|
|
pub const NOSIGPIPE = 0x00000800;
|
|
pub const ACCEPTFILTER = 0x00001000;
|
|
pub const BINTIME = 0x00002000;
|
|
pub const NO_OFFLOAD = 0x00004000;
|
|
pub const NO_DDP = 0x00008000;
|
|
pub const REUSEPORT_LB = 0x00010000;
|
|
|
|
pub const SNDBUF = 0x1001;
|
|
pub const RCVBUF = 0x1002;
|
|
pub const SNDLOWAT = 0x1003;
|
|
pub const RCVLOWAT = 0x1004;
|
|
pub const SNDTIMEO = 0x1005;
|
|
pub const RCVTIMEO = 0x1006;
|
|
pub const ERROR = 0x1007;
|
|
pub const TYPE = 0x1008;
|
|
pub const LABEL = 0x1009;
|
|
pub const PEERLABEL = 0x1010;
|
|
pub const LISTENQLIMIT = 0x1011;
|
|
pub const LISTENQLEN = 0x1012;
|
|
pub const LISTENINCQLEN = 0x1013;
|
|
pub const SETFIB = 0x1014;
|
|
pub const USER_COOKIE = 0x1015;
|
|
pub const PROTOCOL = 0x1016;
|
|
pub const PROTOTYPE = PROTOCOL;
|
|
pub const TS_CLOCK = 0x1017;
|
|
pub const MAX_PACING_RATE = 0x1018;
|
|
pub const DOMAIN = 0x1019;
|
|
},
|
|
.solaris, .illumos => struct {
|
|
pub const DEBUG = 0x0001;
|
|
pub const ACCEPTCONN = 0x0002;
|
|
pub const REUSEADDR = 0x0004;
|
|
pub const KEEPALIVE = 0x0008;
|
|
pub const DONTROUTE = 0x0010;
|
|
pub const BROADCAST = 0x0020;
|
|
pub const USELOOPBACK = 0x0040;
|
|
pub const LINGER = 0x0080;
|
|
pub const OOBINLINE = 0x0100;
|
|
pub const DGRAM_ERRIND = 0x0200;
|
|
pub const RECVUCRED = 0x0400;
|
|
|
|
pub const SNDBUF = 0x1001;
|
|
pub const RCVBUF = 0x1002;
|
|
pub const SNDLOWAT = 0x1003;
|
|
pub const RCVLOWAT = 0x1004;
|
|
pub const SNDTIMEO = 0x1005;
|
|
pub const RCVTIMEO = 0x1006;
|
|
pub const ERROR = 0x1007;
|
|
pub const TYPE = 0x1008;
|
|
pub const PROTOTYPE = 0x1009;
|
|
pub const ANON_MLP = 0x100a;
|
|
pub const MAC_EXEMPT = 0x100b;
|
|
pub const DOMAIN = 0x100c;
|
|
pub const RCVPSH = 0x100d;
|
|
|
|
pub const SECATTR = 0x1011;
|
|
pub const TIMESTAMP = 0x1013;
|
|
pub const ALLZONES = 0x1014;
|
|
pub const EXCLBIND = 0x1015;
|
|
pub const MAC_IMPLICIT = 0x1016;
|
|
pub const VRRP = 0x1017;
|
|
},
|
|
.netbsd => struct {
|
|
pub const DEBUG = 0x0001;
|
|
pub const ACCEPTCONN = 0x0002;
|
|
pub const REUSEADDR = 0x0004;
|
|
pub const KEEPALIVE = 0x0008;
|
|
pub const DONTROUTE = 0x0010;
|
|
pub const BROADCAST = 0x0020;
|
|
pub const USELOOPBACK = 0x0040;
|
|
pub const LINGER = 0x0080;
|
|
pub const OOBINLINE = 0x0100;
|
|
pub const REUSEPORT = 0x0200;
|
|
pub const NOSIGPIPE = 0x0800;
|
|
pub const ACCEPTFILTER = 0x1000;
|
|
pub const TIMESTAMP = 0x2000;
|
|
pub const RERROR = 0x4000;
|
|
|
|
pub const SNDBUF = 0x1001;
|
|
pub const RCVBUF = 0x1002;
|
|
pub const SNDLOWAT = 0x1003;
|
|
pub const RCVLOWAT = 0x1004;
|
|
pub const ERROR = 0x1007;
|
|
pub const TYPE = 0x1008;
|
|
pub const OVERFLOWED = 0x1009;
|
|
|
|
pub const NOHEADER = 0x100a;
|
|
pub const SNDTIMEO = 0x100b;
|
|
pub const RCVTIMEO = 0x100c;
|
|
},
|
|
.dragonfly => struct {
|
|
pub const DEBUG = 0x0001;
|
|
pub const ACCEPTCONN = 0x0002;
|
|
pub const REUSEADDR = 0x0004;
|
|
pub const KEEPALIVE = 0x0008;
|
|
pub const DONTROUTE = 0x0010;
|
|
pub const BROADCAST = 0x0020;
|
|
pub const USELOOPBACK = 0x0040;
|
|
pub const LINGER = 0x0080;
|
|
pub const OOBINLINE = 0x0100;
|
|
pub const REUSEPORT = 0x0200;
|
|
pub const TIMESTAMP = 0x0400;
|
|
pub const NOSIGPIPE = 0x0800;
|
|
pub const ACCEPTFILTER = 0x1000;
|
|
pub const RERROR = 0x2000;
|
|
pub const PASSCRED = 0x4000;
|
|
|
|
pub const SNDBUF = 0x1001;
|
|
pub const RCVBUF = 0x1002;
|
|
pub const SNDLOWAT = 0x1003;
|
|
pub const RCVLOWAT = 0x1004;
|
|
pub const SNDTIMEO = 0x1005;
|
|
pub const RCVTIMEO = 0x1006;
|
|
pub const ERROR = 0x1007;
|
|
pub const TYPE = 0x1008;
|
|
pub const SNDSPACE = 0x100a;
|
|
pub const CPUHINT = 0x1030;
|
|
},
|
|
.haiku => struct {
|
|
pub const ACCEPTCONN = 0x00000001;
|
|
pub const BROADCAST = 0x00000002;
|
|
pub const DEBUG = 0x00000004;
|
|
pub const DONTROUTE = 0x00000008;
|
|
pub const KEEPALIVE = 0x00000010;
|
|
pub const OOBINLINE = 0x00000020;
|
|
pub const REUSEADDR = 0x00000040;
|
|
pub const REUSEPORT = 0x00000080;
|
|
pub const USELOOPBACK = 0x00000100;
|
|
pub const LINGER = 0x00000200;
|
|
|
|
pub const SNDBUF = 0x40000001;
|
|
pub const SNDLOWAT = 0x40000002;
|
|
pub const SNDTIMEO = 0x40000003;
|
|
pub const RCVBUF = 0x40000004;
|
|
pub const RCVLOWAT = 0x40000005;
|
|
pub const RCVTIMEO = 0x40000006;
|
|
pub const ERROR = 0x40000007;
|
|
pub const TYPE = 0x40000008;
|
|
pub const NONBLOCK = 0x40000009;
|
|
pub const BINDTODEVICE = 0x4000000a;
|
|
pub const PEERCRED = 0x4000000b;
|
|
},
|
|
.openbsd => struct {
|
|
pub const DEBUG = 0x0001;
|
|
pub const ACCEPTCONN = 0x0002;
|
|
pub const REUSEADDR = 0x0004;
|
|
pub const KEEPALIVE = 0x0008;
|
|
pub const DONTROUTE = 0x0010;
|
|
pub const BROADCAST = 0x0020;
|
|
pub const USELOOPBACK = 0x0040;
|
|
pub const LINGER = 0x0080;
|
|
pub const OOBINLINE = 0x0100;
|
|
pub const REUSEPORT = 0x0200;
|
|
pub const TIMESTAMP = 0x0800;
|
|
pub const BINDANY = 0x1000;
|
|
pub const ZEROIZE = 0x2000;
|
|
pub const SNDBUF = 0x1001;
|
|
pub const RCVBUF = 0x1002;
|
|
pub const SNDLOWAT = 0x1003;
|
|
pub const RCVLOWAT = 0x1004;
|
|
pub const SNDTIMEO = 0x1005;
|
|
pub const RCVTIMEO = 0x1006;
|
|
pub const ERROR = 0x1007;
|
|
pub const TYPE = 0x1008;
|
|
pub const NETPROC = 0x1020;
|
|
pub const RTABLE = 0x1021;
|
|
pub const PEERCRED = 0x1022;
|
|
pub const SPLICE = 0x1023;
|
|
pub const DOMAIN = 0x1024;
|
|
pub const PROTOCOL = 0x1025;
|
|
},
|
|
else => void,
|
|
};
|
|
pub const SOMAXCONN = switch (native_os) {
|
|
.linux => linux.SOMAXCONN,
|
|
.windows => ws2_32.SOMAXCONN,
|
|
.solaris, .illumos => 128,
|
|
.openbsd => 28,
|
|
else => void,
|
|
};
|
|
pub const IFNAMESIZE = switch (native_os) {
|
|
.linux => linux.IFNAMESIZE,
|
|
.emscripten => emscripten.IFNAMESIZE,
|
|
.windows => 30,
|
|
.openbsd, .dragonfly, .netbsd, .freebsd, .macos, .ios, .tvos, .watchos, .visionos => 16,
|
|
.solaris, .illumos => 32,
|
|
else => void,
|
|
};
|
|
|
|
pub const stack_t = switch (native_os) {
|
|
.linux => linux.stack_t,
|
|
.emscripten => emscripten.stack_t,
|
|
.freebsd => extern struct {
|
|
/// Signal stack base.
|
|
sp: *anyopaque,
|
|
/// Signal stack length.
|
|
size: usize,
|
|
/// SS_DISABLE and/or SS_ONSTACK.
|
|
flags: i32,
|
|
},
|
|
else => extern struct {
|
|
sp: [*]u8,
|
|
size: isize,
|
|
flags: i32,
|
|
},
|
|
};
|
|
pub const time_t = switch (native_os) {
|
|
.linux => linux.time_t,
|
|
.emscripten => emscripten.time_t,
|
|
.haiku, .dragonfly => isize,
|
|
else => i64,
|
|
};
|
|
pub const suseconds_t = switch (native_os) {
|
|
.solaris, .illumos => i64,
|
|
.freebsd, .dragonfly => c_long,
|
|
.netbsd => c_int,
|
|
.haiku => i32,
|
|
else => void,
|
|
};
|
|
|
|
pub const timeval = switch (native_os) {
|
|
.linux => linux.timeval,
|
|
.emscripten => emscripten.timeval,
|
|
.windows => extern struct {
|
|
sec: c_long,
|
|
usec: c_long,
|
|
},
|
|
.macos, .ios, .tvos, .watchos, .visionos => extern struct {
|
|
sec: c_long,
|
|
usec: i32,
|
|
},
|
|
.dragonfly, .netbsd, .freebsd, .solaris, .illumos => extern struct {
|
|
/// seconds
|
|
sec: time_t,
|
|
/// microseconds
|
|
usec: suseconds_t,
|
|
},
|
|
.openbsd => extern struct {
|
|
sec: time_t,
|
|
usec: c_long,
|
|
},
|
|
else => void,
|
|
};
|
|
pub const timezone = switch (native_os) {
|
|
.linux => linux.timezone,
|
|
.emscripten => emscripten.timezone,
|
|
.openbsd, .macos, .ios, .tvos, .watchos, .visionos => extern struct {
|
|
minuteswest: i32,
|
|
dsttime: i32,
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
pub const ucontext_t = switch (native_os) {
|
|
.linux => linux.ucontext_t,
|
|
.emscripten => emscripten.ucontext_t,
|
|
.macos, .ios, .tvos, .watchos, .visionos => extern struct {
|
|
onstack: c_int,
|
|
sigmask: sigset_t,
|
|
stack: stack_t,
|
|
link: ?*ucontext_t,
|
|
mcsize: u64,
|
|
mcontext: *mcontext_t,
|
|
__mcontext_data: mcontext_t,
|
|
},
|
|
.freebsd => extern struct {
|
|
sigmask: sigset_t,
|
|
mcontext: mcontext_t,
|
|
link: ?*ucontext_t,
|
|
stack: stack_t,
|
|
flags: c_int,
|
|
__spare__: [4]c_int,
|
|
},
|
|
.solaris, .illumos => extern struct {
|
|
flags: u64,
|
|
link: ?*ucontext_t,
|
|
sigmask: sigset_t,
|
|
stack: stack_t,
|
|
mcontext: mcontext_t,
|
|
brand_data: [3]?*anyopaque,
|
|
filler: [2]i64,
|
|
},
|
|
.netbsd => extern struct {
|
|
flags: u32,
|
|
link: ?*ucontext_t,
|
|
sigmask: sigset_t,
|
|
stack: stack_t,
|
|
mcontext: mcontext_t,
|
|
__pad: [
|
|
switch (builtin.cpu.arch) {
|
|
.x86 => 4,
|
|
.mips, .mipsel, .mips64, .mips64el => 14,
|
|
.arm, .armeb, .thumb, .thumbeb => 1,
|
|
.sparc, .sparcel, .sparc64 => if (@sizeOf(usize) == 4) 43 else 8,
|
|
else => 0,
|
|
}
|
|
]u32,
|
|
},
|
|
.dragonfly => extern struct {
|
|
sigmask: sigset_t,
|
|
mcontext: mcontext_t,
|
|
link: ?*ucontext_t,
|
|
stack: stack_t,
|
|
cofunc: ?*fn (?*ucontext_t, ?*anyopaque) void,
|
|
arg: ?*void,
|
|
_spare: [4]c_int,
|
|
},
|
|
.haiku => extern struct {
|
|
link: ?*ucontext_t,
|
|
sigmask: sigset_t,
|
|
stack: stack_t,
|
|
mcontext: mcontext_t,
|
|
},
|
|
.openbsd => openbsd.ucontext_t,
|
|
else => void,
|
|
};
|
|
pub const mcontext_t = switch (native_os) {
|
|
.linux => linux.mcontext_t,
|
|
.emscripten => emscripten.mcontext_t,
|
|
.macos, .ios, .tvos, .watchos, .visionos => darwin.mcontext_t,
|
|
.freebsd => switch (builtin.cpu.arch) {
|
|
.x86_64 => extern struct {
|
|
onstack: u64,
|
|
rdi: u64,
|
|
rsi: u64,
|
|
rdx: u64,
|
|
rcx: u64,
|
|
r8: u64,
|
|
r9: u64,
|
|
rax: u64,
|
|
rbx: u64,
|
|
rbp: u64,
|
|
r10: u64,
|
|
r11: u64,
|
|
r12: u64,
|
|
r13: u64,
|
|
r14: u64,
|
|
r15: u64,
|
|
trapno: u32,
|
|
fs: u16,
|
|
gs: u16,
|
|
addr: u64,
|
|
flags: u32,
|
|
es: u16,
|
|
ds: u16,
|
|
err: u64,
|
|
rip: u64,
|
|
cs: u64,
|
|
rflags: u64,
|
|
rsp: u64,
|
|
ss: u64,
|
|
len: u64,
|
|
fpformat: u64,
|
|
ownedfp: u64,
|
|
fpstate: [64]u64 align(16),
|
|
fsbase: u64,
|
|
gsbase: u64,
|
|
xfpustate: u64,
|
|
xfpustate_len: u64,
|
|
spare: [4]u64,
|
|
},
|
|
.aarch64 => extern struct {
|
|
gpregs: extern struct {
|
|
x: [30]u64,
|
|
lr: u64,
|
|
sp: u64,
|
|
elr: u64,
|
|
spsr: u32,
|
|
_pad: u32,
|
|
},
|
|
fpregs: extern struct {
|
|
q: [32]u128,
|
|
sr: u32,
|
|
cr: u32,
|
|
flags: u32,
|
|
_pad: u32,
|
|
},
|
|
flags: u32,
|
|
_pad: u32,
|
|
_spare: [8]u64,
|
|
},
|
|
else => struct {},
|
|
},
|
|
.solaris, .illumos => extern struct {
|
|
gregs: [28]u64,
|
|
fpregs: solaris.fpregset_t,
|
|
},
|
|
.netbsd => switch (builtin.cpu.arch) {
|
|
.aarch64 => extern struct {
|
|
gregs: [35]u64,
|
|
fregs: [528]u8 align(16),
|
|
spare: [8]u64,
|
|
},
|
|
.x86_64 => extern struct {
|
|
gregs: [26]u64,
|
|
mc_tlsbase: u64,
|
|
fpregs: [512]u8 align(8),
|
|
},
|
|
else => struct {},
|
|
},
|
|
.dragonfly => dragonfly.mcontext_t,
|
|
.haiku => haiku.mcontext_t,
|
|
else => void,
|
|
};
|
|
|
|
pub const user_desc = switch (native_os) {
|
|
.linux => linux.user_desc,
|
|
else => void,
|
|
};
|
|
pub const utsname = switch (native_os) {
|
|
.linux => linux.utsname,
|
|
.emscripten => emscripten.utsname,
|
|
.solaris, .illumos => extern struct {
|
|
sysname: [256:0]u8,
|
|
nodename: [256:0]u8,
|
|
release: [256:0]u8,
|
|
version: [256:0]u8,
|
|
machine: [256:0]u8,
|
|
domainname: [256:0]u8,
|
|
},
|
|
else => void,
|
|
};
|
|
pub const PR = switch (native_os) {
|
|
.linux => linux.PR,
|
|
else => void,
|
|
};
|
|
pub const _errno = switch (native_os) {
|
|
.linux => switch (native_abi) {
|
|
.android => private.__errno,
|
|
else => private.__errno_location,
|
|
},
|
|
.emscripten => private.__errno_location,
|
|
.wasi, .dragonfly => private.errnoFromThreadLocal,
|
|
.windows => private._errno,
|
|
.macos, .ios, .tvos, .watchos, .visionos, .freebsd => private.__error,
|
|
.solaris, .illumos => private.___errno,
|
|
.openbsd, .netbsd => private.__errno,
|
|
.haiku => haiku._errnop,
|
|
else => {},
|
|
};
|
|
|
|
pub const RTLD = switch (native_os) {
|
|
.linux, .emscripten => packed struct(u32) {
|
|
LAZY: bool = false,
|
|
NOW: bool = false,
|
|
NOLOAD: bool = false,
|
|
_3: u5 = 0,
|
|
GLOBAL: bool = false,
|
|
_9: u3 = 0,
|
|
NODELETE: bool = false,
|
|
_: u19 = 0,
|
|
},
|
|
.dragonfly, .freebsd => packed struct(u32) {
|
|
LAZY: bool = false,
|
|
NOW: bool = false,
|
|
_2: u6 = 0,
|
|
GLOBAL: bool = false,
|
|
TRACE: bool = false,
|
|
_10: u2 = 0,
|
|
NODELETE: bool = false,
|
|
NOLOAD: bool = false,
|
|
_: u18 = 0,
|
|
},
|
|
.haiku => packed struct(u32) {
|
|
NOW: bool = false,
|
|
GLOBAL: bool = false,
|
|
_: u30 = 0,
|
|
},
|
|
.netbsd => packed struct(u32) {
|
|
LAZY: bool = false,
|
|
NOW: bool = false,
|
|
_2: u6 = 0,
|
|
GLOBAL: bool = false,
|
|
LOCAL: bool = false,
|
|
_10: u2 = 0,
|
|
NODELETE: bool = false,
|
|
NOLOAD: bool = false,
|
|
_: u18 = 0,
|
|
},
|
|
.solaris, .illumos => packed struct(u32) {
|
|
LAZY: bool = false,
|
|
NOW: bool = false,
|
|
NOLOAD: bool = false,
|
|
_3: u5 = 0,
|
|
GLOBAL: bool = false,
|
|
PARENT: bool = false,
|
|
GROUP: bool = false,
|
|
WORLD: bool = false,
|
|
NODELETE: bool = false,
|
|
FIRST: bool = false,
|
|
_14: u2 = 0,
|
|
CONFGEN: bool = false,
|
|
_: u15 = 0,
|
|
},
|
|
.openbsd => packed struct(u32) {
|
|
LAZY: bool = false,
|
|
NOW: bool = false,
|
|
_2: u6 = 0,
|
|
GLOBAL: bool = false,
|
|
TRACE: bool = false,
|
|
_: u22 = 0,
|
|
},
|
|
.macos, .ios, .tvos, .watchos, .visionos => packed struct(u32) {
|
|
LAZY: bool = false,
|
|
NOW: bool = false,
|
|
LOCAL: bool = false,
|
|
GLOBAL: bool = false,
|
|
NOLOAD: bool = false,
|
|
_5: u2 = 0,
|
|
NODELETE: bool = false,
|
|
FIRST: bool = false,
|
|
_: u23 = 0,
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
pub const dirent = switch (native_os) {
|
|
.linux, .emscripten => extern struct {
|
|
ino: c_uint,
|
|
off: c_uint,
|
|
reclen: c_ushort,
|
|
type: u8,
|
|
name: [256]u8,
|
|
},
|
|
.macos, .ios, .tvos, .watchos, .visionos => extern struct {
|
|
ino: u64,
|
|
seekoff: u64,
|
|
reclen: u16,
|
|
namlen: u16,
|
|
type: u8,
|
|
name: [1024]u8,
|
|
},
|
|
.freebsd => extern struct {
|
|
/// File number of entry.
|
|
fileno: ino_t,
|
|
/// Directory offset of entry.
|
|
off: off_t,
|
|
/// Length of this record.
|
|
reclen: u16,
|
|
/// File type, one of DT_.
|
|
type: u8,
|
|
pad0: u8 = 0,
|
|
/// Length of the name member.
|
|
namlen: u16,
|
|
pad1: u16 = 0,
|
|
/// Name of entry.
|
|
name: [255:0]u8,
|
|
},
|
|
.solaris, .illumos => extern struct {
|
|
/// Inode number of entry.
|
|
ino: ino_t,
|
|
/// Offset of this entry on disk.
|
|
off: off_t,
|
|
/// Length of this record.
|
|
reclen: u16,
|
|
/// File name.
|
|
name: [MAXNAMLEN:0]u8,
|
|
},
|
|
.netbsd => extern struct {
|
|
fileno: ino_t,
|
|
reclen: u16,
|
|
namlen: u16,
|
|
type: u8,
|
|
name: [MAXNAMLEN:0]u8,
|
|
},
|
|
.dragonfly => extern struct {
|
|
fileno: c_ulong,
|
|
namlen: u16,
|
|
type: u8,
|
|
unused1: u8,
|
|
unused2: u32,
|
|
name: [256]u8,
|
|
|
|
pub fn reclen(self: dirent) u16 {
|
|
return (@offsetOf(dirent, "name") + self.namlen + 1 + 7) & ~@as(u16, 7);
|
|
}
|
|
},
|
|
.openbsd => extern struct {
|
|
fileno: ino_t,
|
|
off: off_t,
|
|
reclen: u16,
|
|
type: u8,
|
|
namlen: u8,
|
|
_: u32 align(1) = 0,
|
|
name: [MAXNAMLEN:0]u8,
|
|
},
|
|
else => void,
|
|
};
|
|
pub const MAXNAMLEN = switch (native_os) {
|
|
.netbsd, .solaris, .illumos => 511,
|
|
.haiku => NAME_MAX,
|
|
.openbsd => 255,
|
|
else => {},
|
|
};
|
|
pub const dirent64 = switch (native_os) {
|
|
.linux => extern struct {
|
|
ino: c_ulong,
|
|
off: c_ulong,
|
|
reclen: c_ushort,
|
|
type: u8,
|
|
name: [256]u8,
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
pub const AI = switch (native_os) {
|
|
.linux, .emscripten => linux.AI,
|
|
.dragonfly, .haiku, .freebsd => packed struct(u32) {
|
|
PASSIVE: bool = false,
|
|
CANONNAME: bool = false,
|
|
NUMERICHOST: bool = false,
|
|
NUMERICSERV: bool = false,
|
|
_4: u4 = 0,
|
|
ALL: bool = false,
|
|
V4MAPPED_CFG: bool = false,
|
|
ADDRCONFIG: bool = false,
|
|
V4MAPPED: bool = false,
|
|
_: u20 = 0,
|
|
},
|
|
.netbsd => packed struct(u32) {
|
|
PASSIVE: bool = false,
|
|
CANONNAME: bool = false,
|
|
NUMERICHOST: bool = false,
|
|
NUMERICSERV: bool = false,
|
|
_4: u6 = 0,
|
|
ADDRCONFIG: bool = false,
|
|
_: u21 = 0,
|
|
},
|
|
.solaris, .illumos => packed struct(u32) {
|
|
V4MAPPED: bool = false,
|
|
ALL: bool = false,
|
|
ADDRCONFIG: bool = false,
|
|
PASSIVE: bool = false,
|
|
CANONNAME: bool = false,
|
|
NUMERICHOST: bool = false,
|
|
NUMERICSERV: bool = false,
|
|
_: u25 = 0,
|
|
},
|
|
.openbsd => packed struct(u32) {
|
|
PASSIVE: bool = false,
|
|
CANONNAME: bool = false,
|
|
NUMERICHOST: bool = false,
|
|
_3: u1 = 0,
|
|
NUMERICSERV: bool = false,
|
|
_5: u1 = 0,
|
|
ADDRCONFIG: bool = false,
|
|
_: u25 = 0,
|
|
},
|
|
.macos, .ios, .tvos, .watchos, .visionos => packed struct(u32) {
|
|
PASSIVE: bool = false,
|
|
CANONNAME: bool = false,
|
|
NUMERICHOST: bool = false,
|
|
_3: u9 = 0,
|
|
NUMERICSERV: bool = false,
|
|
_: u19 = 0,
|
|
},
|
|
.windows => ws2_32.AI,
|
|
else => void,
|
|
};
|
|
|
|
pub const NI = switch (native_os) {
|
|
.linux, .emscripten => packed struct(u32) {
|
|
NUMERICHOST: bool = false,
|
|
NUMERICSERV: bool = false,
|
|
NOFQDN: bool = false,
|
|
NAMEREQD: bool = false,
|
|
DGRAM: bool = false,
|
|
_5: u3 = 0,
|
|
NUMERICSCOPE: bool = false,
|
|
_: u23 = 0,
|
|
},
|
|
.solaris, .illumos => packed struct(u32) {
|
|
NOFQDN: bool = false,
|
|
NUMERICHOST: bool = false,
|
|
NAMEREQD: bool = false,
|
|
NUMERICSERV: bool = false,
|
|
DGRAM: bool = false,
|
|
WITHSCOPEID: bool = false,
|
|
NUMERICSCOPE: bool = false,
|
|
_: u25 = 0,
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
pub const EAI = switch (native_os) {
|
|
.linux, .emscripten => enum(c_int) {
|
|
BADFLAGS = -1,
|
|
NONAME = -2,
|
|
AGAIN = -3,
|
|
FAIL = -4,
|
|
FAMILY = -6,
|
|
SOCKTYPE = -7,
|
|
SERVICE = -8,
|
|
MEMORY = -10,
|
|
SYSTEM = -11,
|
|
OVERFLOW = -12,
|
|
|
|
NODATA = -5,
|
|
ADDRFAMILY = -9,
|
|
INPROGRESS = -100,
|
|
CANCELED = -101,
|
|
NOTCANCELED = -102,
|
|
ALLDONE = -103,
|
|
INTR = -104,
|
|
IDN_ENCODE = -105,
|
|
|
|
_,
|
|
},
|
|
.haiku, .dragonfly, .netbsd, .freebsd, .macos, .ios, .tvos, .watchos, .visionos => enum(c_int) {
|
|
/// address family for hostname not supported
|
|
ADDRFAMILY = 1,
|
|
/// temporary failure in name resolution
|
|
AGAIN = 2,
|
|
/// invalid value for ai_flags
|
|
BADFLAGS = 3,
|
|
/// non-recoverable failure in name resolution
|
|
FAIL = 4,
|
|
/// ai_family not supported
|
|
FAMILY = 5,
|
|
/// memory allocation failure
|
|
MEMORY = 6,
|
|
/// no address associated with hostname
|
|
NODATA = 7,
|
|
/// hostname nor servname provided, or not known
|
|
NONAME = 8,
|
|
/// servname not supported for ai_socktype
|
|
SERVICE = 9,
|
|
/// ai_socktype not supported
|
|
SOCKTYPE = 10,
|
|
/// system error returned in errno
|
|
SYSTEM = 11,
|
|
/// invalid value for hints
|
|
BADHINTS = 12,
|
|
/// resolved protocol is unknown
|
|
PROTOCOL = 13,
|
|
/// argument buffer overflow
|
|
OVERFLOW = 14,
|
|
_,
|
|
},
|
|
.solaris, .illumos => enum(c_int) {
|
|
/// address family for hostname not supported
|
|
ADDRFAMILY = 1,
|
|
/// name could not be resolved at this time
|
|
AGAIN = 2,
|
|
/// flags parameter had an invalid value
|
|
BADFLAGS = 3,
|
|
/// non-recoverable failure in name resolution
|
|
FAIL = 4,
|
|
/// address family not recognized
|
|
FAMILY = 5,
|
|
/// memory allocation failure
|
|
MEMORY = 6,
|
|
/// no address associated with hostname
|
|
NODATA = 7,
|
|
/// name does not resolve
|
|
NONAME = 8,
|
|
/// service not recognized for socket type
|
|
SERVICE = 9,
|
|
/// intended socket type was not recognized
|
|
SOCKTYPE = 10,
|
|
/// system error returned in errno
|
|
SYSTEM = 11,
|
|
/// argument buffer overflow
|
|
OVERFLOW = 12,
|
|
/// resolved protocol is unknown
|
|
PROTOCOL = 13,
|
|
|
|
_,
|
|
},
|
|
.openbsd => enum(c_int) {
|
|
/// address family for hostname not supported
|
|
ADDRFAMILY = -9,
|
|
/// name could not be resolved at this time
|
|
AGAIN = -3,
|
|
/// flags parameter had an invalid value
|
|
BADFLAGS = -1,
|
|
/// non-recoverable failure in name resolution
|
|
FAIL = -4,
|
|
/// address family not recognized
|
|
FAMILY = -6,
|
|
/// memory allocation failure
|
|
MEMORY = -10,
|
|
/// no address associated with hostname
|
|
NODATA = -5,
|
|
/// name does not resolve
|
|
NONAME = -2,
|
|
/// service not recognized for socket type
|
|
SERVICE = -8,
|
|
/// intended socket type was not recognized
|
|
SOCKTYPE = -7,
|
|
/// system error returned in errno
|
|
SYSTEM = -11,
|
|
/// invalid value for hints
|
|
BADHINTS = -12,
|
|
/// resolved protocol is unknown
|
|
PROTOCOL = -13,
|
|
/// argument buffer overflow
|
|
OVERFLOW = -14,
|
|
_,
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
pub const dl_iterate_phdr_callback = *const fn (info: *dl_phdr_info, size: usize, data: ?*anyopaque) callconv(.C) c_int;
|
|
|
|
pub const Stat = switch (native_os) {
|
|
.linux => switch (native_arch) {
|
|
.sparc64 => extern struct {
|
|
dev: u64,
|
|
__pad1: u16,
|
|
ino: ino_t,
|
|
mode: u32,
|
|
nlink: u32,
|
|
|
|
uid: u32,
|
|
gid: u32,
|
|
rdev: u64,
|
|
__pad2: u16,
|
|
|
|
size: off_t,
|
|
blksize: isize,
|
|
blocks: i64,
|
|
|
|
atim: timespec,
|
|
mtim: timespec,
|
|
ctim: timespec,
|
|
__reserved: [2]usize,
|
|
|
|
pub fn atime(self: @This()) timespec {
|
|
return self.atim;
|
|
}
|
|
|
|
pub fn mtime(self: @This()) timespec {
|
|
return self.mtim;
|
|
}
|
|
|
|
pub fn ctime(self: @This()) timespec {
|
|
return self.ctim;
|
|
}
|
|
},
|
|
.mips, .mipsel => extern struct {
|
|
dev: dev_t,
|
|
__pad0: [2]u32,
|
|
ino: ino_t,
|
|
mode: mode_t,
|
|
nlink: nlink_t,
|
|
uid: uid_t,
|
|
gid: gid_t,
|
|
rdev: dev_t,
|
|
__pad1: [2]u32,
|
|
size: off_t,
|
|
atim: timespec,
|
|
mtim: timespec,
|
|
ctim: timespec,
|
|
blksize: blksize_t,
|
|
__pad3: u32,
|
|
blocks: blkcnt_t,
|
|
__pad4: [14]u32,
|
|
|
|
pub fn atime(self: @This()) timespec {
|
|
return self.atim;
|
|
}
|
|
|
|
pub fn mtime(self: @This()) timespec {
|
|
return self.mtim;
|
|
}
|
|
|
|
pub fn ctime(self: @This()) timespec {
|
|
return self.ctim;
|
|
}
|
|
},
|
|
|
|
else => std.os.linux.Stat, // libc stat is the same as kernel stat.
|
|
},
|
|
.emscripten => emscripten.Stat,
|
|
.wasi => extern struct {
|
|
dev: dev_t,
|
|
ino: ino_t,
|
|
nlink: nlink_t,
|
|
mode: mode_t,
|
|
uid: uid_t,
|
|
gid: gid_t,
|
|
__pad0: c_uint = 0,
|
|
rdev: dev_t,
|
|
size: off_t,
|
|
blksize: blksize_t,
|
|
blocks: blkcnt_t,
|
|
atim: timespec,
|
|
mtim: timespec,
|
|
ctim: timespec,
|
|
__reserved: [3]c_longlong = [3]c_longlong{ 0, 0, 0 },
|
|
|
|
pub fn atime(self: @This()) timespec {
|
|
return self.atim;
|
|
}
|
|
|
|
pub fn mtime(self: @This()) timespec {
|
|
return self.mtim;
|
|
}
|
|
|
|
pub fn ctime(self: @This()) timespec {
|
|
return self.ctim;
|
|
}
|
|
|
|
pub fn fromFilestat(st: wasi.filestat_t) Stat {
|
|
return .{
|
|
.dev = st.dev,
|
|
.ino = st.ino,
|
|
.mode = switch (st.filetype) {
|
|
.UNKNOWN => 0,
|
|
.BLOCK_DEVICE => S.IFBLK,
|
|
.CHARACTER_DEVICE => S.IFCHR,
|
|
.DIRECTORY => S.IFDIR,
|
|
.REGULAR_FILE => S.IFREG,
|
|
.SOCKET_DGRAM => S.IFSOCK,
|
|
.SOCKET_STREAM => S.IFIFO,
|
|
.SYMBOLIC_LINK => S.IFLNK,
|
|
_ => 0,
|
|
},
|
|
.nlink = st.nlink,
|
|
.size = @intCast(st.size),
|
|
.atim = timespec.fromTimestamp(st.atim),
|
|
.mtim = timespec.fromTimestamp(st.mtim),
|
|
.ctim = timespec.fromTimestamp(st.ctim),
|
|
|
|
.uid = 0,
|
|
.gid = 0,
|
|
.rdev = 0,
|
|
.blksize = 0,
|
|
.blocks = 0,
|
|
};
|
|
}
|
|
},
|
|
.macos, .ios, .tvos, .watchos, .visionos => extern struct {
|
|
dev: i32,
|
|
mode: u16,
|
|
nlink: u16,
|
|
ino: ino_t,
|
|
uid: uid_t,
|
|
gid: gid_t,
|
|
rdev: i32,
|
|
atimespec: timespec,
|
|
mtimespec: timespec,
|
|
ctimespec: timespec,
|
|
birthtimespec: timespec,
|
|
size: off_t,
|
|
blocks: i64,
|
|
blksize: i32,
|
|
flags: u32,
|
|
gen: u32,
|
|
lspare: i32,
|
|
qspare: [2]i64,
|
|
|
|
pub fn atime(self: @This()) timespec {
|
|
return self.atimespec;
|
|
}
|
|
|
|
pub fn mtime(self: @This()) timespec {
|
|
return self.mtimespec;
|
|
}
|
|
|
|
pub fn ctime(self: @This()) timespec {
|
|
return self.ctimespec;
|
|
}
|
|
|
|
pub fn birthtime(self: @This()) timespec {
|
|
return self.birthtimespec;
|
|
}
|
|
},
|
|
.freebsd => freebsd.Stat,
|
|
.solaris, .illumos => extern struct {
|
|
dev: dev_t,
|
|
ino: ino_t,
|
|
mode: mode_t,
|
|
nlink: nlink_t,
|
|
uid: uid_t,
|
|
gid: gid_t,
|
|
rdev: dev_t,
|
|
size: off_t,
|
|
atim: timespec,
|
|
mtim: timespec,
|
|
ctim: timespec,
|
|
blksize: blksize_t,
|
|
blocks: blkcnt_t,
|
|
fstype: [16]u8,
|
|
|
|
pub fn atime(self: @This()) timespec {
|
|
return self.atim;
|
|
}
|
|
|
|
pub fn mtime(self: @This()) timespec {
|
|
return self.mtim;
|
|
}
|
|
|
|
pub fn ctime(self: @This()) timespec {
|
|
return self.ctim;
|
|
}
|
|
},
|
|
.netbsd => extern struct {
|
|
dev: dev_t,
|
|
mode: mode_t,
|
|
ino: ino_t,
|
|
nlink: nlink_t,
|
|
uid: uid_t,
|
|
gid: gid_t,
|
|
rdev: dev_t,
|
|
atim: timespec,
|
|
mtim: timespec,
|
|
ctim: timespec,
|
|
birthtim: timespec,
|
|
size: off_t,
|
|
blocks: blkcnt_t,
|
|
blksize: blksize_t,
|
|
flags: u32,
|
|
gen: u32,
|
|
__spare: [2]u32,
|
|
|
|
pub fn atime(self: @This()) timespec {
|
|
return self.atim;
|
|
}
|
|
|
|
pub fn mtime(self: @This()) timespec {
|
|
return self.mtim;
|
|
}
|
|
|
|
pub fn ctime(self: @This()) timespec {
|
|
return self.ctim;
|
|
}
|
|
|
|
pub fn birthtime(self: @This()) timespec {
|
|
return self.birthtim;
|
|
}
|
|
},
|
|
.dragonfly => extern struct {
|
|
ino: ino_t,
|
|
nlink: c_uint,
|
|
dev: c_uint,
|
|
mode: c_ushort,
|
|
padding1: u16,
|
|
uid: uid_t,
|
|
gid: gid_t,
|
|
rdev: c_uint,
|
|
atim: timespec,
|
|
mtim: timespec,
|
|
ctim: timespec,
|
|
size: c_ulong,
|
|
blocks: i64,
|
|
blksize: u32,
|
|
flags: u32,
|
|
gen: u32,
|
|
lspare: i32,
|
|
qspare1: i64,
|
|
qspare2: i64,
|
|
pub fn atime(self: @This()) timespec {
|
|
return self.atim;
|
|
}
|
|
|
|
pub fn mtime(self: @This()) timespec {
|
|
return self.mtim;
|
|
}
|
|
|
|
pub fn ctime(self: @This()) timespec {
|
|
return self.ctim;
|
|
}
|
|
},
|
|
.haiku => extern struct {
|
|
dev: dev_t,
|
|
ino: ino_t,
|
|
mode: mode_t,
|
|
nlink: nlink_t,
|
|
uid: uid_t,
|
|
gid: gid_t,
|
|
size: off_t,
|
|
rdev: dev_t,
|
|
blksize: blksize_t,
|
|
atim: timespec,
|
|
mtim: timespec,
|
|
ctim: timespec,
|
|
crtim: timespec,
|
|
type: u32,
|
|
blocks: blkcnt_t,
|
|
|
|
pub fn atime(self: @This()) timespec {
|
|
return self.atim;
|
|
}
|
|
pub fn mtime(self: @This()) timespec {
|
|
return self.mtim;
|
|
}
|
|
pub fn ctime(self: @This()) timespec {
|
|
return self.ctim;
|
|
}
|
|
pub fn birthtime(self: @This()) timespec {
|
|
return self.crtim;
|
|
}
|
|
},
|
|
.openbsd => extern struct {
|
|
mode: mode_t,
|
|
dev: dev_t,
|
|
ino: ino_t,
|
|
nlink: nlink_t,
|
|
uid: uid_t,
|
|
gid: gid_t,
|
|
rdev: dev_t,
|
|
atim: timespec,
|
|
mtim: timespec,
|
|
ctim: timespec,
|
|
size: off_t,
|
|
blocks: blkcnt_t,
|
|
blksize: blksize_t,
|
|
flags: u32,
|
|
gen: u32,
|
|
birthtim: timespec,
|
|
|
|
pub fn atime(self: @This()) timespec {
|
|
return self.atim;
|
|
}
|
|
|
|
pub fn mtime(self: @This()) timespec {
|
|
return self.mtim;
|
|
}
|
|
|
|
pub fn ctime(self: @This()) timespec {
|
|
return self.ctim;
|
|
}
|
|
|
|
pub fn birthtime(self: @This()) timespec {
|
|
return self.birthtim;
|
|
}
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
pub const pthread_mutex_t = switch (native_os) {
|
|
.linux, .minix => extern struct {
|
|
data: [data_len]u8 align(@alignOf(usize)) = [_]u8{0} ** data_len,
|
|
|
|
const data_len = switch (native_abi) {
|
|
.musl, .musleabi, .musleabihf => if (@sizeOf(usize) == 8) 40 else 24,
|
|
.gnu, .gnuabin32, .gnuabi64, .gnueabi, .gnueabihf, .gnux32 => switch (native_arch) {
|
|
.aarch64 => 48,
|
|
.x86_64 => if (native_abi == .gnux32) 40 else 32,
|
|
.mips64, .powerpc64, .powerpc64le, .sparc64 => 40,
|
|
else => if (@sizeOf(usize) == 8) 40 else 24,
|
|
},
|
|
.android => if (@sizeOf(usize) == 8) 40 else 4,
|
|
else => @compileError("unsupported ABI"),
|
|
};
|
|
},
|
|
.macos, .ios, .tvos, .watchos, .visionos => extern struct {
|
|
sig: c_long = 0x32AAABA7,
|
|
data: [data_len]u8 = [_]u8{0} ** data_len,
|
|
|
|
const data_len = if (@sizeOf(usize) == 8) 56 else 40;
|
|
},
|
|
.freebsd, .dragonfly, .openbsd => extern struct {
|
|
inner: ?*anyopaque = null,
|
|
},
|
|
.hermit => extern struct {
|
|
ptr: usize = maxInt(usize),
|
|
},
|
|
.netbsd => extern struct {
|
|
magic: u32 = 0x33330003,
|
|
errorcheck: padded_pthread_spin_t = 0,
|
|
ceiling: padded_pthread_spin_t = 0,
|
|
owner: usize = 0,
|
|
waiters: ?*u8 = null,
|
|
recursed: u32 = 0,
|
|
spare2: ?*anyopaque = null,
|
|
},
|
|
.haiku => extern struct {
|
|
flags: u32 = 0,
|
|
lock: i32 = 0,
|
|
unused: i32 = -42,
|
|
owner: i32 = -1,
|
|
owner_count: i32 = 0,
|
|
},
|
|
.solaris, .illumos => extern struct {
|
|
flag1: u16 = 0,
|
|
flag2: u8 = 0,
|
|
ceiling: u8 = 0,
|
|
type: u16 = 0,
|
|
magic: u16 = 0x4d58,
|
|
lock: u64 = 0,
|
|
data: u64 = 0,
|
|
},
|
|
.fuchsia => extern struct {
|
|
data: [40]u8 align(@alignOf(usize)) = [_]u8{0} ** 40,
|
|
},
|
|
.emscripten => extern struct {
|
|
data: [24]u8 align(4) = [_]u8{0} ** 24,
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
pub const pthread_cond_t = switch (native_os) {
|
|
.linux => extern struct {
|
|
data: [48]u8 align(@alignOf(usize)) = [_]u8{0} ** 48,
|
|
},
|
|
.macos, .ios, .tvos, .watchos, .visionos => extern struct {
|
|
sig: c_long = 0x3CB0B1BB,
|
|
data: [data_len]u8 = [_]u8{0} ** data_len,
|
|
const data_len = if (@sizeOf(usize) == 8) 40 else 24;
|
|
},
|
|
.freebsd, .dragonfly, .openbsd => extern struct {
|
|
inner: ?*anyopaque = null,
|
|
},
|
|
.hermit => extern struct {
|
|
ptr: usize = maxInt(usize),
|
|
},
|
|
.netbsd => extern struct {
|
|
magic: u32 = 0x55550005,
|
|
lock: pthread_spin_t = 0,
|
|
waiters_first: ?*u8 = null,
|
|
waiters_last: ?*u8 = null,
|
|
mutex: ?*pthread_mutex_t = null,
|
|
private: ?*anyopaque = null,
|
|
},
|
|
.haiku => extern struct {
|
|
flags: u32 = 0,
|
|
unused: i32 = -42,
|
|
mutex: ?*anyopaque = null,
|
|
waiter_count: i32 = 0,
|
|
lock: i32 = 0,
|
|
},
|
|
.solaris, .illumos => extern struct {
|
|
flag: [4]u8 = [_]u8{0} ** 4,
|
|
type: u16 = 0,
|
|
magic: u16 = 0x4356,
|
|
data: u64 = 0,
|
|
},
|
|
.fuchsia, .minix, .emscripten => extern struct {
|
|
data: [48]u8 align(@alignOf(usize)) = [_]u8{0} ** 48,
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
pub const pthread_rwlock_t = switch (native_os) {
|
|
.linux => switch (native_abi) {
|
|
.android => switch (@sizeOf(usize)) {
|
|
4 => extern struct {
|
|
data: [40]u8 align(@alignOf(usize)) = [_]u8{0} ** 40,
|
|
},
|
|
8 => extern struct {
|
|
data: [56]u8 align(@alignOf(usize)) = [_]u8{0} ** 56,
|
|
},
|
|
else => @compileError("impossible pointer size"),
|
|
},
|
|
else => extern struct {
|
|
data: [56]u8 align(@alignOf(usize)) = [_]u8{0} ** 56,
|
|
},
|
|
},
|
|
.macos, .ios, .tvos, .watchos, .visionos => extern struct {
|
|
sig: c_long = 0x2DA8B3B4,
|
|
data: [192]u8 = [_]u8{0} ** 192,
|
|
},
|
|
.freebsd, .dragonfly, .openbsd => extern struct {
|
|
ptr: ?*anyopaque = null,
|
|
},
|
|
.hermit => extern struct {
|
|
ptr: usize = maxInt(usize),
|
|
},
|
|
.netbsd => extern struct {
|
|
magic: c_uint = 0x99990009,
|
|
interlock: switch (builtin.cpu.arch) {
|
|
.aarch64, .sparc, .x86_64, .x86 => u8,
|
|
.arm, .powerpc => c_int,
|
|
else => unreachable,
|
|
} = 0,
|
|
rblocked_first: ?*u8 = null,
|
|
rblocked_last: ?*u8 = null,
|
|
wblocked_first: ?*u8 = null,
|
|
wblocked_last: ?*u8 = null,
|
|
nreaders: c_uint = 0,
|
|
owner: ?pthread_t = null,
|
|
private: ?*anyopaque = null,
|
|
},
|
|
.solaris, .illumos => extern struct {
|
|
readers: i32 = 0,
|
|
type: u16 = 0,
|
|
magic: u16 = 0x5257,
|
|
mutex: pthread_mutex_t = .{},
|
|
readercv: pthread_cond_t = .{},
|
|
writercv: pthread_cond_t = .{},
|
|
},
|
|
.fuchsia => extern struct {
|
|
size: [56]u8 align(@alignOf(usize)) = [_]u8{0} ** 56,
|
|
},
|
|
.emscripten => extern struct {
|
|
size: [32]u8 align(4) = [_]u8{0} ** 32,
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
pub const pthread_attr_t = switch (native_os) {
|
|
.linux, .emscripten, .dragonfly => extern struct {
|
|
__size: [56]u8,
|
|
__align: c_long,
|
|
},
|
|
.macos, .ios, .tvos, .watchos, .visionos => extern struct {
|
|
__sig: c_long,
|
|
__opaque: [56]u8,
|
|
},
|
|
.freebsd => extern struct {
|
|
inner: ?*anyopaque = null,
|
|
},
|
|
.solaris, .illumos => extern struct {
|
|
mutexattr: ?*anyopaque = null,
|
|
},
|
|
.netbsd => extern struct {
|
|
magic: u32,
|
|
flags: i32,
|
|
private: ?*anyopaque,
|
|
},
|
|
.haiku => extern struct {
|
|
detach_state: i32,
|
|
sched_priority: i32,
|
|
stack_size: i32,
|
|
guard_size: i32,
|
|
stack_address: ?*anyopaque,
|
|
},
|
|
.openbsd => extern struct {
|
|
inner: ?*anyopaque = null,
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
pub const pthread_key_t = switch (native_os) {
|
|
.linux, .emscripten => c_uint,
|
|
.openbsd, .solaris, .illumos => c_int,
|
|
else => void,
|
|
};
|
|
|
|
pub const padded_pthread_spin_t = switch (native_os) {
|
|
.netbsd => switch (builtin.cpu.arch) {
|
|
.x86, .x86_64 => u32,
|
|
.sparc, .sparcel, .sparc64 => u32,
|
|
else => pthread_spin_t,
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
pub const pthread_spin_t = switch (native_os) {
|
|
.netbsd => switch (builtin.cpu.arch) {
|
|
.aarch64, .aarch64_be, .aarch64_32 => u8,
|
|
.mips, .mipsel, .mips64, .mips64el => u32,
|
|
.powerpc, .powerpc64, .powerpc64le => i32,
|
|
.x86, .x86_64 => u8,
|
|
.arm, .armeb, .thumb, .thumbeb => i32,
|
|
.sparc, .sparcel, .sparc64 => u8,
|
|
.riscv32, .riscv64 => u32,
|
|
else => @compileError("undefined pthread_spin_t for this arch"),
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
pub const sem_t = switch (native_os) {
|
|
.linux, .emscripten => extern struct {
|
|
__size: [4 * @sizeOf(usize)]u8 align(@alignOf(usize)),
|
|
},
|
|
.macos, .ios, .tvos, .watchos, .visionos => c_int,
|
|
.freebsd => extern struct {
|
|
_magic: u32,
|
|
_kern: extern struct {
|
|
_count: u32,
|
|
_flags: u32,
|
|
},
|
|
_padding: u32,
|
|
},
|
|
.solaris, .illumos => extern struct {
|
|
count: u32 = 0,
|
|
type: u16 = 0,
|
|
magic: u16 = 0x534d,
|
|
__pad1: [3]u64 = [_]u64{0} ** 3,
|
|
__pad2: [2]u64 = [_]u64{0} ** 2,
|
|
},
|
|
.openbsd, .netbsd, .dragonfly => ?*opaque {},
|
|
.haiku => extern struct {
|
|
type: i32,
|
|
u: extern union {
|
|
named_sem_id: i32,
|
|
unnamed_sem: i32,
|
|
},
|
|
padding: [2]i32,
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
/// Renamed from `kevent` to `Kevent` to avoid conflict with function name.
|
|
pub const Kevent = switch (native_os) {
|
|
.netbsd => extern struct {
|
|
ident: usize,
|
|
filter: i32,
|
|
flags: u32,
|
|
fflags: u32,
|
|
data: i64,
|
|
udata: usize,
|
|
},
|
|
.macos, .ios, .tvos, .watchos, .visionos => extern struct {
|
|
ident: usize,
|
|
filter: i16,
|
|
flags: u16,
|
|
fflags: u32,
|
|
data: isize,
|
|
udata: usize,
|
|
|
|
// sys/types.h on macos uses #pragma pack(4) so these checks are
|
|
// to make sure the struct is laid out the same. These values were
|
|
// produced from C code using the offsetof macro.
|
|
comptime {
|
|
assert(@offsetOf(@This(), "ident") == 0);
|
|
assert(@offsetOf(@This(), "filter") == 8);
|
|
assert(@offsetOf(@This(), "flags") == 10);
|
|
assert(@offsetOf(@This(), "fflags") == 12);
|
|
assert(@offsetOf(@This(), "data") == 16);
|
|
assert(@offsetOf(@This(), "udata") == 24);
|
|
}
|
|
},
|
|
.freebsd => extern struct {
|
|
/// Identifier for this event.
|
|
ident: usize,
|
|
/// Filter for event.
|
|
filter: i16,
|
|
/// Action flags for kqueue.
|
|
flags: u16,
|
|
/// Filter flag value.
|
|
fflags: u32,
|
|
/// Filter data value.
|
|
data: i64,
|
|
/// Opaque user data identifier.
|
|
udata: usize,
|
|
/// Future extensions.
|
|
_ext: [4]u64 = [_]u64{0} ** 4,
|
|
},
|
|
.dragonfly => extern struct {
|
|
ident: usize,
|
|
filter: c_short,
|
|
flags: c_ushort,
|
|
fflags: c_uint,
|
|
data: isize,
|
|
udata: usize,
|
|
},
|
|
.openbsd => extern struct {
|
|
ident: usize,
|
|
filter: c_short,
|
|
flags: u16,
|
|
fflags: c_uint,
|
|
data: i64,
|
|
udata: usize,
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
pub const port_t = switch (native_os) {
|
|
.solaris, .illumos => c_int,
|
|
else => void,
|
|
};
|
|
|
|
pub const port_event = switch (native_os) {
|
|
.solaris, .illumos => extern struct {
|
|
events: u32,
|
|
/// Event source.
|
|
source: u16,
|
|
__pad: u16,
|
|
/// Source-specific object.
|
|
object: ?*anyopaque,
|
|
/// User cookie.
|
|
cookie: ?*anyopaque,
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
pub const AT = switch (native_os) {
|
|
.linux => linux.AT,
|
|
.windows => struct {
|
|
/// Remove directory instead of unlinking file
|
|
pub const REMOVEDIR = 0x200;
|
|
},
|
|
.macos, .ios, .tvos, .watchos, .visionos => struct {
|
|
pub const FDCWD = -2;
|
|
/// Use effective ids in access check
|
|
pub const EACCESS = 0x0010;
|
|
/// Act on the symlink itself not the target
|
|
pub const SYMLINK_NOFOLLOW = 0x0020;
|
|
/// Act on target of symlink
|
|
pub const SYMLINK_FOLLOW = 0x0040;
|
|
/// Path refers to directory
|
|
pub const REMOVEDIR = 0x0080;
|
|
},
|
|
.freebsd => struct {
|
|
/// Magic value that specify the use of the current working directory
|
|
/// to determine the target of relative file paths in the openat() and
|
|
/// similar syscalls.
|
|
pub const FDCWD = -100;
|
|
/// Check access using effective user and group ID
|
|
pub const EACCESS = 0x0100;
|
|
/// Do not follow symbolic links
|
|
pub const SYMLINK_NOFOLLOW = 0x0200;
|
|
/// Follow symbolic link
|
|
pub const SYMLINK_FOLLOW = 0x0400;
|
|
/// Remove directory instead of file
|
|
pub const REMOVEDIR = 0x0800;
|
|
/// Fail if not under dirfd
|
|
pub const BENEATH = 0x1000;
|
|
},
|
|
.netbsd => struct {
|
|
/// Magic value that specify the use of the current working directory
|
|
/// to determine the target of relative file paths in the openat() and
|
|
/// similar syscalls.
|
|
pub const FDCWD = -100;
|
|
/// Check access using effective user and group ID
|
|
pub const EACCESS = 0x0100;
|
|
/// Do not follow symbolic links
|
|
pub const SYMLINK_NOFOLLOW = 0x0200;
|
|
/// Follow symbolic link
|
|
pub const SYMLINK_FOLLOW = 0x0400;
|
|
/// Remove directory instead of file
|
|
pub const REMOVEDIR = 0x0800;
|
|
},
|
|
.dragonfly => struct {
|
|
pub const FDCWD = -328243;
|
|
pub const SYMLINK_NOFOLLOW = 1;
|
|
pub const REMOVEDIR = 2;
|
|
pub const EACCESS = 4;
|
|
pub const SYMLINK_FOLLOW = 8;
|
|
},
|
|
.openbsd => struct {
|
|
/// Magic value that specify the use of the current working directory
|
|
/// to determine the target of relative file paths in the openat() and
|
|
/// similar syscalls.
|
|
pub const FDCWD = -100;
|
|
/// Check access using effective user and group ID
|
|
pub const EACCESS = 0x01;
|
|
/// Do not follow symbolic links
|
|
pub const SYMLINK_NOFOLLOW = 0x02;
|
|
/// Follow symbolic link
|
|
pub const SYMLINK_FOLLOW = 0x04;
|
|
/// Remove directory instead of file
|
|
pub const REMOVEDIR = 0x08;
|
|
},
|
|
.haiku => struct {
|
|
pub const FDCWD = -1;
|
|
pub const SYMLINK_NOFOLLOW = 0x01;
|
|
pub const SYMLINK_FOLLOW = 0x02;
|
|
pub const REMOVEDIR = 0x04;
|
|
pub const EACCESS = 0x08;
|
|
},
|
|
.solaris, .illumos => struct {
|
|
/// Magic value that specify the use of the current working directory
|
|
/// to determine the target of relative file paths in the openat() and
|
|
/// similar syscalls.
|
|
pub const FDCWD: fd_t = @bitCast(@as(u32, 0xffd19553));
|
|
/// Do not follow symbolic links
|
|
pub const SYMLINK_NOFOLLOW = 0x1000;
|
|
/// Follow symbolic link
|
|
pub const SYMLINK_FOLLOW = 0x2000;
|
|
/// Remove directory instead of file
|
|
pub const REMOVEDIR = 0x1;
|
|
pub const TRIGGER = 0x2;
|
|
/// Check access using effective user and group ID
|
|
pub const EACCESS = 0x4;
|
|
},
|
|
.emscripten => struct {
|
|
pub const FDCWD = -100;
|
|
pub const SYMLINK_NOFOLLOW = 0x100;
|
|
pub const REMOVEDIR = 0x200;
|
|
pub const SYMLINK_FOLLOW = 0x400;
|
|
pub const NO_AUTOMOUNT = 0x800;
|
|
pub const EMPTY_PATH = 0x1000;
|
|
pub const STATX_SYNC_TYPE = 0x6000;
|
|
pub const STATX_SYNC_AS_STAT = 0x0000;
|
|
pub const STATX_FORCE_SYNC = 0x2000;
|
|
pub const STATX_DONT_SYNC = 0x4000;
|
|
pub const RECURSIVE = 0x8000;
|
|
},
|
|
.wasi => struct {
|
|
pub const SYMLINK_NOFOLLOW = 0x100;
|
|
pub const SYMLINK_FOLLOW = 0x400;
|
|
pub const REMOVEDIR: u32 = 0x4;
|
|
/// When linking libc, we follow their convention and use -2 for current working directory.
|
|
/// However, without libc, Zig does a different convention: it assumes the
|
|
/// current working directory is the first preopen. This behavior can be
|
|
/// overridden with a public function called `wasi_cwd` in the root source
|
|
/// file.
|
|
pub const FDCWD: fd_t = if (builtin.link_libc) -2 else 3;
|
|
},
|
|
|
|
else => void,
|
|
};
|
|
|
|
pub const O = switch (native_os) {
|
|
.linux => linux.O,
|
|
.emscripten => packed struct(u32) {
|
|
ACCMODE: std.posix.ACCMODE = .RDONLY,
|
|
_2: u4 = 0,
|
|
CREAT: bool = false,
|
|
EXCL: bool = false,
|
|
NOCTTY: bool = false,
|
|
TRUNC: bool = false,
|
|
APPEND: bool = false,
|
|
NONBLOCK: bool = false,
|
|
DSYNC: bool = false,
|
|
ASYNC: bool = false,
|
|
DIRECT: bool = false,
|
|
LARGEFILE: bool = false,
|
|
DIRECTORY: bool = false,
|
|
NOFOLLOW: bool = false,
|
|
NOATIME: bool = false,
|
|
CLOEXEC: bool = false,
|
|
SYNC: bool = false,
|
|
PATH: bool = false,
|
|
TMPFILE: bool = false,
|
|
_: u9 = 0,
|
|
},
|
|
.wasi => packed struct(u32) {
|
|
APPEND: bool = false,
|
|
DSYNC: bool = false,
|
|
NONBLOCK: bool = false,
|
|
RSYNC: bool = false,
|
|
SYNC: bool = false,
|
|
_5: u7 = 0,
|
|
CREAT: bool = false,
|
|
DIRECTORY: bool = false,
|
|
EXCL: bool = false,
|
|
TRUNC: bool = false,
|
|
_16: u8 = 0,
|
|
NOFOLLOW: bool = false,
|
|
EXEC: bool = false,
|
|
read: bool = false,
|
|
SEARCH: bool = false,
|
|
write: bool = false,
|
|
_: u3 = 0,
|
|
},
|
|
.solaris, .illumos => packed struct(u32) {
|
|
ACCMODE: std.posix.ACCMODE = .RDONLY,
|
|
NDELAY: bool = false,
|
|
APPEND: bool = false,
|
|
SYNC: bool = false,
|
|
_5: u1 = 0,
|
|
DSYNC: bool = false,
|
|
NONBLOCK: bool = false,
|
|
CREAT: bool = false,
|
|
TRUNC: bool = false,
|
|
EXCL: bool = false,
|
|
NOCTTY: bool = false,
|
|
_12: u1 = 0,
|
|
LARGEFILE: bool = false,
|
|
XATTR: bool = false,
|
|
RSYNC: bool = false,
|
|
_16: u1 = 0,
|
|
NOFOLLOW: bool = false,
|
|
NOLINKS: bool = false,
|
|
_19: u2 = 0,
|
|
SEARCH: bool = false,
|
|
EXEC: bool = false,
|
|
CLOEXEC: bool = false,
|
|
DIRECTORY: bool = false,
|
|
DIRECT: bool = false,
|
|
_: u6 = 0,
|
|
},
|
|
.netbsd => packed struct(u32) {
|
|
ACCMODE: std.posix.ACCMODE = .RDONLY,
|
|
NONBLOCK: bool = false,
|
|
APPEND: bool = false,
|
|
SHLOCK: bool = false,
|
|
EXLOCK: bool = false,
|
|
ASYNC: bool = false,
|
|
SYNC: bool = false,
|
|
NOFOLLOW: bool = false,
|
|
CREAT: bool = false,
|
|
TRUNC: bool = false,
|
|
EXCL: bool = false,
|
|
_12: u3 = 0,
|
|
NOCTTY: bool = false,
|
|
DSYNC: bool = false,
|
|
RSYNC: bool = false,
|
|
ALT_IO: bool = false,
|
|
DIRECT: bool = false,
|
|
_20: u1 = 0,
|
|
DIRECTORY: bool = false,
|
|
CLOEXEC: bool = false,
|
|
SEARCH: bool = false,
|
|
_: u8 = 0,
|
|
},
|
|
.openbsd => packed struct(u32) {
|
|
ACCMODE: std.posix.ACCMODE = .RDONLY,
|
|
NONBLOCK: bool = false,
|
|
APPEND: bool = false,
|
|
SHLOCK: bool = false,
|
|
EXLOCK: bool = false,
|
|
ASYNC: bool = false,
|
|
SYNC: bool = false,
|
|
NOFOLLOW: bool = false,
|
|
CREAT: bool = false,
|
|
TRUNC: bool = false,
|
|
EXCL: bool = false,
|
|
_12: u3 = 0,
|
|
NOCTTY: bool = false,
|
|
CLOEXEC: bool = false,
|
|
DIRECTORY: bool = false,
|
|
_: u14 = 0,
|
|
},
|
|
.haiku => packed struct(u32) {
|
|
ACCMODE: std.posix.ACCMODE = .RDONLY,
|
|
_2: u4 = 0,
|
|
CLOEXEC: bool = false,
|
|
NONBLOCK: bool = false,
|
|
EXCL: bool = false,
|
|
CREAT: bool = false,
|
|
TRUNC: bool = false,
|
|
APPEND: bool = false,
|
|
NOCTTY: bool = false,
|
|
NOTRAVERSE: bool = false,
|
|
_14: u2 = 0,
|
|
SYNC: bool = false,
|
|
RSYNC: bool = false,
|
|
DSYNC: bool = false,
|
|
NOFOLLOW: bool = false,
|
|
DIRECT: bool = false,
|
|
DIRECTORY: bool = false,
|
|
_: u10 = 0,
|
|
},
|
|
.macos, .ios, .tvos, .watchos, .visionos => packed struct(u32) {
|
|
ACCMODE: std.posix.ACCMODE = .RDONLY,
|
|
NONBLOCK: bool = false,
|
|
APPEND: bool = false,
|
|
SHLOCK: bool = false,
|
|
EXLOCK: bool = false,
|
|
ASYNC: bool = false,
|
|
SYNC: bool = false,
|
|
NOFOLLOW: bool = false,
|
|
CREAT: bool = false,
|
|
TRUNC: bool = false,
|
|
EXCL: bool = false,
|
|
_12: u3 = 0,
|
|
EVTONLY: bool = false,
|
|
_16: u1 = 0,
|
|
NOCTTY: bool = false,
|
|
_18: u2 = 0,
|
|
DIRECTORY: bool = false,
|
|
SYMLINK: bool = false,
|
|
DSYNC: bool = false,
|
|
_23: u1 = 0,
|
|
CLOEXEC: bool = false,
|
|
_25: u4 = 0,
|
|
ALERT: bool = false,
|
|
_30: u1 = 0,
|
|
POPUP: bool = false,
|
|
},
|
|
.dragonfly => packed struct(u32) {
|
|
ACCMODE: std.posix.ACCMODE = .RDONLY,
|
|
NONBLOCK: bool = false,
|
|
APPEND: bool = false,
|
|
SHLOCK: bool = false,
|
|
EXLOCK: bool = false,
|
|
ASYNC: bool = false,
|
|
SYNC: bool = false,
|
|
NOFOLLOW: bool = false,
|
|
CREAT: bool = false,
|
|
TRUNC: bool = false,
|
|
EXCL: bool = false,
|
|
_12: u3 = 0,
|
|
NOCTTY: bool = false,
|
|
DIRECT: bool = false,
|
|
CLOEXEC: bool = false,
|
|
FBLOCKING: bool = false,
|
|
FNONBLOCKING: bool = false,
|
|
FAPPEND: bool = false,
|
|
FOFFSET: bool = false,
|
|
FSYNCWRITE: bool = false,
|
|
FASYNCWRITE: bool = false,
|
|
_24: u3 = 0,
|
|
DIRECTORY: bool = false,
|
|
_: u4 = 0,
|
|
},
|
|
.freebsd => packed struct(u32) {
|
|
ACCMODE: std.posix.ACCMODE = .RDONLY,
|
|
NONBLOCK: bool = false,
|
|
APPEND: bool = false,
|
|
SHLOCK: bool = false,
|
|
EXLOCK: bool = false,
|
|
ASYNC: bool = false,
|
|
SYNC: bool = false,
|
|
NOFOLLOW: bool = false,
|
|
CREAT: bool = false,
|
|
TRUNC: bool = false,
|
|
EXCL: bool = false,
|
|
DSYNC: bool = false,
|
|
_13: u2 = 0,
|
|
NOCTTY: bool = false,
|
|
DIRECT: bool = false,
|
|
DIRECTORY: bool = false,
|
|
NOATIME: bool = false,
|
|
_19: u1 = 0,
|
|
CLOEXEC: bool = false,
|
|
PATH: bool = false,
|
|
TMPFILE: bool = false,
|
|
_: u9 = 0,
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
pub const MAP = switch (native_os) {
|
|
.linux => linux.MAP,
|
|
.emscripten => packed struct(u32) {
|
|
TYPE: enum(u4) {
|
|
SHARED = 0x01,
|
|
PRIVATE = 0x02,
|
|
SHARED_VALIDATE = 0x03,
|
|
},
|
|
FIXED: bool = false,
|
|
ANONYMOUS: bool = false,
|
|
_6: u2 = 0,
|
|
GROWSDOWN: bool = false,
|
|
_9: u2 = 0,
|
|
DENYWRITE: bool = false,
|
|
EXECUTABLE: bool = false,
|
|
LOCKED: bool = false,
|
|
NORESERVE: bool = false,
|
|
POPULATE: bool = false,
|
|
NONBLOCK: bool = false,
|
|
STACK: bool = false,
|
|
HUGETLB: bool = false,
|
|
SYNC: bool = false,
|
|
FIXED_NOREPLACE: bool = false,
|
|
_: u11 = 0,
|
|
},
|
|
.solaris, .illumos => packed struct(u32) {
|
|
TYPE: enum(u4) {
|
|
SHARED = 0x01,
|
|
PRIVATE = 0x02,
|
|
},
|
|
FIXED: bool = false,
|
|
RENAME: bool = false,
|
|
NORESERVE: bool = false,
|
|
@"32BIT": bool = false,
|
|
ANONYMOUS: bool = false,
|
|
ALIGN: bool = false,
|
|
TEXT: bool = false,
|
|
INITDATA: bool = false,
|
|
_: u20 = 0,
|
|
},
|
|
.netbsd => packed struct(u32) {
|
|
TYPE: enum(u2) {
|
|
SHARED = 0x01,
|
|
PRIVATE = 0x02,
|
|
},
|
|
REMAPDUP: bool = false,
|
|
_3: u1 = 0,
|
|
FIXED: bool = false,
|
|
RENAME: bool = false,
|
|
NORESERVE: bool = false,
|
|
INHERIT: bool = false,
|
|
_8: u1 = 0,
|
|
HASSEMAPHORE: bool = false,
|
|
TRYFIXED: bool = false,
|
|
WIRED: bool = false,
|
|
ANONYMOUS: bool = false,
|
|
STACK: bool = false,
|
|
_: u18 = 0,
|
|
},
|
|
.openbsd => packed struct(u32) {
|
|
TYPE: enum(u4) {
|
|
SHARED = 0x01,
|
|
PRIVATE = 0x02,
|
|
},
|
|
FIXED: bool = false,
|
|
_5: u7 = 0,
|
|
ANONYMOUS: bool = false,
|
|
_13: u1 = 0,
|
|
STACK: bool = false,
|
|
CONCEAL: bool = false,
|
|
_: u16 = 0,
|
|
},
|
|
.haiku => packed struct(u32) {
|
|
TYPE: enum(u2) {
|
|
SHARED = 0x01,
|
|
PRIVATE = 0x02,
|
|
},
|
|
FIXED: bool = false,
|
|
ANONYMOUS: bool = false,
|
|
NORESERVE: bool = false,
|
|
_: u27 = 0,
|
|
},
|
|
.macos, .ios, .tvos, .watchos, .visionos => packed struct(u32) {
|
|
TYPE: enum(u4) {
|
|
SHARED = 0x01,
|
|
PRIVATE = 0x02,
|
|
},
|
|
FIXED: bool = false,
|
|
_5: u1 = 0,
|
|
NORESERVE: bool = false,
|
|
_7: u2 = 0,
|
|
HASSEMAPHORE: bool = false,
|
|
NOCACHE: bool = false,
|
|
_11: u1 = 0,
|
|
ANONYMOUS: bool = false,
|
|
_: u19 = 0,
|
|
},
|
|
.dragonfly => packed struct(u32) {
|
|
TYPE: enum(u4) {
|
|
SHARED = 0x01,
|
|
PRIVATE = 0x02,
|
|
},
|
|
FIXED: bool = false,
|
|
RENAME: bool = false,
|
|
NORESERVE: bool = false,
|
|
INHERIT: bool = false,
|
|
NOEXTEND: bool = false,
|
|
HASSEMAPHORE: bool = false,
|
|
STACK: bool = false,
|
|
NOSYNC: bool = false,
|
|
ANONYMOUS: bool = false,
|
|
VPAGETABLE: bool = false,
|
|
_14: u2 = 0,
|
|
TRYFIXED: bool = false,
|
|
NOCORE: bool = false,
|
|
SIZEALIGN: bool = false,
|
|
_: u13 = 0,
|
|
},
|
|
.freebsd => packed struct(u32) {
|
|
TYPE: enum(u4) {
|
|
SHARED = 0x01,
|
|
PRIVATE = 0x02,
|
|
},
|
|
FIXED: bool = false,
|
|
_5: u5 = 0,
|
|
STACK: bool = false,
|
|
NOSYNC: bool = false,
|
|
ANONYMOUS: bool = false,
|
|
GUARD: bool = false,
|
|
EXCL: bool = false,
|
|
_15: u2 = 0,
|
|
NOCORE: bool = false,
|
|
PREFAULT_READ: bool = false,
|
|
@"32BIT": bool = false,
|
|
_: u12 = 0,
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
/// Used by libc to communicate failure. Not actually part of the underlying syscall.
|
|
pub const MAP_FAILED: *anyopaque = @ptrFromInt(maxInt(usize));
|
|
|
|
pub const cc_t = u8;
|
|
|
|
/// Indices into the `cc` array in the `termios` struct.
|
|
pub const V = switch (native_os) {
|
|
.linux => linux.V,
|
|
.macos, .ios, .tvos, .watchos, .visionos, .netbsd, .openbsd => enum {
|
|
EOF,
|
|
EOL,
|
|
EOL2,
|
|
ERASE,
|
|
WERASE,
|
|
KILL,
|
|
REPRINT,
|
|
reserved,
|
|
INTR,
|
|
QUIT,
|
|
SUSP,
|
|
DSUSP,
|
|
START,
|
|
STOP,
|
|
LNEXT,
|
|
DISCARD,
|
|
MIN,
|
|
TIME,
|
|
STATUS,
|
|
},
|
|
.freebsd => enum {
|
|
EOF,
|
|
EOL,
|
|
EOL2,
|
|
ERASE,
|
|
WERASE,
|
|
KILL,
|
|
REPRINT,
|
|
ERASE2,
|
|
INTR,
|
|
QUIT,
|
|
SUSP,
|
|
DSUSP,
|
|
START,
|
|
STOP,
|
|
LNEXT,
|
|
DISCARD,
|
|
MIN,
|
|
TIME,
|
|
STATUS,
|
|
},
|
|
.haiku => enum {
|
|
INTR,
|
|
QUIT,
|
|
ERASE,
|
|
KILL,
|
|
EOF,
|
|
EOL,
|
|
EOL2,
|
|
SWTCH,
|
|
START,
|
|
STOP,
|
|
SUSP,
|
|
},
|
|
.solaris, .illumos => enum {
|
|
INTR,
|
|
QUIT,
|
|
ERASE,
|
|
KILL,
|
|
EOF,
|
|
EOL,
|
|
EOL2,
|
|
SWTCH,
|
|
START,
|
|
STOP,
|
|
SUSP,
|
|
DSUSP,
|
|
REPRINT,
|
|
DISCARD,
|
|
WERASE,
|
|
LNEXT,
|
|
STATUS,
|
|
ERASE2,
|
|
},
|
|
.emscripten, .wasi => enum {
|
|
INTR,
|
|
QUIT,
|
|
ERASE,
|
|
KILL,
|
|
EOF,
|
|
TIME,
|
|
MIN,
|
|
SWTC,
|
|
START,
|
|
STOP,
|
|
SUSP,
|
|
EOL,
|
|
REPRINT,
|
|
DISCARD,
|
|
WERASE,
|
|
LNEXT,
|
|
EOL2,
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
pub const NCCS = switch (native_os) {
|
|
.linux => linux.NCCS,
|
|
.macos, .ios, .tvos, .watchos, .visionos, .freebsd, .netbsd, .openbsd, .dragonfly => 20,
|
|
.haiku => 11,
|
|
.solaris, .illumos => 19,
|
|
.emscripten, .wasi => 32,
|
|
else => void,
|
|
};
|
|
|
|
pub const termios = switch (native_os) {
|
|
.linux => linux.termios,
|
|
.macos, .ios, .tvos, .watchos, .visionos => extern struct {
|
|
iflag: tc_iflag_t,
|
|
oflag: tc_oflag_t,
|
|
cflag: tc_cflag_t,
|
|
lflag: tc_lflag_t,
|
|
cc: [NCCS]cc_t,
|
|
ispeed: speed_t align(8),
|
|
ospeed: speed_t,
|
|
},
|
|
.freebsd, .netbsd, .dragonfly, .openbsd => extern struct {
|
|
iflag: tc_iflag_t,
|
|
oflag: tc_oflag_t,
|
|
cflag: tc_cflag_t,
|
|
lflag: tc_lflag_t,
|
|
cc: [NCCS]cc_t,
|
|
ispeed: speed_t,
|
|
ospeed: speed_t,
|
|
},
|
|
.haiku => extern struct {
|
|
iflag: tc_iflag_t,
|
|
oflag: tc_oflag_t,
|
|
cflag: tc_cflag_t,
|
|
lflag: tc_lflag_t,
|
|
line: cc_t,
|
|
ispeed: speed_t,
|
|
ospeed: speed_t,
|
|
cc: [NCCS]cc_t,
|
|
},
|
|
.solaris, .illumos => extern struct {
|
|
iflag: tc_iflag_t,
|
|
oflag: tc_oflag_t,
|
|
cflag: tc_cflag_t,
|
|
lflag: tc_lflag_t,
|
|
cc: [NCCS]cc_t,
|
|
},
|
|
.emscripten, .wasi => extern struct {
|
|
iflag: tc_iflag_t,
|
|
oflag: tc_oflag_t,
|
|
cflag: tc_cflag_t,
|
|
lflag: tc_lflag_t,
|
|
line: cc_t,
|
|
cc: [NCCS]cc_t,
|
|
ispeed: speed_t,
|
|
ospeed: speed_t,
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
pub const tc_iflag_t = switch (native_os) {
|
|
.linux => linux.tc_iflag_t,
|
|
.macos, .ios, .tvos, .watchos, .visionos => packed struct(u64) {
|
|
IGNBRK: bool = false,
|
|
BRKINT: bool = false,
|
|
IGNPAR: bool = false,
|
|
PARMRK: bool = false,
|
|
INPCK: bool = false,
|
|
ISTRIP: bool = false,
|
|
INLCR: bool = false,
|
|
IGNCR: bool = false,
|
|
ICRNL: bool = false,
|
|
IXON: bool = false,
|
|
IXOFF: bool = false,
|
|
IXANY: bool = false,
|
|
_12: u1 = 0,
|
|
IMAXBEL: bool = false,
|
|
IUTF8: bool = false,
|
|
_: u49 = 0,
|
|
},
|
|
.netbsd, .freebsd, .dragonfly => packed struct(u32) {
|
|
IGNBRK: bool = false,
|
|
BRKINT: bool = false,
|
|
IGNPAR: bool = false,
|
|
PARMRK: bool = false,
|
|
INPCK: bool = false,
|
|
ISTRIP: bool = false,
|
|
INLCR: bool = false,
|
|
IGNCR: bool = false,
|
|
ICRNL: bool = false,
|
|
IXON: bool = false,
|
|
IXOFF: bool = false,
|
|
IXANY: bool = false,
|
|
_12: u1 = 0,
|
|
IMAXBEL: bool = false,
|
|
_: u18 = 0,
|
|
},
|
|
.openbsd => packed struct(u32) {
|
|
IGNBRK: bool = false,
|
|
BRKINT: bool = false,
|
|
IGNPAR: bool = false,
|
|
PARMRK: bool = false,
|
|
INPCK: bool = false,
|
|
ISTRIP: bool = false,
|
|
INLCR: bool = false,
|
|
IGNCR: bool = false,
|
|
ICRNL: bool = false,
|
|
IXON: bool = false,
|
|
IXOFF: bool = false,
|
|
IXANY: bool = false,
|
|
IUCLC: bool = false,
|
|
IMAXBEL: bool = false,
|
|
_: u18 = 0,
|
|
},
|
|
.haiku => packed struct(u32) {
|
|
IGNBRK: bool = false,
|
|
BRKINT: bool = false,
|
|
IGNPAR: bool = false,
|
|
PARMRK: bool = false,
|
|
INPCK: bool = false,
|
|
ISTRIP: bool = false,
|
|
INLCR: bool = false,
|
|
IGNCR: bool = false,
|
|
ICRNL: bool = false,
|
|
IUCLC: bool = false,
|
|
IXON: bool = false,
|
|
IXANY: bool = false,
|
|
IXOFF: bool = false,
|
|
_: u19 = 0,
|
|
},
|
|
.solaris, .illumos => packed struct(u32) {
|
|
IGNBRK: bool = false,
|
|
BRKINT: bool = false,
|
|
IGNPAR: bool = false,
|
|
PARMRK: bool = false,
|
|
INPCK: bool = false,
|
|
ISTRIP: bool = false,
|
|
INLCR: bool = false,
|
|
IGNCR: bool = false,
|
|
ICRNL: bool = false,
|
|
IUCLC: bool = false,
|
|
IXON: bool = false,
|
|
IXANY: bool = false,
|
|
_12: u1 = 0,
|
|
IMAXBEL: bool = false,
|
|
_14: u1 = 0,
|
|
DOSMODE: bool = false,
|
|
_: u16 = 0,
|
|
},
|
|
.emscripten, .wasi => packed struct(u32) {
|
|
IGNBRK: bool = false,
|
|
BRKINT: bool = false,
|
|
IGNPAR: bool = false,
|
|
PARMRK: bool = false,
|
|
INPCK: bool = false,
|
|
ISTRIP: bool = false,
|
|
INLCR: bool = false,
|
|
IGNCR: bool = false,
|
|
ICRNL: bool = false,
|
|
IUCLC: bool = false,
|
|
IXON: bool = false,
|
|
IXANY: bool = false,
|
|
IXOFF: bool = false,
|
|
IMAXBEL: bool = false,
|
|
IUTF8: bool = false,
|
|
_: u17 = 0,
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
pub const tc_oflag_t = switch (native_os) {
|
|
.linux => linux.tc_oflag_t,
|
|
.macos, .ios, .tvos, .watchos, .visionos => packed struct(u64) {
|
|
OPOST: bool = false,
|
|
ONLCR: bool = false,
|
|
OXTABS: bool = false,
|
|
ONOEOT: bool = false,
|
|
OCRNL: bool = false,
|
|
ONOCR: bool = false,
|
|
ONLRET: bool = false,
|
|
OFILL: bool = false,
|
|
NLDLY: u2 = 0,
|
|
TABDLY: u2 = 0,
|
|
CRDLY: u2 = 0,
|
|
FFDLY: u1 = 0,
|
|
BSDLY: u1 = 0,
|
|
VTDLY: u1 = 0,
|
|
OFDEL: bool = false,
|
|
_: u46 = 0,
|
|
},
|
|
.netbsd => packed struct(u32) {
|
|
OPOST: bool = false,
|
|
ONLCR: bool = false,
|
|
OXTABS: bool = false,
|
|
ONOEOT: bool = false,
|
|
OCRNL: bool = false,
|
|
_5: u1 = 0,
|
|
ONOCR: bool = false,
|
|
ONLRET: bool = false,
|
|
_: u24 = 0,
|
|
},
|
|
.openbsd => packed struct(u32) {
|
|
OPOST: bool = false,
|
|
ONLCR: bool = false,
|
|
OXTABS: bool = false,
|
|
ONOEOT: bool = false,
|
|
OCRNL: bool = false,
|
|
OLCUC: bool = false,
|
|
ONOCR: bool = false,
|
|
ONLRET: bool = false,
|
|
_: u24 = 0,
|
|
},
|
|
.freebsd, .dragonfly => packed struct(u32) {
|
|
OPOST: bool = false,
|
|
ONLCR: bool = false,
|
|
_2: u1 = 0,
|
|
ONOEOT: bool = false,
|
|
OCRNL: bool = false,
|
|
ONOCR: bool = false,
|
|
ONLRET: bool = false,
|
|
_: u25 = 0,
|
|
},
|
|
.solaris, .illumos => packed struct(u32) {
|
|
OPOST: bool = false,
|
|
OLCUC: bool = false,
|
|
ONLCR: bool = false,
|
|
OCRNL: bool = false,
|
|
ONOCR: bool = false,
|
|
ONLRET: bool = false,
|
|
OFILL: bool = false,
|
|
OFDEL: bool = false,
|
|
NLDLY: u1 = 0,
|
|
CRDLY: u2 = 0,
|
|
TABDLY: u2 = 0,
|
|
BSDLY: u1 = 0,
|
|
VTDLY: u1 = 0,
|
|
FFDLY: u1 = 0,
|
|
PAGEOUT: bool = false,
|
|
WRAP: bool = false,
|
|
_: u14 = 0,
|
|
},
|
|
.haiku, .wasi, .emscripten => packed struct(u32) {
|
|
OPOST: bool = false,
|
|
OLCUC: bool = false,
|
|
ONLCR: bool = false,
|
|
OCRNL: bool = false,
|
|
ONOCR: bool = false,
|
|
ONLRET: bool = false,
|
|
OFILL: bool = false,
|
|
OFDEL: bool = false,
|
|
NLDLY: u1 = 0,
|
|
CRDLY: u2 = 0,
|
|
TABDLY: u2 = 0,
|
|
BSDLY: u1 = 0,
|
|
VTDLY: u1 = 0,
|
|
FFDLY: u1 = 0,
|
|
_: u16 = 0,
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
pub const CSIZE = switch (native_os) {
|
|
.linux => linux.CSIZE,
|
|
.haiku => enum(u1) { CS7, CS8 },
|
|
else => enum(u2) { CS5, CS6, CS7, CS8 },
|
|
};
|
|
|
|
pub const tc_cflag_t = switch (native_os) {
|
|
.linux => linux.tc_cflag_t,
|
|
.macos, .ios, .tvos, .watchos, .visionos => packed struct(u64) {
|
|
CIGNORE: bool = false,
|
|
_1: u5 = 0,
|
|
CSTOPB: bool = false,
|
|
_7: u1 = 0,
|
|
CSIZE: CSIZE = .CS5,
|
|
_10: u1 = 0,
|
|
CREAD: bool = false,
|
|
PARENB: bool = false,
|
|
PARODD: bool = false,
|
|
HUPCL: bool = false,
|
|
CLOCAL: bool = false,
|
|
CCTS_OFLOW: bool = false,
|
|
CRTS_IFLOW: bool = false,
|
|
CDTR_IFLOW: bool = false,
|
|
CDSR_OFLOW: bool = false,
|
|
CCAR_OFLOW: bool = false,
|
|
_: u43 = 0,
|
|
},
|
|
.freebsd => packed struct(u32) {
|
|
CIGNORE: bool = false,
|
|
_1: u7 = 0,
|
|
CSIZE: CSIZE = .CS5,
|
|
CSTOPB: bool = false,
|
|
CREAD: bool = false,
|
|
PARENB: bool = false,
|
|
PARODD: bool = false,
|
|
HUPCL: bool = false,
|
|
CLOCAL: bool = false,
|
|
CCTS_OFLOW: bool = false,
|
|
CRTS_IFLOW: bool = false,
|
|
CDTR_IFLOW: bool = false,
|
|
CDSR_OFLOW: bool = false,
|
|
CCAR_OFLOW: bool = false,
|
|
CNO_RTSDTR: bool = false,
|
|
_: u10 = 0,
|
|
},
|
|
.netbsd => packed struct(u32) {
|
|
CIGNORE: bool = false,
|
|
_1: u7 = 0,
|
|
CSIZE: CSIZE = .CS5,
|
|
CSTOPB: bool = false,
|
|
CREAD: bool = false,
|
|
PARENB: bool = false,
|
|
PARODD: bool = false,
|
|
HUPCL: bool = false,
|
|
CLOCAL: bool = false,
|
|
CRTSCTS: bool = false,
|
|
CDTRCTS: bool = false,
|
|
_18: u2 = 0,
|
|
MDMBUF: bool = false,
|
|
_: u11 = 0,
|
|
},
|
|
.dragonfly => packed struct(u32) {
|
|
CIGNORE: bool = false,
|
|
_1: u7 = 0,
|
|
CSIZE: CSIZE = .CS5,
|
|
CSTOPB: bool = false,
|
|
CREAD: bool = false,
|
|
PARENB: bool = false,
|
|
PARODD: bool = false,
|
|
HUPCL: bool = false,
|
|
CLOCAL: bool = false,
|
|
CCTS_OFLOW: bool = false,
|
|
CRTS_IFLOW: bool = false,
|
|
CDTR_IFLOW: bool = false,
|
|
CDSR_OFLOW: bool = false,
|
|
CCAR_OFLOW: bool = false,
|
|
_: u11 = 0,
|
|
},
|
|
.openbsd => packed struct(u32) {
|
|
CIGNORE: bool = false,
|
|
_1: u7 = 0,
|
|
CSIZE: CSIZE = .CS5,
|
|
CSTOPB: bool = false,
|
|
CREAD: bool = false,
|
|
PARENB: bool = false,
|
|
PARODD: bool = false,
|
|
HUPCL: bool = false,
|
|
CLOCAL: bool = false,
|
|
CRTSCTS: bool = false,
|
|
_17: u3 = 0,
|
|
MDMBUF: bool = false,
|
|
_: u11 = 0,
|
|
},
|
|
.haiku => packed struct(u32) {
|
|
_0: u5 = 0,
|
|
CSIZE: CSIZE = .CS7,
|
|
CSTOPB: bool = false,
|
|
CREAD: bool = false,
|
|
PARENB: bool = false,
|
|
PARODD: bool = false,
|
|
HUPCL: bool = false,
|
|
CLOCAL: bool = false,
|
|
XLOBLK: bool = false,
|
|
CTSFLOW: bool = false,
|
|
RTSFLOW: bool = false,
|
|
_: u17 = 0,
|
|
},
|
|
.solaris, .illumos => packed struct(u32) {
|
|
_0: u4 = 0,
|
|
CSIZE: CSIZE = .CS5,
|
|
CSTOPB: bool = false,
|
|
CREAD: bool = false,
|
|
PARENB: bool = false,
|
|
PARODD: bool = false,
|
|
HUPCL: bool = false,
|
|
CLOCAL: bool = false,
|
|
RCV1EN: bool = false,
|
|
XMT1EN: bool = false,
|
|
LOBLK: bool = false,
|
|
XCLUDE: bool = false,
|
|
_16: u4 = 0,
|
|
PAREXT: bool = false,
|
|
CBAUDEXT: bool = false,
|
|
CIBAUDEXT: bool = false,
|
|
_23: u7 = 0,
|
|
CRTSXOFF: bool = false,
|
|
CRTSCTS: bool = false,
|
|
},
|
|
.wasi, .emscripten => packed struct(u32) {
|
|
_0: u4 = 0,
|
|
CSIZE: CSIZE = .CS5,
|
|
CSTOPB: bool = false,
|
|
CREAD: bool = false,
|
|
PARENB: bool = false,
|
|
PARODD: bool = false,
|
|
HUPCL: bool = false,
|
|
CLOCAL: bool = false,
|
|
_: u20 = 0,
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
pub const tc_lflag_t = switch (native_os) {
|
|
.linux => linux.tc_lflag_t,
|
|
.macos, .ios, .tvos, .watchos, .visionos => packed struct(u64) {
|
|
ECHOKE: bool = false,
|
|
ECHOE: bool = false,
|
|
ECHOK: bool = false,
|
|
ECHO: bool = false,
|
|
ECHONL: bool = false,
|
|
ECHOPRT: bool = false,
|
|
ECHOCTL: bool = false,
|
|
ISIG: bool = false,
|
|
ICANON: bool = false,
|
|
ALTWERASE: bool = false,
|
|
IEXTEN: bool = false,
|
|
EXTPROC: bool = false,
|
|
_12: u10 = 0,
|
|
TOSTOP: bool = false,
|
|
FLUSHO: bool = false,
|
|
_24: u1 = 0,
|
|
NOKERNINFO: bool = false,
|
|
_26: u3 = 0,
|
|
PENDIN: bool = false,
|
|
_30: u1 = 0,
|
|
NOFLSH: bool = false,
|
|
_: u32 = 0,
|
|
},
|
|
.netbsd, .freebsd, .dragonfly => packed struct(u32) {
|
|
ECHOKE: bool = false,
|
|
ECHOE: bool = false,
|
|
ECHOK: bool = false,
|
|
ECHO: bool = false,
|
|
ECHONL: bool = false,
|
|
ECHOPRT: bool = false,
|
|
ECHOCTL: bool = false,
|
|
ISIG: bool = false,
|
|
ICANON: bool = false,
|
|
ALTWERASE: bool = false,
|
|
IEXTEN: bool = false,
|
|
EXTPROC: bool = false,
|
|
_12: u10 = 0,
|
|
TOSTOP: bool = false,
|
|
FLUSHO: bool = false,
|
|
_24: u1 = 0,
|
|
NOKERNINFO: bool = false,
|
|
_26: u3 = 0,
|
|
PENDIN: bool = false,
|
|
_30: u1 = 0,
|
|
NOFLSH: bool = false,
|
|
},
|
|
.openbsd => packed struct(u32) {
|
|
ECHOKE: bool = false,
|
|
ECHOE: bool = false,
|
|
ECHOK: bool = false,
|
|
ECHO: bool = false,
|
|
ECHONL: bool = false,
|
|
ECHOPRT: bool = false,
|
|
ECHOCTL: bool = false,
|
|
ISIG: bool = false,
|
|
ICANON: bool = false,
|
|
ALTWERASE: bool = false,
|
|
IEXTEN: bool = false,
|
|
EXTPROC: bool = false,
|
|
_12: u10 = 0,
|
|
TOSTOP: bool = false,
|
|
FLUSHO: bool = false,
|
|
XCASE: bool = false,
|
|
NOKERNINFO: bool = false,
|
|
_26: u3 = 0,
|
|
PENDIN: bool = false,
|
|
_30: u1 = 0,
|
|
NOFLSH: bool = false,
|
|
},
|
|
.haiku => packed struct(u32) {
|
|
ISIG: bool = false,
|
|
ICANON: bool = false,
|
|
XCASE: bool = false,
|
|
ECHO: bool = false,
|
|
ECHOE: bool = false,
|
|
ECHOK: bool = false,
|
|
ECHONL: bool = false,
|
|
NOFLSH: bool = false,
|
|
TOSTOP: bool = false,
|
|
IEXTEN: bool = false,
|
|
ECHOCTL: bool = false,
|
|
ECHOPRT: bool = false,
|
|
ECHOKE: bool = false,
|
|
FLUSHO: bool = false,
|
|
PENDIN: bool = false,
|
|
_: u17 = 0,
|
|
},
|
|
.solaris, .illumos => packed struct(u32) {
|
|
ISIG: bool = false,
|
|
ICANON: bool = false,
|
|
XCASE: bool = false,
|
|
ECHO: bool = false,
|
|
ECHOE: bool = false,
|
|
ECHOK: bool = false,
|
|
ECHONL: bool = false,
|
|
NOFLSH: bool = false,
|
|
TOSTOP: bool = false,
|
|
ECHOCTL: bool = false,
|
|
ECHOPRT: bool = false,
|
|
ECHOKE: bool = false,
|
|
DEFECHO: bool = false,
|
|
FLUSHO: bool = false,
|
|
PENDIN: bool = false,
|
|
IEXTEN: bool = false,
|
|
_: u16 = 0,
|
|
},
|
|
.wasi, .emscripten => packed struct(u32) {
|
|
ISIG: bool = false,
|
|
ICANON: bool = false,
|
|
_2: u1 = 0,
|
|
ECHO: bool = false,
|
|
ECHOE: bool = false,
|
|
ECHOK: bool = false,
|
|
ECHONL: bool = false,
|
|
NOFLSH: bool = false,
|
|
TOSTOP: bool = false,
|
|
_9: u6 = 0,
|
|
IEXTEN: bool = false,
|
|
_: u16 = 0,
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
pub const speed_t = switch (native_os) {
|
|
.linux => linux.speed_t,
|
|
.macos, .ios, .tvos, .watchos, .visionos, .openbsd => enum(u64) {
|
|
B0 = 0,
|
|
B50 = 50,
|
|
B75 = 75,
|
|
B110 = 110,
|
|
B134 = 134,
|
|
B150 = 150,
|
|
B200 = 200,
|
|
B300 = 300,
|
|
B600 = 600,
|
|
B1200 = 1200,
|
|
B1800 = 1800,
|
|
B2400 = 2400,
|
|
B4800 = 4800,
|
|
B9600 = 9600,
|
|
B19200 = 19200,
|
|
B38400 = 38400,
|
|
B7200 = 7200,
|
|
B14400 = 14400,
|
|
B28800 = 28800,
|
|
B57600 = 57600,
|
|
B76800 = 76800,
|
|
B115200 = 115200,
|
|
B230400 = 230400,
|
|
},
|
|
.freebsd, .netbsd => enum(c_uint) {
|
|
B0 = 0,
|
|
B50 = 50,
|
|
B75 = 75,
|
|
B110 = 110,
|
|
B134 = 134,
|
|
B150 = 150,
|
|
B200 = 200,
|
|
B300 = 300,
|
|
B600 = 600,
|
|
B1200 = 1200,
|
|
B1800 = 1800,
|
|
B2400 = 2400,
|
|
B4800 = 4800,
|
|
B9600 = 9600,
|
|
B19200 = 19200,
|
|
B38400 = 38400,
|
|
B7200 = 7200,
|
|
B14400 = 14400,
|
|
B28800 = 28800,
|
|
B57600 = 57600,
|
|
B76800 = 76800,
|
|
B115200 = 115200,
|
|
B230400 = 230400,
|
|
B460800 = 460800,
|
|
B500000 = 500000,
|
|
B921600 = 921600,
|
|
B1000000 = 1000000,
|
|
B1500000 = 1500000,
|
|
B2000000 = 2000000,
|
|
B2500000 = 2500000,
|
|
B3000000 = 3000000,
|
|
B3500000 = 3500000,
|
|
B4000000 = 4000000,
|
|
},
|
|
.dragonfly => enum(c_uint) {
|
|
B0 = 0,
|
|
B50 = 50,
|
|
B75 = 75,
|
|
B110 = 110,
|
|
B134 = 134,
|
|
B150 = 150,
|
|
B200 = 200,
|
|
B300 = 300,
|
|
B600 = 600,
|
|
B1200 = 1200,
|
|
B1800 = 1800,
|
|
B2400 = 2400,
|
|
B4800 = 4800,
|
|
B9600 = 9600,
|
|
B19200 = 19200,
|
|
B38400 = 38400,
|
|
B7200 = 7200,
|
|
B14400 = 14400,
|
|
B28800 = 28800,
|
|
B57600 = 57600,
|
|
B76800 = 76800,
|
|
B115200 = 115200,
|
|
B230400 = 230400,
|
|
B460800 = 460800,
|
|
B921600 = 921600,
|
|
},
|
|
.haiku => enum(u8) {
|
|
B0 = 0x00,
|
|
B50 = 0x01,
|
|
B75 = 0x02,
|
|
B110 = 0x03,
|
|
B134 = 0x04,
|
|
B150 = 0x05,
|
|
B200 = 0x06,
|
|
B300 = 0x07,
|
|
B600 = 0x08,
|
|
B1200 = 0x09,
|
|
B1800 = 0x0A,
|
|
B2400 = 0x0B,
|
|
B4800 = 0x0C,
|
|
B9600 = 0x0D,
|
|
B19200 = 0x0E,
|
|
B38400 = 0x0F,
|
|
B57600 = 0x10,
|
|
B115200 = 0x11,
|
|
B230400 = 0x12,
|
|
B31250 = 0x13,
|
|
},
|
|
.solaris, .illumos => enum(c_uint) {
|
|
B0 = 0,
|
|
B50 = 1,
|
|
B75 = 2,
|
|
B110 = 3,
|
|
B134 = 4,
|
|
B150 = 5,
|
|
B200 = 6,
|
|
B300 = 7,
|
|
B600 = 8,
|
|
B1200 = 9,
|
|
B1800 = 10,
|
|
B2400 = 11,
|
|
B4800 = 12,
|
|
B9600 = 13,
|
|
B19200 = 14,
|
|
B38400 = 15,
|
|
B57600 = 16,
|
|
B76800 = 17,
|
|
B115200 = 18,
|
|
B153600 = 19,
|
|
B230400 = 20,
|
|
B307200 = 21,
|
|
B460800 = 22,
|
|
B921600 = 23,
|
|
B1000000 = 24,
|
|
B1152000 = 25,
|
|
B1500000 = 26,
|
|
B2000000 = 27,
|
|
B2500000 = 28,
|
|
B3000000 = 29,
|
|
B3500000 = 30,
|
|
B4000000 = 31,
|
|
},
|
|
.emscripten, .wasi => enum(u32) {
|
|
B0 = 0o0000000,
|
|
B50 = 0o0000001,
|
|
B75 = 0o0000002,
|
|
B110 = 0o0000003,
|
|
B134 = 0o0000004,
|
|
B150 = 0o0000005,
|
|
B200 = 0o0000006,
|
|
B300 = 0o0000007,
|
|
B600 = 0o0000010,
|
|
B1200 = 0o0000011,
|
|
B1800 = 0o0000012,
|
|
B2400 = 0o0000013,
|
|
B4800 = 0o0000014,
|
|
B9600 = 0o0000015,
|
|
B19200 = 0o0000016,
|
|
B38400 = 0o0000017,
|
|
|
|
B57600 = 0o0010001,
|
|
B115200 = 0o0010002,
|
|
B230400 = 0o0010003,
|
|
B460800 = 0o0010004,
|
|
B500000 = 0o0010005,
|
|
B576000 = 0o0010006,
|
|
B921600 = 0o0010007,
|
|
B1000000 = 0o0010010,
|
|
B1152000 = 0o0010011,
|
|
B1500000 = 0o0010012,
|
|
B2000000 = 0o0010013,
|
|
B2500000 = 0o0010014,
|
|
B3000000 = 0o0010015,
|
|
B3500000 = 0o0010016,
|
|
B4000000 = 0o0010017,
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
pub const whence_t = if (native_os == .wasi) std.os.wasi.whence_t else c_int;
|
|
|
|
pub const sig_atomic_t = c_int;
|
|
|
|
/// maximum signal number + 1
|
|
pub const NSIG = switch (native_os) {
|
|
.linux => linux.NSIG,
|
|
.windows => 23,
|
|
.haiku => 65,
|
|
.netbsd, .freebsd => 32,
|
|
.solaris, .illumos => 75,
|
|
.openbsd => 33,
|
|
else => {},
|
|
};
|
|
|
|
pub const MINSIGSTKSZ = switch (native_os) {
|
|
.macos, .ios, .tvos, .watchos, .visionos => 32768,
|
|
.freebsd => switch (builtin.cpu.arch) {
|
|
.x86, .x86_64 => 2048,
|
|
.arm, .aarch64 => 4096,
|
|
else => @compileError("unsupported arch"),
|
|
},
|
|
.solaris, .illumos => 2048,
|
|
.haiku, .netbsd => 8192,
|
|
.openbsd => 1 << openbsd.MAX_PAGE_SHIFT,
|
|
else => {},
|
|
};
|
|
pub const SIGSTKSZ = switch (native_os) {
|
|
.macos, .ios, .tvos, .watchos, .visionos => 131072,
|
|
.netbsd, .freebsd => MINSIGSTKSZ + 32768,
|
|
.solaris, .illumos => 8192,
|
|
.haiku => 16384,
|
|
.openbsd => MINSIGSTKSZ + (1 << openbsd.MAX_PAGE_SHIFT) * 4,
|
|
else => {},
|
|
};
|
|
pub const SS = switch (native_os) {
|
|
.linux => linux.SS,
|
|
.openbsd, .macos, .ios, .tvos, .watchos, .visionos, .netbsd, .freebsd => struct {
|
|
pub const ONSTACK = 1;
|
|
pub const DISABLE = 4;
|
|
},
|
|
.haiku, .solaris, .illumos => struct {
|
|
pub const ONSTACK = 0x1;
|
|
pub const DISABLE = 0x2;
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
pub const EV = switch (native_os) {
|
|
.macos, .ios, .tvos, .watchos, .visionos => struct {
|
|
/// add event to kq (implies enable)
|
|
pub const ADD = 0x0001;
|
|
/// delete event from kq
|
|
pub const DELETE = 0x0002;
|
|
/// enable event
|
|
pub const ENABLE = 0x0004;
|
|
/// disable event (not reported)
|
|
pub const DISABLE = 0x0008;
|
|
/// only report one occurrence
|
|
pub const ONESHOT = 0x0010;
|
|
/// clear event state after reporting
|
|
pub const CLEAR = 0x0020;
|
|
/// force immediate event output
|
|
/// ... with or without ERROR
|
|
/// ... use KEVENT_FLAG_ERROR_EVENTS
|
|
/// on syscalls supporting flags
|
|
pub const RECEIPT = 0x0040;
|
|
/// disable event after reporting
|
|
pub const DISPATCH = 0x0080;
|
|
/// unique kevent per udata value
|
|
pub const UDATA_SPECIFIC = 0x0100;
|
|
/// ... in combination with DELETE
|
|
/// will defer delete until udata-specific
|
|
/// event enabled. EINPROGRESS will be
|
|
/// returned to indicate the deferral
|
|
pub const DISPATCH2 = DISPATCH | UDATA_SPECIFIC;
|
|
/// report that source has vanished
|
|
/// ... only valid with DISPATCH2
|
|
pub const VANISHED = 0x0200;
|
|
/// reserved by system
|
|
pub const SYSFLAGS = 0xF000;
|
|
/// filter-specific flag
|
|
pub const FLAG0 = 0x1000;
|
|
/// filter-specific flag
|
|
pub const FLAG1 = 0x2000;
|
|
/// EOF detected
|
|
pub const EOF = 0x8000;
|
|
/// error, data contains errno
|
|
pub const ERROR = 0x4000;
|
|
pub const POLL = FLAG0;
|
|
pub const OOBAND = FLAG1;
|
|
},
|
|
.dragonfly => struct {
|
|
pub const ADD = 1;
|
|
pub const DELETE = 2;
|
|
pub const ENABLE = 4;
|
|
pub const DISABLE = 8;
|
|
pub const ONESHOT = 16;
|
|
pub const CLEAR = 32;
|
|
pub const RECEIPT = 64;
|
|
pub const DISPATCH = 128;
|
|
pub const NODATA = 4096;
|
|
pub const FLAG1 = 8192;
|
|
pub const ERROR = 16384;
|
|
pub const EOF = 32768;
|
|
pub const SYSFLAGS = 61440;
|
|
},
|
|
.netbsd => struct {
|
|
/// add event to kq (implies enable)
|
|
pub const ADD = 0x0001;
|
|
/// delete event from kq
|
|
pub const DELETE = 0x0002;
|
|
/// enable event
|
|
pub const ENABLE = 0x0004;
|
|
/// disable event (not reported)
|
|
pub const DISABLE = 0x0008;
|
|
/// only report one occurrence
|
|
pub const ONESHOT = 0x0010;
|
|
/// clear event state after reporting
|
|
pub const CLEAR = 0x0020;
|
|
/// force immediate event output
|
|
/// ... with or without ERROR
|
|
/// ... use KEVENT_FLAG_ERROR_EVENTS
|
|
/// on syscalls supporting flags
|
|
pub const RECEIPT = 0x0040;
|
|
/// disable event after reporting
|
|
pub const DISPATCH = 0x0080;
|
|
},
|
|
.freebsd => struct {
|
|
/// add event to kq (implies enable)
|
|
pub const ADD = 0x0001;
|
|
/// delete event from kq
|
|
pub const DELETE = 0x0002;
|
|
/// enable event
|
|
pub const ENABLE = 0x0004;
|
|
/// disable event (not reported)
|
|
pub const DISABLE = 0x0008;
|
|
/// only report one occurrence
|
|
pub const ONESHOT = 0x0010;
|
|
/// clear event state after reporting
|
|
pub const CLEAR = 0x0020;
|
|
/// error, event data contains errno
|
|
pub const ERROR = 0x4000;
|
|
/// force immediate event output
|
|
/// ... with or without ERROR
|
|
/// ... use KEVENT_FLAG_ERROR_EVENTS
|
|
/// on syscalls supporting flags
|
|
pub const RECEIPT = 0x0040;
|
|
/// disable event after reporting
|
|
pub const DISPATCH = 0x0080;
|
|
},
|
|
.openbsd => struct {
|
|
pub const ADD = 0x0001;
|
|
pub const DELETE = 0x0002;
|
|
pub const ENABLE = 0x0004;
|
|
pub const DISABLE = 0x0008;
|
|
pub const ONESHOT = 0x0010;
|
|
pub const CLEAR = 0x0020;
|
|
pub const RECEIPT = 0x0040;
|
|
pub const DISPATCH = 0x0080;
|
|
pub const FLAG1 = 0x2000;
|
|
pub const ERROR = 0x4000;
|
|
pub const EOF = 0x8000;
|
|
},
|
|
.haiku => struct {
|
|
/// add event to kq (implies enable)
|
|
pub const ADD = 0x0001;
|
|
/// delete event from kq
|
|
pub const DELETE = 0x0002;
|
|
/// enable event
|
|
pub const ENABLE = 0x0004;
|
|
/// disable event (not reported)
|
|
pub const DISABLE = 0x0008;
|
|
/// only report one occurrence
|
|
pub const ONESHOT = 0x0010;
|
|
/// clear event state after reporting
|
|
pub const CLEAR = 0x0020;
|
|
/// force immediate event output
|
|
/// ... with or without ERROR
|
|
/// ... use KEVENT_FLAG_ERROR_EVENTS
|
|
/// on syscalls supporting flags
|
|
pub const RECEIPT = 0x0040;
|
|
/// disable event after reporting
|
|
pub const DISPATCH = 0x0080;
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
pub const EVFILT = switch (native_os) {
|
|
.macos, .ios, .tvos, .watchos, .visionos => struct {
|
|
pub const READ = -1;
|
|
pub const WRITE = -2;
|
|
/// attached to aio requests
|
|
pub const AIO = -3;
|
|
/// attached to vnodes
|
|
pub const VNODE = -4;
|
|
/// attached to struct proc
|
|
pub const PROC = -5;
|
|
/// attached to struct proc
|
|
pub const SIGNAL = -6;
|
|
/// timers
|
|
pub const TIMER = -7;
|
|
/// Mach portsets
|
|
pub const MACHPORT = -8;
|
|
/// Filesystem events
|
|
pub const FS = -9;
|
|
/// User events
|
|
pub const USER = -10;
|
|
/// Virtual memory events
|
|
pub const VM = -12;
|
|
/// Exception events
|
|
pub const EXCEPT = -15;
|
|
pub const SYSCOUNT = 17;
|
|
},
|
|
.haiku => struct {
|
|
pub const READ = -1;
|
|
pub const WRITE = -2;
|
|
/// attached to aio requests
|
|
pub const AIO = -3;
|
|
/// attached to vnodes
|
|
pub const VNODE = -4;
|
|
/// attached to struct proc
|
|
pub const PROC = -5;
|
|
/// attached to struct proc
|
|
pub const SIGNAL = -6;
|
|
/// timers
|
|
pub const TIMER = -7;
|
|
/// Process descriptors
|
|
pub const PROCDESC = -8;
|
|
/// Filesystem events
|
|
pub const FS = -9;
|
|
pub const LIO = -10;
|
|
/// User events
|
|
pub const USER = -11;
|
|
/// Sendfile events
|
|
pub const SENDFILE = -12;
|
|
pub const EMPTY = -13;
|
|
},
|
|
.dragonfly => struct {
|
|
pub const FS = -10;
|
|
pub const USER = -9;
|
|
pub const EXCEPT = -8;
|
|
pub const TIMER = -7;
|
|
pub const SIGNAL = -6;
|
|
pub const PROC = -5;
|
|
pub const VNODE = -4;
|
|
pub const AIO = -3;
|
|
pub const WRITE = -2;
|
|
pub const READ = -1;
|
|
pub const SYSCOUNT = 10;
|
|
pub const MARKER = 15;
|
|
},
|
|
.netbsd => struct {
|
|
pub const READ = 0;
|
|
pub const WRITE = 1;
|
|
/// attached to aio requests
|
|
pub const AIO = 2;
|
|
/// attached to vnodes
|
|
pub const VNODE = 3;
|
|
/// attached to struct proc
|
|
pub const PROC = 4;
|
|
/// attached to struct proc
|
|
pub const SIGNAL = 5;
|
|
/// timers
|
|
pub const TIMER = 6;
|
|
/// Filesystem events
|
|
pub const FS = 7;
|
|
/// User events
|
|
pub const USER = 1;
|
|
},
|
|
.freebsd => struct {
|
|
pub const READ = -1;
|
|
pub const WRITE = -2;
|
|
/// attached to aio requests
|
|
pub const AIO = -3;
|
|
/// attached to vnodes
|
|
pub const VNODE = -4;
|
|
/// attached to struct proc
|
|
pub const PROC = -5;
|
|
/// attached to struct proc
|
|
pub const SIGNAL = -6;
|
|
/// timers
|
|
pub const TIMER = -7;
|
|
/// Process descriptors
|
|
pub const PROCDESC = -8;
|
|
/// Filesystem events
|
|
pub const FS = -9;
|
|
pub const LIO = -10;
|
|
/// User events
|
|
pub const USER = -11;
|
|
/// Sendfile events
|
|
pub const SENDFILE = -12;
|
|
pub const EMPTY = -13;
|
|
},
|
|
.openbsd => struct {
|
|
pub const READ = -1;
|
|
pub const WRITE = -2;
|
|
pub const AIO = -3;
|
|
pub const VNODE = -4;
|
|
pub const PROC = -5;
|
|
pub const SIGNAL = -6;
|
|
pub const TIMER = -7;
|
|
pub const EXCEPT = -9;
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
pub const NOTE = switch (native_os) {
|
|
.macos, .ios, .tvos, .watchos, .visionos => struct {
|
|
/// On input, TRIGGER causes the event to be triggered for output.
|
|
pub const TRIGGER = 0x01000000;
|
|
/// ignore input fflags
|
|
pub const FFNOP = 0x00000000;
|
|
/// and fflags
|
|
pub const FFAND = 0x40000000;
|
|
/// or fflags
|
|
pub const FFOR = 0x80000000;
|
|
/// copy fflags
|
|
pub const FFCOPY = 0xc0000000;
|
|
/// mask for operations
|
|
pub const FFCTRLMASK = 0xc0000000;
|
|
pub const FFLAGSMASK = 0x00ffffff;
|
|
/// low water mark
|
|
pub const LOWAT = 0x00000001;
|
|
/// OOB data
|
|
pub const OOB = 0x00000002;
|
|
/// vnode was removed
|
|
pub const DELETE = 0x00000001;
|
|
/// data contents changed
|
|
pub const WRITE = 0x00000002;
|
|
/// size increased
|
|
pub const EXTEND = 0x00000004;
|
|
/// attributes changed
|
|
pub const ATTRIB = 0x00000008;
|
|
/// link count changed
|
|
pub const LINK = 0x00000010;
|
|
/// vnode was renamed
|
|
pub const RENAME = 0x00000020;
|
|
/// vnode access was revoked
|
|
pub const REVOKE = 0x00000040;
|
|
/// No specific vnode event: to test for EVFILT_READ activation
|
|
pub const NONE = 0x00000080;
|
|
/// vnode was unlocked by flock(2)
|
|
pub const FUNLOCK = 0x00000100;
|
|
/// process exited
|
|
pub const EXIT = 0x80000000;
|
|
/// process forked
|
|
pub const FORK = 0x40000000;
|
|
/// process exec'd
|
|
pub const EXEC = 0x20000000;
|
|
/// shared with EVFILT_SIGNAL
|
|
pub const SIGNAL = 0x08000000;
|
|
/// exit status to be returned, valid for child process only
|
|
pub const EXITSTATUS = 0x04000000;
|
|
/// provide details on reasons for exit
|
|
pub const EXIT_DETAIL = 0x02000000;
|
|
/// mask for signal & exit status
|
|
pub const PDATAMASK = 0x000fffff;
|
|
pub const PCTRLMASK = (~PDATAMASK);
|
|
pub const EXIT_DETAIL_MASK = 0x00070000;
|
|
pub const EXIT_DECRYPTFAIL = 0x00010000;
|
|
pub const EXIT_MEMORY = 0x00020000;
|
|
pub const EXIT_CSERROR = 0x00040000;
|
|
/// will react on memory pressure
|
|
pub const VM_PRESSURE = 0x80000000;
|
|
/// will quit on memory pressure, possibly after cleaning up dirty state
|
|
pub const VM_PRESSURE_TERMINATE = 0x40000000;
|
|
/// will quit immediately on memory pressure
|
|
pub const VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000;
|
|
/// there was an error
|
|
pub const VM_ERROR = 0x10000000;
|
|
/// data is seconds
|
|
pub const SECONDS = 0x00000001;
|
|
/// data is microseconds
|
|
pub const USECONDS = 0x00000002;
|
|
/// data is nanoseconds
|
|
pub const NSECONDS = 0x00000004;
|
|
/// absolute timeout
|
|
pub const ABSOLUTE = 0x00000008;
|
|
/// ext[1] holds leeway for power aware timers
|
|
pub const LEEWAY = 0x00000010;
|
|
/// system does minimal timer coalescing
|
|
pub const CRITICAL = 0x00000020;
|
|
/// system does maximum timer coalescing
|
|
pub const BACKGROUND = 0x00000040;
|
|
pub const MACH_CONTINUOUS_TIME = 0x00000080;
|
|
/// data is mach absolute time units
|
|
pub const MACHTIME = 0x00000100;
|
|
},
|
|
.dragonfly => struct {
|
|
pub const FFNOP = 0;
|
|
pub const TRACK = 1;
|
|
pub const DELETE = 1;
|
|
pub const LOWAT = 1;
|
|
pub const TRACKERR = 2;
|
|
pub const OOB = 2;
|
|
pub const WRITE = 2;
|
|
pub const EXTEND = 4;
|
|
pub const CHILD = 4;
|
|
pub const ATTRIB = 8;
|
|
pub const LINK = 16;
|
|
pub const RENAME = 32;
|
|
pub const REVOKE = 64;
|
|
pub const PDATAMASK = 1048575;
|
|
pub const FFLAGSMASK = 16777215;
|
|
pub const TRIGGER = 16777216;
|
|
pub const EXEC = 536870912;
|
|
pub const FFAND = 1073741824;
|
|
pub const FORK = 1073741824;
|
|
pub const EXIT = 2147483648;
|
|
pub const FFOR = 2147483648;
|
|
pub const FFCTRLMASK = 3221225472;
|
|
pub const FFCOPY = 3221225472;
|
|
pub const PCTRLMASK = 4026531840;
|
|
},
|
|
.netbsd => struct {
|
|
/// On input, TRIGGER causes the event to be triggered for output.
|
|
pub const TRIGGER = 0x08000000;
|
|
/// low water mark
|
|
pub const LOWAT = 0x00000001;
|
|
/// vnode was removed
|
|
pub const DELETE = 0x00000001;
|
|
/// data contents changed
|
|
pub const WRITE = 0x00000002;
|
|
/// size increased
|
|
pub const EXTEND = 0x00000004;
|
|
/// attributes changed
|
|
pub const ATTRIB = 0x00000008;
|
|
/// link count changed
|
|
pub const LINK = 0x00000010;
|
|
/// vnode was renamed
|
|
pub const RENAME = 0x00000020;
|
|
/// vnode access was revoked
|
|
pub const REVOKE = 0x00000040;
|
|
/// process exited
|
|
pub const EXIT = 0x80000000;
|
|
/// process forked
|
|
pub const FORK = 0x40000000;
|
|
/// process exec'd
|
|
pub const EXEC = 0x20000000;
|
|
/// mask for signal & exit status
|
|
pub const PDATAMASK = 0x000fffff;
|
|
pub const PCTRLMASK = 0xf0000000;
|
|
},
|
|
.freebsd => struct {
|
|
/// On input, TRIGGER causes the event to be triggered for output.
|
|
pub const TRIGGER = 0x01000000;
|
|
/// ignore input fflags
|
|
pub const FFNOP = 0x00000000;
|
|
/// and fflags
|
|
pub const FFAND = 0x40000000;
|
|
/// or fflags
|
|
pub const FFOR = 0x80000000;
|
|
/// copy fflags
|
|
pub const FFCOPY = 0xc0000000;
|
|
/// mask for operations
|
|
pub const FFCTRLMASK = 0xc0000000;
|
|
pub const FFLAGSMASK = 0x00ffffff;
|
|
/// low water mark
|
|
pub const LOWAT = 0x00000001;
|
|
/// behave like poll()
|
|
pub const FILE_POLL = 0x00000002;
|
|
/// vnode was removed
|
|
pub const DELETE = 0x00000001;
|
|
/// data contents changed
|
|
pub const WRITE = 0x00000002;
|
|
/// size increased
|
|
pub const EXTEND = 0x00000004;
|
|
/// attributes changed
|
|
pub const ATTRIB = 0x00000008;
|
|
/// link count changed
|
|
pub const LINK = 0x00000010;
|
|
/// vnode was renamed
|
|
pub const RENAME = 0x00000020;
|
|
/// vnode access was revoked
|
|
pub const REVOKE = 0x00000040;
|
|
/// vnode was opened
|
|
pub const OPEN = 0x00000080;
|
|
/// file closed, fd did not allow write
|
|
pub const CLOSE = 0x00000100;
|
|
/// file closed, fd did allow write
|
|
pub const CLOSE_WRITE = 0x00000200;
|
|
/// file was read
|
|
pub const READ = 0x00000400;
|
|
/// process exited
|
|
pub const EXIT = 0x80000000;
|
|
/// process forked
|
|
pub const FORK = 0x40000000;
|
|
/// process exec'd
|
|
pub const EXEC = 0x20000000;
|
|
/// mask for signal & exit status
|
|
pub const PDATAMASK = 0x000fffff;
|
|
pub const PCTRLMASK = (~PDATAMASK);
|
|
/// data is seconds
|
|
pub const SECONDS = 0x00000001;
|
|
/// data is milliseconds
|
|
pub const MSECONDS = 0x00000002;
|
|
/// data is microseconds
|
|
pub const USECONDS = 0x00000004;
|
|
/// data is nanoseconds
|
|
pub const NSECONDS = 0x00000008;
|
|
/// timeout is absolute
|
|
pub const ABSTIME = 0x00000010;
|
|
},
|
|
.openbsd => struct {
|
|
// data/hint flags for EVFILT.{READ|WRITE}
|
|
pub const LOWAT = 0x0001;
|
|
pub const EOF = 0x0002;
|
|
// data/hint flags for EVFILT.EXCEPT and EVFILT.{READ|WRITE}
|
|
pub const OOB = 0x0004;
|
|
// data/hint flags for EVFILT.VNODE
|
|
pub const DELETE = 0x0001;
|
|
pub const WRITE = 0x0002;
|
|
pub const EXTEND = 0x0004;
|
|
pub const ATTRIB = 0x0008;
|
|
pub const LINK = 0x0010;
|
|
pub const RENAME = 0x0020;
|
|
pub const REVOKE = 0x0040;
|
|
pub const TRUNCATE = 0x0080;
|
|
// data/hint flags for EVFILT.PROC
|
|
pub const EXIT = 0x80000000;
|
|
pub const FORK = 0x40000000;
|
|
pub const EXEC = 0x20000000;
|
|
pub const PDATAMASK = 0x000fffff;
|
|
pub const PCTRLMASK = 0xf0000000;
|
|
pub const TRACK = 0x00000001;
|
|
pub const TRACKERR = 0x00000002;
|
|
pub const CHILD = 0x00000004;
|
|
// data/hint flags for EVFILT.DEVICE
|
|
pub const CHANGE = 0x00000001;
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
// Unix-like systems
|
|
pub const DIR = opaque {};
|
|
pub extern "c" fn opendir(pathname: [*:0]const u8) ?*DIR;
|
|
pub extern "c" fn fdopendir(fd: c_int) ?*DIR;
|
|
pub extern "c" fn rewinddir(dp: *DIR) void;
|
|
pub extern "c" fn closedir(dp: *DIR) c_int;
|
|
pub extern "c" fn telldir(dp: *DIR) c_long;
|
|
pub extern "c" fn seekdir(dp: *DIR, loc: c_long) void;
|
|
|
|
pub extern "c" fn sigwait(set: ?*sigset_t, sig: ?*c_int) c_int;
|
|
|
|
pub extern "c" fn alarm(seconds: c_uint) c_uint;
|
|
|
|
pub const close = switch (native_os) {
|
|
.macos, .ios, .tvos, .watchos, .visionos => darwin.@"close$NOCANCEL",
|
|
else => private.close,
|
|
};
|
|
|
|
pub const clock_getres = switch (native_os) {
|
|
.netbsd => private.__clock_getres50,
|
|
else => private.clock_getres,
|
|
};
|
|
|
|
pub const clock_gettime = switch (native_os) {
|
|
.netbsd => private.__clock_gettime50,
|
|
else => private.clock_gettime,
|
|
};
|
|
|
|
pub const fstat = switch (native_os) {
|
|
.macos => switch (native_arch) {
|
|
.x86_64 => private.@"fstat$INODE64",
|
|
else => private.fstat,
|
|
},
|
|
.netbsd => private.__fstat50,
|
|
else => private.fstat,
|
|
};
|
|
|
|
pub const fstatat = switch (native_os) {
|
|
.macos => switch (native_arch) {
|
|
.x86_64 => private.@"fstatat$INODE64",
|
|
else => private.fstatat,
|
|
},
|
|
else => private.fstatat,
|
|
};
|
|
|
|
pub extern "c" fn getpwnam(name: [*:0]const u8) ?*passwd;
|
|
pub extern "c" fn getpwuid(uid: uid_t) ?*passwd;
|
|
pub extern "c" fn getrlimit64(resource: rlimit_resource, rlim: *rlimit) c_int;
|
|
pub extern "c" fn lseek64(fd: fd_t, offset: i64, whence: c_int) i64;
|
|
pub extern "c" fn mmap64(addr: ?*align(std.mem.page_size) anyopaque, len: usize, prot: c_uint, flags: c_uint, fd: fd_t, offset: i64) *anyopaque;
|
|
pub extern "c" fn open64(path: [*:0]const u8, oflag: O, ...) c_int;
|
|
pub extern "c" fn openat64(fd: c_int, path: [*:0]const u8, oflag: O, ...) c_int;
|
|
pub extern "c" fn pread64(fd: fd_t, buf: [*]u8, nbyte: usize, offset: i64) isize;
|
|
pub extern "c" fn preadv64(fd: c_int, iov: [*]const iovec, iovcnt: c_uint, offset: i64) isize;
|
|
pub extern "c" fn pwrite64(fd: fd_t, buf: [*]const u8, nbyte: usize, offset: i64) isize;
|
|
pub extern "c" fn pwritev64(fd: c_int, iov: [*]const iovec_const, iovcnt: c_uint, offset: i64) isize;
|
|
pub extern "c" fn sendfile64(out_fd: fd_t, in_fd: fd_t, offset: ?*i64, count: usize) isize;
|
|
pub extern "c" fn setrlimit64(resource: rlimit_resource, rlim: *const rlimit) c_int;
|
|
|
|
pub const arc4random_buf = switch (native_os) {
|
|
.dragonfly, .netbsd, .freebsd, .solaris, .openbsd, .macos, .ios, .tvos, .watchos, .visionos => private.arc4random_buf,
|
|
else => {},
|
|
};
|
|
pub const getentropy = switch (native_os) {
|
|
.emscripten => private.getentropy,
|
|
else => {},
|
|
};
|
|
pub const getrandom = switch (native_os) {
|
|
.freebsd => private.getrandom,
|
|
.linux => if (versionCheck(.{ .major = 2, .minor = 25, .patch = 0 })) private.getrandom else {},
|
|
else => {},
|
|
};
|
|
|
|
pub extern "c" fn sched_getaffinity(pid: c_int, size: usize, set: *cpu_set_t) c_int;
|
|
pub extern "c" fn eventfd(initval: c_uint, flags: c_uint) c_int;
|
|
|
|
pub extern "c" fn epoll_ctl(epfd: fd_t, op: c_uint, fd: fd_t, event: ?*epoll_event) c_int;
|
|
pub extern "c" fn epoll_create1(flags: c_uint) c_int;
|
|
pub extern "c" fn epoll_wait(epfd: fd_t, events: [*]epoll_event, maxevents: c_uint, timeout: c_int) c_int;
|
|
pub extern "c" fn epoll_pwait(
|
|
epfd: fd_t,
|
|
events: [*]epoll_event,
|
|
maxevents: c_int,
|
|
timeout: c_int,
|
|
sigmask: *const sigset_t,
|
|
) c_int;
|
|
|
|
pub extern "c" fn timerfd_create(clockid: clockid_t, flags: c_int) c_int;
|
|
pub extern "c" fn timerfd_settime(
|
|
fd: c_int,
|
|
flags: c_int,
|
|
new_value: *const itimerspec,
|
|
old_value: ?*itimerspec,
|
|
) c_int;
|
|
pub extern "c" fn timerfd_gettime(fd: c_int, curr_value: *itimerspec) c_int;
|
|
|
|
pub extern "c" fn inotify_init1(flags: c_uint) c_int;
|
|
pub extern "c" fn inotify_add_watch(fd: fd_t, pathname: [*:0]const u8, mask: u32) c_int;
|
|
pub extern "c" fn inotify_rm_watch(fd: fd_t, wd: c_int) c_int;
|
|
|
|
pub extern "c" fn fstat64(fd: fd_t, buf: *Stat) c_int;
|
|
pub extern "c" fn fstatat64(dirfd: fd_t, noalias path: [*:0]const u8, noalias stat_buf: *Stat, flags: u32) c_int;
|
|
pub extern "c" fn fallocate64(fd: fd_t, mode: c_int, offset: off_t, len: off_t) c_int;
|
|
pub extern "c" fn fopen64(noalias filename: [*:0]const u8, noalias modes: [*:0]const u8) ?*FILE;
|
|
pub extern "c" fn ftruncate64(fd: c_int, length: off_t) c_int;
|
|
pub extern "c" fn fallocate(fd: fd_t, mode: c_int, offset: off_t, len: off_t) c_int;
|
|
pub const sendfile = switch (native_os) {
|
|
.freebsd => freebsd.sendfile,
|
|
.macos, .ios, .tvos, .watchos, .visionos => darwin.sendfile,
|
|
.linux => private.sendfile,
|
|
else => {},
|
|
};
|
|
/// See std.elf for constants for this
|
|
pub extern "c" fn getauxval(__type: c_ulong) c_ulong;
|
|
|
|
pub extern "c" fn dl_iterate_phdr(callback: dl_iterate_phdr_callback, data: ?*anyopaque) c_int;
|
|
|
|
pub const sigaltstack = switch (native_os) {
|
|
.netbsd => private.__sigaltstack14,
|
|
else => private.sigaltstack,
|
|
};
|
|
|
|
pub extern "c" fn memfd_create(name: [*:0]const u8, flags: c_uint) c_int;
|
|
pub const pipe2 = switch (native_os) {
|
|
.dragonfly, .emscripten, .netbsd, .freebsd, .solaris, .illumos, .openbsd, .linux => private.pipe2,
|
|
else => {},
|
|
};
|
|
pub const copy_file_range = switch (native_os) {
|
|
.linux => private.copy_file_range,
|
|
.freebsd => freebsd.copy_file_range,
|
|
else => {},
|
|
};
|
|
|
|
pub extern "c" fn signalfd(fd: fd_t, mask: *const sigset_t, flags: u32) c_int;
|
|
|
|
pub extern "c" fn prlimit(pid: pid_t, resource: rlimit_resource, new_limit: *const rlimit, old_limit: *rlimit) c_int;
|
|
pub extern "c" fn mincore(
|
|
addr: *align(std.mem.page_size) anyopaque,
|
|
length: usize,
|
|
vec: [*]u8,
|
|
) c_int;
|
|
|
|
pub extern "c" fn madvise(
|
|
addr: *align(std.mem.page_size) anyopaque,
|
|
length: usize,
|
|
advice: u32,
|
|
) c_int;
|
|
|
|
pub const getdirentries = switch (native_os) {
|
|
.macos, .ios, .tvos, .watchos, .visionos => private.__getdirentries64,
|
|
else => private.getdirentries,
|
|
};
|
|
|
|
pub const getdents = switch (native_os) {
|
|
.netbsd => private.__getdents30,
|
|
else => private.getdents,
|
|
};
|
|
|
|
pub const getrusage = switch (native_os) {
|
|
.netbsd => private.__getrusage50,
|
|
else => private.getrusage,
|
|
};
|
|
|
|
pub const gettimeofday = switch (native_os) {
|
|
.netbsd => private.__gettimeofday50,
|
|
else => private.gettimeofday,
|
|
};
|
|
|
|
pub const msync = switch (native_os) {
|
|
.netbsd => private.__msync13,
|
|
else => private.msync,
|
|
};
|
|
|
|
pub const nanosleep = switch (native_os) {
|
|
.netbsd => private.__nanosleep50,
|
|
else => private.nanosleep,
|
|
};
|
|
|
|
pub const readdir = switch (native_os) {
|
|
.macos => switch (native_arch) {
|
|
.x86_64 => private.@"readdir$INODE64",
|
|
else => private.readdir,
|
|
},
|
|
.windows => {},
|
|
else => private.readdir,
|
|
};
|
|
|
|
pub const realpath = switch (native_os) {
|
|
.macos, .ios, .tvos, .watchos, .visionos => private.@"realpath$DARWIN_EXTSN",
|
|
else => private.realpath,
|
|
};
|
|
|
|
pub const sched_yield = switch (native_os) {
|
|
.netbsd => private.__libc_thr_yield,
|
|
else => private.sched_yield,
|
|
};
|
|
|
|
pub const sigaction = switch (native_os) {
|
|
.netbsd => private.__sigaction14,
|
|
else => private.sigaction,
|
|
};
|
|
|
|
pub const sigfillset = switch (native_os) {
|
|
.netbsd => private.__sigfillset14,
|
|
else => private.sigfillset,
|
|
};
|
|
|
|
pub const sigprocmask = switch (native_os) {
|
|
.netbsd => private.__sigprocmask14,
|
|
else => private.sigprocmask,
|
|
};
|
|
|
|
pub const socket = switch (native_os) {
|
|
.netbsd => private.__socket30,
|
|
else => private.socket,
|
|
};
|
|
|
|
pub const stat = switch (native_os) {
|
|
.macos => switch (native_arch) {
|
|
.x86_64 => private.@"stat$INODE64",
|
|
else => private.stat,
|
|
},
|
|
else => private.stat,
|
|
};
|
|
|
|
pub const _msize = switch (native_os) {
|
|
.windows => private._msize,
|
|
else => {},
|
|
};
|
|
pub const malloc_size = switch (native_os) {
|
|
.macos, .ios, .tvos, .watchos, .visionos => private.malloc_size,
|
|
else => {},
|
|
};
|
|
pub const malloc_usable_size = switch (native_os) {
|
|
.freebsd, .linux => private.malloc_usable_size,
|
|
else => {},
|
|
};
|
|
pub const posix_memalign = switch (native_os) {
|
|
.dragonfly, .netbsd, .freebsd, .solaris, .openbsd, .linux, .macos, .ios, .tvos, .watchos, .visionos => private.posix_memalign,
|
|
else => {},
|
|
};
|
|
|
|
pub const sf_hdtr = switch (native_os) {
|
|
.freebsd, .macos, .ios, .tvos, .watchos, .visionos => extern struct {
|
|
headers: [*]const iovec_const,
|
|
hdr_cnt: c_int,
|
|
trailers: [*]const iovec_const,
|
|
trl_cnt: c_int,
|
|
},
|
|
else => void,
|
|
};
|
|
|
|
pub const flock = switch (native_os) {
|
|
.windows, .wasi => {},
|
|
else => private.flock,
|
|
};
|
|
|
|
pub extern "c" var environ: [*:null]?[*:0]u8;
|
|
|
|
pub extern "c" fn fopen(noalias filename: [*:0]const u8, noalias modes: [*:0]const u8) ?*FILE;
|
|
pub extern "c" fn fclose(stream: *FILE) c_int;
|
|
pub extern "c" fn fwrite(noalias ptr: [*]const u8, size_of_type: usize, item_count: usize, noalias stream: *FILE) usize;
|
|
pub extern "c" fn fread(noalias ptr: [*]u8, size_of_type: usize, item_count: usize, noalias stream: *FILE) usize;
|
|
|
|
pub extern "c" fn printf(format: [*:0]const u8, ...) c_int;
|
|
pub extern "c" fn abort() noreturn;
|
|
pub extern "c" fn exit(code: c_int) noreturn;
|
|
pub extern "c" fn _exit(code: c_int) noreturn;
|
|
pub extern "c" fn isatty(fd: fd_t) c_int;
|
|
pub extern "c" fn lseek(fd: fd_t, offset: off_t, whence: whence_t) off_t;
|
|
pub extern "c" fn open(path: [*:0]const u8, oflag: O, ...) c_int;
|
|
pub extern "c" fn openat(fd: c_int, path: [*:0]const u8, oflag: O, ...) c_int;
|
|
pub extern "c" fn ftruncate(fd: c_int, length: off_t) c_int;
|
|
pub extern "c" fn raise(sig: c_int) c_int;
|
|
pub extern "c" fn read(fd: fd_t, buf: [*]u8, nbyte: usize) isize;
|
|
pub extern "c" fn readv(fd: c_int, iov: [*]const iovec, iovcnt: c_uint) isize;
|
|
pub extern "c" fn pread(fd: fd_t, buf: [*]u8, nbyte: usize, offset: off_t) isize;
|
|
pub extern "c" fn preadv(fd: c_int, iov: [*]const iovec, iovcnt: c_uint, offset: off_t) isize;
|
|
pub extern "c" fn writev(fd: c_int, iov: [*]const iovec_const, iovcnt: c_uint) isize;
|
|
pub extern "c" fn pwritev(fd: c_int, iov: [*]const iovec_const, iovcnt: c_uint, offset: off_t) isize;
|
|
pub extern "c" fn write(fd: fd_t, buf: [*]const u8, nbyte: usize) isize;
|
|
pub extern "c" fn pwrite(fd: fd_t, buf: [*]const u8, nbyte: usize, offset: off_t) isize;
|
|
pub extern "c" fn mmap(addr: ?*align(page_size) anyopaque, len: usize, prot: c_uint, flags: MAP, fd: fd_t, offset: off_t) *anyopaque;
|
|
pub extern "c" fn munmap(addr: *align(page_size) const anyopaque, len: usize) c_int;
|
|
pub extern "c" fn mprotect(addr: *align(page_size) anyopaque, len: usize, prot: c_uint) c_int;
|
|
pub extern "c" fn link(oldpath: [*:0]const u8, newpath: [*:0]const u8, flags: c_int) c_int;
|
|
pub extern "c" fn linkat(oldfd: fd_t, oldpath: [*:0]const u8, newfd: fd_t, newpath: [*:0]const u8, flags: c_int) c_int;
|
|
pub extern "c" fn unlink(path: [*:0]const u8) c_int;
|
|
pub extern "c" fn unlinkat(dirfd: fd_t, path: [*:0]const u8, flags: c_uint) c_int;
|
|
pub extern "c" fn getcwd(buf: [*]u8, size: usize) ?[*]u8;
|
|
pub extern "c" fn waitpid(pid: pid_t, status: ?*c_int, options: c_int) pid_t;
|
|
pub extern "c" fn wait4(pid: pid_t, status: ?*c_int, options: c_int, ru: ?*rusage) pid_t;
|
|
pub const fork = switch (native_os) {
|
|
.dragonfly,
|
|
.freebsd,
|
|
.ios,
|
|
.linux,
|
|
.macos,
|
|
.netbsd,
|
|
.openbsd,
|
|
.solaris,
|
|
.illumos,
|
|
.tvos,
|
|
.watchos,
|
|
.visionos,
|
|
.haiku,
|
|
=> private.fork,
|
|
else => {},
|
|
};
|
|
pub extern "c" fn access(path: [*:0]const u8, mode: c_uint) c_int;
|
|
pub extern "c" fn faccessat(dirfd: fd_t, path: [*:0]const u8, mode: c_uint, flags: c_uint) c_int;
|
|
pub extern "c" fn pipe(fds: *[2]fd_t) c_int;
|
|
pub extern "c" fn mkdir(path: [*:0]const u8, mode: c_uint) c_int;
|
|
pub extern "c" fn mkdirat(dirfd: fd_t, path: [*:0]const u8, mode: u32) c_int;
|
|
pub extern "c" fn symlink(existing: [*:0]const u8, new: [*:0]const u8) c_int;
|
|
pub extern "c" fn symlinkat(oldpath: [*:0]const u8, newdirfd: fd_t, newpath: [*:0]const u8) c_int;
|
|
pub extern "c" fn rename(old: [*:0]const u8, new: [*:0]const u8) c_int;
|
|
pub extern "c" fn renameat(olddirfd: fd_t, old: [*:0]const u8, newdirfd: fd_t, new: [*:0]const u8) c_int;
|
|
pub extern "c" fn chdir(path: [*:0]const u8) c_int;
|
|
pub extern "c" fn fchdir(fd: fd_t) c_int;
|
|
pub extern "c" fn execve(path: [*:0]const u8, argv: [*:null]const ?[*:0]const u8, envp: [*:null]const ?[*:0]const u8) c_int;
|
|
pub extern "c" fn dup(fd: fd_t) c_int;
|
|
pub extern "c" fn dup2(old_fd: fd_t, new_fd: fd_t) c_int;
|
|
pub extern "c" fn dup3(old: c_int, new: c_int, flags: c_uint) c_int;
|
|
pub extern "c" fn readlink(noalias path: [*:0]const u8, noalias buf: [*]u8, bufsize: usize) isize;
|
|
pub extern "c" fn readlinkat(dirfd: fd_t, noalias path: [*:0]const u8, noalias buf: [*]u8, bufsize: usize) isize;
|
|
pub extern "c" fn chmod(path: [*:0]const u8, mode: mode_t) c_int;
|
|
pub extern "c" fn fchmod(fd: fd_t, mode: mode_t) c_int;
|
|
pub extern "c" fn fchmodat(fd: fd_t, path: [*:0]const u8, mode: mode_t, flags: c_uint) c_int;
|
|
pub extern "c" fn fchown(fd: fd_t, owner: uid_t, group: gid_t) c_int;
|
|
pub extern "c" fn umask(mode: mode_t) mode_t;
|
|
|
|
pub extern "c" fn rmdir(path: [*:0]const u8) c_int;
|
|
pub extern "c" fn getenv(name: [*:0]const u8) ?[*:0]u8;
|
|
pub extern "c" fn sysctl(name: [*]const c_int, namelen: c_uint, oldp: ?*anyopaque, oldlenp: ?*usize, newp: ?*anyopaque, newlen: usize) c_int;
|
|
pub extern "c" fn sysctlbyname(name: [*:0]const u8, oldp: ?*anyopaque, oldlenp: ?*usize, newp: ?*anyopaque, newlen: usize) c_int;
|
|
pub extern "c" fn sysctlnametomib(name: [*:0]const u8, mibp: ?*c_int, sizep: ?*usize) c_int;
|
|
pub extern "c" fn tcgetattr(fd: fd_t, termios_p: *termios) c_int;
|
|
pub extern "c" fn tcsetattr(fd: fd_t, optional_action: TCSA, termios_p: *const termios) c_int;
|
|
pub extern "c" fn fcntl(fd: fd_t, cmd: c_int, ...) c_int;
|
|
pub extern "c" fn ioctl(fd: fd_t, request: c_int, ...) c_int;
|
|
pub extern "c" fn uname(buf: *utsname) c_int;
|
|
|
|
pub extern "c" fn gethostname(name: [*]u8, len: usize) c_int;
|
|
pub extern "c" fn shutdown(socket: fd_t, how: c_int) c_int;
|
|
pub extern "c" fn bind(socket: fd_t, address: ?*const sockaddr, address_len: socklen_t) c_int;
|
|
pub extern "c" fn socketpair(domain: c_uint, sock_type: c_uint, protocol: c_uint, sv: *[2]fd_t) c_int;
|
|
pub extern "c" fn listen(sockfd: fd_t, backlog: c_uint) c_int;
|
|
pub extern "c" fn getsockname(sockfd: fd_t, noalias addr: *sockaddr, noalias addrlen: *socklen_t) c_int;
|
|
pub extern "c" fn getpeername(sockfd: fd_t, noalias addr: *sockaddr, noalias addrlen: *socklen_t) c_int;
|
|
pub extern "c" fn connect(sockfd: fd_t, sock_addr: *const sockaddr, addrlen: socklen_t) c_int;
|
|
pub extern "c" fn accept(sockfd: fd_t, noalias addr: ?*sockaddr, noalias addrlen: ?*socklen_t) c_int;
|
|
pub extern "c" fn accept4(sockfd: fd_t, noalias addr: ?*sockaddr, noalias addrlen: ?*socklen_t, flags: c_uint) c_int;
|
|
pub extern "c" fn getsockopt(sockfd: fd_t, level: i32, optname: u32, noalias optval: ?*anyopaque, noalias optlen: *socklen_t) c_int;
|
|
pub extern "c" fn setsockopt(sockfd: fd_t, level: i32, optname: u32, optval: ?*const anyopaque, optlen: socklen_t) c_int;
|
|
pub extern "c" fn send(sockfd: fd_t, buf: *const anyopaque, len: usize, flags: u32) isize;
|
|
pub extern "c" fn sendto(
|
|
sockfd: fd_t,
|
|
buf: *const anyopaque,
|
|
len: usize,
|
|
flags: u32,
|
|
dest_addr: ?*const sockaddr,
|
|
addrlen: socklen_t,
|
|
) isize;
|
|
pub extern "c" fn sendmsg(sockfd: fd_t, msg: *const msghdr_const, flags: u32) isize;
|
|
|
|
pub extern "c" fn recv(
|
|
sockfd: fd_t,
|
|
arg1: ?*anyopaque,
|
|
arg2: usize,
|
|
arg3: c_int,
|
|
) if (native_os == .windows) c_int else isize;
|
|
pub extern "c" fn recvfrom(
|
|
sockfd: fd_t,
|
|
noalias buf: *anyopaque,
|
|
len: usize,
|
|
flags: u32,
|
|
noalias src_addr: ?*sockaddr,
|
|
noalias addrlen: ?*socklen_t,
|
|
) if (native_os == .windows) c_int else isize;
|
|
pub extern "c" fn recvmsg(sockfd: fd_t, msg: *msghdr, flags: u32) isize;
|
|
|
|
pub extern "c" fn kill(pid: pid_t, sig: c_int) c_int;
|
|
|
|
pub extern "c" fn setuid(uid: uid_t) c_int;
|
|
pub extern "c" fn setgid(gid: gid_t) c_int;
|
|
pub extern "c" fn seteuid(euid: uid_t) c_int;
|
|
pub extern "c" fn setegid(egid: gid_t) c_int;
|
|
pub extern "c" fn setreuid(ruid: uid_t, euid: uid_t) c_int;
|
|
pub extern "c" fn setregid(rgid: gid_t, egid: gid_t) c_int;
|
|
pub extern "c" fn setresuid(ruid: uid_t, euid: uid_t, suid: uid_t) c_int;
|
|
pub extern "c" fn setresgid(rgid: gid_t, egid: gid_t, sgid: gid_t) c_int;
|
|
|
|
pub extern "c" fn malloc(usize) ?*anyopaque;
|
|
pub extern "c" fn realloc(?*anyopaque, usize) ?*anyopaque;
|
|
pub extern "c" fn free(?*anyopaque) void;
|
|
|
|
pub extern "c" fn futimes(fd: fd_t, times: *[2]timeval) c_int;
|
|
pub extern "c" fn utimes(path: [*:0]const u8, times: *[2]timeval) c_int;
|
|
|
|
pub extern "c" fn utimensat(dirfd: fd_t, pathname: [*:0]const u8, times: *[2]timespec, flags: u32) c_int;
|
|
pub extern "c" fn futimens(fd: fd_t, times: *const [2]timespec) c_int;
|
|
|
|
pub extern "c" fn pthread_create(
|
|
noalias newthread: *pthread_t,
|
|
noalias attr: ?*const pthread_attr_t,
|
|
start_routine: *const fn (?*anyopaque) callconv(.C) ?*anyopaque,
|
|
noalias arg: ?*anyopaque,
|
|
) E;
|
|
pub extern "c" fn pthread_attr_init(attr: *pthread_attr_t) E;
|
|
pub extern "c" fn pthread_attr_setstack(attr: *pthread_attr_t, stackaddr: *anyopaque, stacksize: usize) E;
|
|
pub extern "c" fn pthread_attr_setstacksize(attr: *pthread_attr_t, stacksize: usize) E;
|
|
pub extern "c" fn pthread_attr_setguardsize(attr: *pthread_attr_t, guardsize: usize) E;
|
|
pub extern "c" fn pthread_attr_destroy(attr: *pthread_attr_t) E;
|
|
pub extern "c" fn pthread_self() pthread_t;
|
|
pub extern "c" fn pthread_join(thread: pthread_t, arg_return: ?*?*anyopaque) E;
|
|
pub extern "c" fn pthread_detach(thread: pthread_t) E;
|
|
pub extern "c" fn pthread_atfork(
|
|
prepare: ?*const fn () callconv(.C) void,
|
|
parent: ?*const fn () callconv(.C) void,
|
|
child: ?*const fn () callconv(.C) void,
|
|
) c_int;
|
|
pub extern "c" fn pthread_key_create(
|
|
key: *pthread_key_t,
|
|
destructor: ?*const fn (value: *anyopaque) callconv(.C) void,
|
|
) E;
|
|
pub extern "c" fn pthread_key_delete(key: pthread_key_t) E;
|
|
pub extern "c" fn pthread_getspecific(key: pthread_key_t) ?*anyopaque;
|
|
pub extern "c" fn pthread_setspecific(key: pthread_key_t, value: ?*anyopaque) c_int;
|
|
pub extern "c" fn pthread_sigmask(how: c_int, set: *const sigset_t, oldset: *sigset_t) c_int;
|
|
pub const pthread_setname_np = switch (native_os) {
|
|
.macos, .ios, .tvos, .watchos, .visionos => darwin.pthread_setname_np,
|
|
.solaris, .illumos => solaris.pthread_setname_np,
|
|
.netbsd => netbsd.pthread_setname_np,
|
|
else => private.pthread_setname_np,
|
|
};
|
|
|
|
pub extern "c" fn pthread_getname_np(thread: pthread_t, name: [*:0]u8, len: usize) c_int;
|
|
pub const pthread_threadid_np = switch (native_os) {
|
|
.macos, .ios, .tvos, .watchos, .visionos => private.pthread_threadid_np,
|
|
else => {},
|
|
};
|
|
|
|
pub extern "c" fn sem_init(sem: *sem_t, pshared: c_int, value: c_uint) c_int;
|
|
pub extern "c" fn sem_destroy(sem: *sem_t) c_int;
|
|
pub extern "c" fn sem_open(name: [*:0]const u8, flag: c_int, mode: mode_t, value: c_uint) *sem_t;
|
|
pub extern "c" fn sem_close(sem: *sem_t) c_int;
|
|
pub extern "c" fn sem_post(sem: *sem_t) c_int;
|
|
pub extern "c" fn sem_wait(sem: *sem_t) c_int;
|
|
pub extern "c" fn sem_trywait(sem: *sem_t) c_int;
|
|
pub extern "c" fn sem_timedwait(sem: *sem_t, abs_timeout: *const timespec) c_int;
|
|
pub extern "c" fn sem_getvalue(sem: *sem_t, sval: *c_int) c_int;
|
|
|
|
pub extern "c" fn shm_open(name: [*:0]const u8, flag: c_int, mode: mode_t) c_int;
|
|
pub extern "c" fn shm_unlink(name: [*:0]const u8) c_int;
|
|
|
|
pub extern "c" fn kqueue() c_int;
|
|
pub extern "c" fn kevent(
|
|
kq: c_int,
|
|
changelist: [*]const Kevent,
|
|
nchanges: c_int,
|
|
eventlist: [*]Kevent,
|
|
nevents: c_int,
|
|
timeout: ?*const timespec,
|
|
) c_int;
|
|
|
|
pub extern "c" fn port_create() port_t;
|
|
pub extern "c" fn port_associate(
|
|
port: port_t,
|
|
source: u32,
|
|
object: usize,
|
|
events: u32,
|
|
user_var: ?*anyopaque,
|
|
) c_int;
|
|
pub extern "c" fn port_dissociate(port: port_t, source: u32, object: usize) c_int;
|
|
pub extern "c" fn port_send(port: port_t, events: u32, user_var: ?*anyopaque) c_int;
|
|
pub extern "c" fn port_sendn(
|
|
ports: [*]port_t,
|
|
errors: []u32,
|
|
num_ports: u32,
|
|
events: u32,
|
|
user_var: ?*anyopaque,
|
|
) c_int;
|
|
pub extern "c" fn port_get(port: port_t, event: *port_event, timeout: ?*timespec) c_int;
|
|
pub extern "c" fn port_getn(
|
|
port: port_t,
|
|
event_list: []port_event,
|
|
max_events: u32,
|
|
events_retrieved: *u32,
|
|
timeout: ?*timespec,
|
|
) c_int;
|
|
pub extern "c" fn port_alert(port: port_t, flags: u32, events: u32, user_var: ?*anyopaque) c_int;
|
|
|
|
pub extern "c" fn getaddrinfo(
|
|
noalias node: ?[*:0]const u8,
|
|
noalias service: ?[*:0]const u8,
|
|
noalias hints: ?*const addrinfo,
|
|
/// On Linux, `res` will not be modified on error and `freeaddrinfo` will
|
|
/// potentially crash if you pass it an undefined pointer
|
|
noalias res: *?*addrinfo,
|
|
) EAI;
|
|
|
|
pub extern "c" fn freeaddrinfo(res: *addrinfo) void;
|
|
|
|
pub extern "c" fn getnameinfo(
|
|
noalias addr: *const sockaddr,
|
|
addrlen: socklen_t,
|
|
noalias host: [*]u8,
|
|
hostlen: socklen_t,
|
|
noalias serv: [*]u8,
|
|
servlen: socklen_t,
|
|
flags: u32,
|
|
) EAI;
|
|
|
|
pub extern "c" fn gai_strerror(errcode: EAI) [*:0]const u8;
|
|
|
|
pub extern "c" fn poll(fds: [*]pollfd, nfds: nfds_t, timeout: c_int) c_int;
|
|
pub extern "c" fn ppoll(fds: [*]pollfd, nfds: nfds_t, timeout: ?*const timespec, sigmask: ?*const sigset_t) c_int;
|
|
|
|
pub extern "c" fn dn_expand(
|
|
msg: [*:0]const u8,
|
|
eomorig: [*:0]const u8,
|
|
comp_dn: [*:0]const u8,
|
|
exp_dn: [*:0]u8,
|
|
length: c_int,
|
|
) c_int;
|
|
|
|
pub const PTHREAD_MUTEX_INITIALIZER = pthread_mutex_t{};
|
|
pub extern "c" fn pthread_mutex_lock(mutex: *pthread_mutex_t) E;
|
|
pub extern "c" fn pthread_mutex_unlock(mutex: *pthread_mutex_t) E;
|
|
pub extern "c" fn pthread_mutex_trylock(mutex: *pthread_mutex_t) E;
|
|
pub extern "c" fn pthread_mutex_destroy(mutex: *pthread_mutex_t) E;
|
|
|
|
pub const PTHREAD_COND_INITIALIZER = pthread_cond_t{};
|
|
pub extern "c" fn pthread_cond_wait(noalias cond: *pthread_cond_t, noalias mutex: *pthread_mutex_t) E;
|
|
pub extern "c" fn pthread_cond_timedwait(noalias cond: *pthread_cond_t, noalias mutex: *pthread_mutex_t, noalias abstime: *const timespec) E;
|
|
pub extern "c" fn pthread_cond_signal(cond: *pthread_cond_t) E;
|
|
pub extern "c" fn pthread_cond_broadcast(cond: *pthread_cond_t) E;
|
|
pub extern "c" fn pthread_cond_destroy(cond: *pthread_cond_t) E;
|
|
|
|
pub extern "c" fn pthread_rwlock_destroy(rwl: *pthread_rwlock_t) callconv(.C) E;
|
|
pub extern "c" fn pthread_rwlock_rdlock(rwl: *pthread_rwlock_t) callconv(.C) E;
|
|
pub extern "c" fn pthread_rwlock_wrlock(rwl: *pthread_rwlock_t) callconv(.C) E;
|
|
pub extern "c" fn pthread_rwlock_tryrdlock(rwl: *pthread_rwlock_t) callconv(.C) E;
|
|
pub extern "c" fn pthread_rwlock_trywrlock(rwl: *pthread_rwlock_t) callconv(.C) E;
|
|
pub extern "c" fn pthread_rwlock_unlock(rwl: *pthread_rwlock_t) callconv(.C) E;
|
|
|
|
pub const pthread_t = *opaque {};
|
|
pub const FILE = opaque {};
|
|
|
|
pub extern "c" fn dlopen(path: [*:0]const u8, mode: RTLD) ?*anyopaque;
|
|
pub extern "c" fn dlclose(handle: *anyopaque) c_int;
|
|
pub extern "c" fn dlsym(handle: ?*anyopaque, symbol: [*:0]const u8) ?*anyopaque;
|
|
pub extern "c" fn dlerror() ?[*:0]u8;
|
|
|
|
pub extern "c" fn sync() void;
|
|
pub extern "c" fn syncfs(fd: c_int) c_int;
|
|
pub extern "c" fn fsync(fd: c_int) c_int;
|
|
pub extern "c" fn fdatasync(fd: c_int) c_int;
|
|
|
|
pub extern "c" fn prctl(option: c_int, ...) c_int;
|
|
|
|
pub extern "c" fn getrlimit(resource: rlimit_resource, rlim: *rlimit) c_int;
|
|
pub extern "c" fn setrlimit(resource: rlimit_resource, rlim: *const rlimit) c_int;
|
|
|
|
pub extern "c" fn fmemopen(noalias buf: ?*anyopaque, size: usize, noalias mode: [*:0]const u8) ?*FILE;
|
|
|
|
pub extern "c" fn syslog(priority: c_int, message: [*:0]const u8, ...) void;
|
|
pub extern "c" fn openlog(ident: [*:0]const u8, logopt: c_int, facility: c_int) void;
|
|
pub extern "c" fn closelog() void;
|
|
pub extern "c" fn setlogmask(maskpri: c_int) c_int;
|
|
|
|
pub extern "c" fn if_nametoindex([*:0]const u8) c_int;
|
|
|
|
pub extern "c" fn getpid() pid_t;
|
|
|
|
/// These are implementation defined but share identical values in at least musl and glibc:
|
|
/// - https://git.musl-libc.org/cgit/musl/tree/include/locale.h?id=ab31e9d6a0fa7c5c408856c89df2dfb12c344039#n18
|
|
/// - https://sourceware.org/git/?p=glibc.git;a=blob;f=locale/bits/locale.h;h=0fcbb66114be5fef0577dc9047256eb508c45919;hb=c90cfce849d010474e8cccf3e5bff49a2c8b141f#l26
|
|
pub const LC = enum(c_int) {
|
|
CTYPE = 0,
|
|
NUMERIC = 1,
|
|
TIME = 2,
|
|
COLLATE = 3,
|
|
MONETARY = 4,
|
|
MESSAGES = 5,
|
|
ALL = 6,
|
|
PAPER = 7,
|
|
NAME = 8,
|
|
ADDRESS = 9,
|
|
TELEPHONE = 10,
|
|
MEASUREMENT = 11,
|
|
IDENTIFICATION = 12,
|
|
_,
|
|
};
|
|
|
|
pub extern "c" fn setlocale(category: LC, locale: ?[*:0]const u8) ?[*:0]const u8;
|
|
|
|
pub const getcontext = if (builtin.target.isAndroid())
|
|
{} // android bionic libc does not implement getcontext
|
|
else if (native_os == .linux and builtin.target.isMusl())
|
|
linux.getcontext
|
|
else
|
|
private.getcontext;
|
|
|
|
pub const max_align_t = if (native_abi == .msvc)
|
|
f64
|
|
else if (builtin.target.isDarwin())
|
|
c_longdouble
|
|
else
|
|
extern struct {
|
|
a: c_longlong,
|
|
b: c_longdouble,
|
|
};
|
|
|
|
pub extern "c" fn pthread_getthreadid_np() c_int;
|
|
pub extern "c" fn pthread_set_name_np(thread: pthread_t, name: [*:0]const u8) void;
|
|
pub extern "c" fn pthread_get_name_np(thread: pthread_t, name: [*:0]u8, len: usize) void;
|
|
|
|
// OS-specific bits. These are protected from being used on the wrong OS by
|
|
// comptime assertions inside each OS-specific file.
|
|
|
|
pub const AF_SUN = solaris.AF_SUN;
|
|
pub const AT_SUN = solaris.AT_SUN;
|
|
pub const FILE_EVENT = solaris.FILE_EVENT;
|
|
pub const GETCONTEXT = solaris.GETCONTEXT;
|
|
pub const GETUSTACK = solaris.GETUSTACK;
|
|
pub const PORT_ALERT = solaris.PORT_ALERT;
|
|
pub const PORT_SOURCE = solaris.PORT_SOURCE;
|
|
pub const POSIX_FADV = solaris.POSIX_FADV;
|
|
pub const SCM = solaris.SCM;
|
|
pub const SETCONTEXT = solaris.SETCONTEXT;
|
|
pub const SETUSTACK = solaris.GETUSTACK;
|
|
pub const SFD = solaris.SFD;
|
|
pub const _SC = solaris._SC;
|
|
pub const cmsghdr = solaris.cmsghdr;
|
|
pub const ctid_t = solaris.ctid_t;
|
|
pub const file_obj = solaris.file_obj;
|
|
pub const fpregset_t = solaris.fpregset_t;
|
|
pub const id_t = solaris.id_t;
|
|
pub const lif_ifinfo_req = solaris.lif_ifinfo_req;
|
|
pub const lif_nd_req = solaris.lif_nd_req;
|
|
pub const lifreq = solaris.lifreq;
|
|
pub const major_t = solaris.major_t;
|
|
pub const minor_t = solaris.minor_t;
|
|
pub const poolid_t = solaris.poolid_t;
|
|
pub const port_notify = solaris.port_notify;
|
|
pub const priority = solaris.priority;
|
|
pub const procfs = solaris.procfs;
|
|
pub const projid_t = solaris.projid_t;
|
|
pub const signalfd_siginfo = solaris.signalfd_siginfo;
|
|
pub const sysconf = solaris.sysconf;
|
|
pub const taskid_t = solaris.taskid_t;
|
|
pub const zoneid_t = solaris.zoneid_t;
|
|
|
|
pub const DirEnt = haiku.DirEnt;
|
|
pub const _get_next_area_info = haiku._get_next_area_info;
|
|
pub const _get_next_image_info = haiku._get_next_image_info;
|
|
pub const _get_team_info = haiku._get_team_info;
|
|
pub const _kern_get_current_team = haiku._kern_get_current_team;
|
|
pub const _kern_open_dir = haiku._kern_open_dir;
|
|
pub const _kern_read_dir = haiku._kern_read_dir;
|
|
pub const _kern_read_stat = haiku._kern_read_stat;
|
|
pub const _kern_rewind_dir = haiku._kern_rewind_dir;
|
|
pub const area_id = haiku.area_id;
|
|
pub const area_info = haiku.area_info;
|
|
pub const directory_which = haiku.directory_which;
|
|
pub const find_directory = haiku.find_directory;
|
|
pub const find_thread = haiku.find_thread;
|
|
pub const get_system_info = haiku.get_system_info;
|
|
pub const image_info = haiku.image_info;
|
|
pub const port_id = haiku.port_id;
|
|
pub const sem_id = haiku.sem_id;
|
|
pub const status_t = haiku.status_t;
|
|
pub const system_info = haiku.system_info;
|
|
pub const team_id = haiku.team_id;
|
|
pub const team_info = haiku.team_info;
|
|
pub const thread_id = haiku.thread_id;
|
|
pub const vregs = haiku.vregs;
|
|
|
|
pub const AUTH = openbsd.AUTH;
|
|
pub const BI = openbsd.BI;
|
|
pub const FUTEX = openbsd.FUTEX;
|
|
pub const HW = openbsd.HW;
|
|
pub const PTHREAD_STACK_MIN = openbsd.PTHREAD_STACK_MIN;
|
|
pub const TCFLUSH = openbsd.TCFLUSH;
|
|
pub const TCIO = openbsd.TCIO;
|
|
pub const auth_approval = openbsd.auth_approval;
|
|
pub const auth_call = openbsd.auth_call;
|
|
pub const auth_cat = openbsd.auth_cat;
|
|
pub const auth_challenge = openbsd.auth_challenge;
|
|
pub const auth_check_change = openbsd.auth_check_change;
|
|
pub const auth_check_expire = openbsd.auth_check_expire;
|
|
pub const auth_checknologin = openbsd.auth_checknologin;
|
|
pub const auth_clean = openbsd.auth_clean;
|
|
pub const auth_close = openbsd.auth_close;
|
|
pub const auth_clrenv = openbsd.auth_clrenv;
|
|
pub const auth_clroption = openbsd.auth_clroption;
|
|
pub const auth_clroptions = openbsd.auth_clroptions;
|
|
pub const auth_getitem = openbsd.auth_getitem;
|
|
pub const auth_getpwd = openbsd.auth_getpwd;
|
|
pub const auth_getstate = openbsd.auth_getstate;
|
|
pub const auth_getvalue = openbsd.auth_getvalue;
|
|
pub const auth_item_t = openbsd.auth_item_t;
|
|
pub const auth_mkvalue = openbsd.auth_mkvalue;
|
|
pub const auth_open = openbsd.auth_open;
|
|
pub const auth_session_t = openbsd.auth_session_t;
|
|
pub const auth_setdata = openbsd.auth_setdata;
|
|
pub const auth_setenv = openbsd.auth_setenv;
|
|
pub const auth_setitem = openbsd.auth_setitem;
|
|
pub const auth_setoption = openbsd.auth_setoption;
|
|
pub const auth_setpwd = openbsd.auth_setpwd;
|
|
pub const auth_setstate = openbsd.auth_setstate;
|
|
pub const auth_userchallenge = openbsd.auth_userchallenge;
|
|
pub const auth_usercheck = openbsd.auth_usercheck;
|
|
pub const auth_userokay = openbsd.auth_userokay;
|
|
pub const auth_userresponse = openbsd.auth_userresponse;
|
|
pub const auth_verify = openbsd.auth_verify;
|
|
pub const bcrypt = openbsd.bcrypt;
|
|
pub const bcrypt_checkpass = openbsd.bcrypt_checkpass;
|
|
pub const bcrypt_gensalt = openbsd.bcrypt_gensalt;
|
|
pub const bcrypt_newhash = openbsd.bcrypt_newhash;
|
|
pub const endpwent = openbsd.endpwent;
|
|
pub const futex = openbsd.futex;
|
|
pub const getpwent = openbsd.getpwent;
|
|
pub const getpwnam_r = openbsd.getpwnam_r;
|
|
pub const getpwnam_shadow = openbsd.getpwnam_shadow;
|
|
pub const getpwuid_r = openbsd.getpwuid_r;
|
|
pub const getpwuid_shadow = openbsd.getpwuid_shadow;
|
|
pub const getthrid = openbsd.getthrid;
|
|
pub const login_cap_t = openbsd.login_cap_t;
|
|
pub const login_close = openbsd.login_close;
|
|
pub const login_getcapbool = openbsd.login_getcapbool;
|
|
pub const login_getcapnum = openbsd.login_getcapnum;
|
|
pub const login_getcapsize = openbsd.login_getcapsize;
|
|
pub const login_getcapstr = openbsd.login_getcapstr;
|
|
pub const login_getcaptime = openbsd.login_getcaptime;
|
|
pub const login_getclass = openbsd.login_getclass;
|
|
pub const login_getstyle = openbsd.login_getstyle;
|
|
pub const pledge = openbsd.pledge;
|
|
pub const pthread_spinlock_t = openbsd.pthread_spinlock_t;
|
|
pub const pw_dup = openbsd.pw_dup;
|
|
pub const setclasscontext = openbsd.setclasscontext;
|
|
pub const setpassent = openbsd.setpassent;
|
|
pub const setpwent = openbsd.setpwent;
|
|
pub const setusercontext = openbsd.setusercontext;
|
|
pub const uid_from_user = openbsd.uid_from_user;
|
|
pub const unveil = openbsd.unveil;
|
|
pub const user_from_uid = openbsd.user_from_uid;
|
|
|
|
pub const CAP_RIGHTS_VERSION = freebsd.CAP_RIGHTS_VERSION;
|
|
pub const KINFO_FILE_SIZE = freebsd.KINFO_FILE_SIZE;
|
|
pub const MFD = freebsd.MFD;
|
|
pub const UMTX_ABSTIME = freebsd.UMTX_ABSTIME;
|
|
pub const UMTX_OP = freebsd.UMTX_OP;
|
|
pub const _umtx_op = freebsd._umtx_op;
|
|
pub const _umtx_time = freebsd._umtx_time;
|
|
pub const cap_rights = freebsd.cap_rights;
|
|
pub const fflags_t = freebsd.fflags_t;
|
|
pub const fsblkcnt_t = freebsd.fsblkcnt_t;
|
|
pub const fsfilcnt_t = freebsd.fsfilcnt_t;
|
|
pub const kinfo_file = freebsd.kinfo_file;
|
|
pub const kinfo_getfile = freebsd.kinfo_getfile;
|
|
|
|
pub const COPYFILE = darwin.COPYFILE;
|
|
pub const CPUFAMILY = darwin.CPUFAMILY;
|
|
pub const DB_RECORDTYPE = darwin.DB_RECORDTYPE;
|
|
pub const EXC = darwin.EXC;
|
|
pub const EXCEPTION = darwin.EXCEPTION;
|
|
pub const MACH_MSG_TYPE = darwin.MACH_MSG_TYPE;
|
|
pub const MACH_PORT_RIGHT = darwin.MACH_PORT_RIGHT;
|
|
pub const MACH_TASK_BASIC_INFO = darwin.MACH_TASK_BASIC_INFO;
|
|
pub const MACH_TASK_BASIC_INFO_COUNT = darwin.MACH_TASK_BASIC_INFO_COUNT;
|
|
pub const MATTR = darwin.MATTR;
|
|
pub const NSVersionOfRunTimeLibrary = darwin.NSVersionOfRunTimeLibrary;
|
|
pub const OPEN_MAX = darwin.OPEN_MAX;
|
|
pub const POSIX_SPAWN = darwin.POSIX_SPAWN;
|
|
pub const TASK_NULL = darwin.TASK_NULL;
|
|
pub const TASK_VM_INFO = darwin.TASK_VM_INFO;
|
|
pub const TASK_VM_INFO_COUNT = darwin.TASK_VM_INFO_COUNT;
|
|
pub const THREAD_BASIC_INFO = darwin.THREAD_BASIC_INFO;
|
|
pub const THREAD_BASIC_INFO_COUNT = darwin.THREAD_BASIC_INFO_COUNT;
|
|
pub const THREAD_IDENTIFIER_INFO_COUNT = darwin.THREAD_IDENTIFIER_INFO_COUNT;
|
|
pub const THREAD_NULL = darwin.THREAD_NULL;
|
|
pub const THREAD_STATE_NONE = darwin.THREAD_STATE_NONE;
|
|
pub const UL = darwin.UL;
|
|
pub const VM = darwin.VM;
|
|
pub const _NSGetExecutablePath = darwin._NSGetExecutablePath;
|
|
pub const __getdirentries64 = darwin.__getdirentries64;
|
|
pub const __ulock_wait = darwin.__ulock_wait;
|
|
pub const __ulock_wait2 = darwin.__ulock_wait2;
|
|
pub const __ulock_wake = darwin.__ulock_wake;
|
|
pub const _dyld_get_image_header = darwin._dyld_get_image_header;
|
|
pub const _dyld_get_image_name = darwin._dyld_get_image_name;
|
|
pub const _dyld_get_image_vmaddr_slide = darwin._dyld_get_image_vmaddr_slide;
|
|
pub const _dyld_image_count = darwin._dyld_image_count;
|
|
pub const _host_page_size = darwin._host_page_size;
|
|
pub const clock_get_time = darwin.clock_get_time;
|
|
pub const dispatch_release = darwin.dispatch_release;
|
|
pub const dispatch_semaphore_create = darwin.dispatch_semaphore_create;
|
|
pub const dispatch_semaphore_signal = darwin.dispatch_semaphore_signal;
|
|
pub const dispatch_semaphore_wait = darwin.dispatch_semaphore_wait;
|
|
pub const dispatch_time = darwin.dispatch_time;
|
|
pub const fcopyfile = darwin.fcopyfile;
|
|
pub const kern_return_t = darwin.kern_return_t;
|
|
pub const kevent64 = darwin.kevent64;
|
|
pub const mach_absolute_time = darwin.mach_absolute_time;
|
|
pub const mach_continuous_time = darwin.mach_continuous_time;
|
|
pub const mach_hdr = darwin.mach_hdr;
|
|
pub const mach_host_self = darwin.mach_host_self;
|
|
pub const mach_msg = darwin.mach_msg;
|
|
pub const mach_msg_type_number_t = darwin.mach_msg_type_number_t;
|
|
pub const mach_port_allocate = darwin.mach_port_allocate;
|
|
pub const mach_port_array_t = darwin.mach_port_array_t;
|
|
pub const mach_port_deallocate = darwin.mach_port_deallocate;
|
|
pub const mach_port_insert_right = darwin.mach_port_insert_right;
|
|
pub const mach_port_name_t = darwin.mach_port_name_t;
|
|
pub const mach_port_t = darwin.mach_port_t;
|
|
pub const mach_task_basic_info = darwin.mach_task_basic_info;
|
|
pub const mach_task_self = darwin.mach_task_self;
|
|
pub const mach_timebase_info = darwin.mach_timebase_info;
|
|
pub const mach_vm_protect = darwin.mach_vm_protect;
|
|
pub const mach_vm_read = darwin.mach_vm_read;
|
|
pub const mach_vm_region = darwin.mach_vm_region;
|
|
pub const mach_vm_region_recurse = darwin.mach_vm_region_recurse;
|
|
pub const mach_vm_write = darwin.mach_vm_write;
|
|
pub const os_log_create = darwin.os_log_create;
|
|
pub const os_log_type_enabled = darwin.os_log_type_enabled;
|
|
pub const os_signpost_enabled = darwin.os_signpost_enabled;
|
|
pub const os_signpost_id_generate = darwin.os_signpost_id_generate;
|
|
pub const os_signpost_id_make_with_pointer = darwin.os_signpost_id_make_with_pointer;
|
|
pub const os_signpost_interval_begin = darwin.os_signpost_interval_begin;
|
|
pub const os_signpost_interval_end = darwin.os_signpost_interval_end;
|
|
pub const os_unfair_lock = darwin.os_unfair_lock;
|
|
pub const os_unfair_lock_assert_not_owner = darwin.os_unfair_lock_assert_not_owner;
|
|
pub const os_unfair_lock_assert_owner = darwin.os_unfair_lock_assert_owner;
|
|
pub const os_unfair_lock_lock = darwin.os_unfair_lock_lock;
|
|
pub const os_unfair_lock_trylock = darwin.os_unfair_lock_trylock;
|
|
pub const os_unfair_lock_unlock = darwin.os_unfair_lock_unlock;
|
|
pub const pid_for_task = darwin.pid_for_task;
|
|
pub const posix_spawn = darwin.posix_spawn;
|
|
pub const posix_spawn_file_actions_addchdir_np = darwin.posix_spawn_file_actions_addchdir_np;
|
|
pub const posix_spawn_file_actions_addclose = darwin.posix_spawn_file_actions_addclose;
|
|
pub const posix_spawn_file_actions_adddup2 = darwin.posix_spawn_file_actions_adddup2;
|
|
pub const posix_spawn_file_actions_addfchdir_np = darwin.posix_spawn_file_actions_addfchdir_np;
|
|
pub const posix_spawn_file_actions_addinherit_np = darwin.posix_spawn_file_actions_addinherit_np;
|
|
pub const posix_spawn_file_actions_addopen = darwin.posix_spawn_file_actions_addopen;
|
|
pub const posix_spawn_file_actions_destroy = darwin.posix_spawn_file_actions_destroy;
|
|
pub const posix_spawn_file_actions_init = darwin.posix_spawn_file_actions_init;
|
|
pub const posix_spawn_file_actions_t = darwin.posix_spawn_file_actions_t;
|
|
pub const posix_spawnattr_destroy = darwin.posix_spawnattr_destroy;
|
|
pub const posix_spawnattr_getflags = darwin.posix_spawnattr_getflags;
|
|
pub const posix_spawnattr_init = darwin.posix_spawnattr_init;
|
|
pub const posix_spawnattr_setflags = darwin.posix_spawnattr_setflags;
|
|
pub const posix_spawnattr_t = darwin.posix_spawnattr_t;
|
|
pub const posix_spawnp = darwin.posix_spawnp;
|
|
pub const pthread_attr_get_qos_class_np = darwin.pthread_attr_get_qos_class_np;
|
|
pub const pthread_attr_set_qos_class_np = darwin.pthread_attr_set_qos_class_np;
|
|
pub const pthread_get_qos_class_np = darwin.pthread_get_qos_class_np;
|
|
pub const pthread_set_qos_class_self_np = darwin.pthread_set_qos_class_self_np;
|
|
pub const ptrace = darwin.ptrace;
|
|
pub const sigaddset = darwin.sigaddset;
|
|
pub const task_for_pid = darwin.task_for_pid;
|
|
pub const task_get_exception_ports = darwin.task_get_exception_ports;
|
|
pub const task_info = darwin.task_info;
|
|
pub const task_info_t = darwin.task_info_t;
|
|
pub const task_resume = darwin.task_resume;
|
|
pub const task_set_exception_ports = darwin.task_set_exception_ports;
|
|
pub const task_suspend = darwin.task_suspend;
|
|
pub const task_threads = darwin.task_threads;
|
|
pub const task_vm_info_data_t = darwin.task_vm_info_data_t;
|
|
pub const thread_basic_info = darwin.thread_basic_info;
|
|
pub const thread_get_state = darwin.thread_get_state;
|
|
pub const thread_identifier_info = darwin.thread_identifier_info;
|
|
pub const thread_info = darwin.thread_info;
|
|
pub const thread_info_t = darwin.thread_info_t;
|
|
pub const thread_resume = darwin.thread_resume;
|
|
pub const thread_set_state = darwin.thread_set_state;
|
|
pub const vm_deallocate = darwin.vm_deallocate;
|
|
pub const vm_machine_attribute = darwin.vm_machine_attribute;
|
|
pub const vm_machine_attribute_val_t = darwin.vm_machine_attribute_val_t;
|
|
pub const vm_offset_t = darwin.vm_offset_t;
|
|
pub const vm_prot_t = darwin.vm_prot_t;
|
|
pub const vm_region_basic_info_64 = darwin.vm_region_basic_info_64;
|
|
pub const vm_region_extended_info = darwin.vm_region_extended_info;
|
|
pub const vm_region_info_t = darwin.vm_region_info_t;
|
|
pub const vm_region_recurse_info_t = darwin.vm_region_recurse_info_t;
|
|
pub const vm_region_submap_info_64 = darwin.vm_region_submap_info_64;
|
|
pub const vm_region_submap_short_info_64 = darwin.vm_region_submap_short_info_64;
|
|
pub const vm_region_top_info = darwin.vm_region_top_info;
|
|
|
|
pub const _ksiginfo = netbsd._ksiginfo;
|
|
pub const _lwp_self = netbsd._lwp_self;
|
|
pub const lwpid_t = netbsd.lwpid_t;
|
|
|
|
/// External definitions shared by two or more operating systems.
|
|
const private = struct {
|
|
extern "c" fn close(fd: fd_t) c_int;
|
|
extern "c" fn clock_getres(clk_id: clockid_t, tp: *timespec) c_int;
|
|
extern "c" fn clock_gettime(clk_id: clockid_t, tp: *timespec) c_int;
|
|
extern "c" fn copy_file_range(fd_in: fd_t, off_in: ?*i64, fd_out: fd_t, off_out: ?*i64, len: usize, flags: c_uint) isize;
|
|
extern "c" fn flock(fd: fd_t, operation: c_int) c_int;
|
|
extern "c" fn fork() c_int;
|
|
extern "c" fn fstat(fd: fd_t, buf: *Stat) c_int;
|
|
extern "c" fn fstatat(dirfd: fd_t, path: [*:0]const u8, buf: *Stat, flag: u32) c_int;
|
|
extern "c" fn getdirentries(fd: fd_t, buf_ptr: [*]u8, nbytes: usize, basep: *i64) isize;
|
|
extern "c" fn getdents(fd: c_int, buf_ptr: [*]u8, nbytes: usize) switch (native_os) {
|
|
.freebsd => isize,
|
|
.solaris, .illumos => usize,
|
|
else => c_int,
|
|
};
|
|
extern "c" fn getrusage(who: c_int, usage: *rusage) c_int;
|
|
extern "c" fn gettimeofday(noalias tv: ?*timeval, noalias tz: ?*timezone) c_int;
|
|
extern "c" fn msync(addr: *align(page_size) const anyopaque, len: usize, flags: c_int) c_int;
|
|
extern "c" fn nanosleep(rqtp: *const timespec, rmtp: ?*timespec) c_int;
|
|
extern "c" fn pipe2(fds: *[2]fd_t, flags: O) c_int;
|
|
extern "c" fn readdir(dir: *DIR) ?*dirent;
|
|
extern "c" fn realpath(noalias file_name: [*:0]const u8, noalias resolved_name: [*]u8) ?[*:0]u8;
|
|
extern "c" fn sched_yield() c_int;
|
|
extern "c" fn sendfile(out_fd: fd_t, in_fd: fd_t, offset: ?*off_t, count: usize) isize;
|
|
extern "c" fn sigaction(sig: c_int, noalias act: ?*const Sigaction, noalias oact: ?*Sigaction) c_int;
|
|
extern "c" fn sigfillset(set: ?*sigset_t) void;
|
|
extern "c" fn sigprocmask(how: c_int, noalias set: ?*const sigset_t, noalias oset: ?*sigset_t) c_int;
|
|
extern "c" fn socket(domain: c_uint, sock_type: c_uint, protocol: c_uint) c_int;
|
|
extern "c" fn stat(noalias path: [*:0]const u8, noalias buf: *Stat) c_int;
|
|
extern "c" fn sigaltstack(ss: ?*stack_t, old_ss: ?*stack_t) c_int;
|
|
|
|
extern "c" fn pthread_setname_np(thread: pthread_t, name: [*:0]const u8) c_int;
|
|
extern "c" fn getcontext(ucp: *ucontext_t) c_int;
|
|
|
|
extern "c" fn getrandom(buf_ptr: [*]u8, buf_len: usize, flags: c_uint) isize;
|
|
extern "c" fn getentropy(buffer: [*]u8, size: usize) c_int;
|
|
extern "c" fn arc4random_buf(buf: [*]u8, len: usize) void;
|
|
|
|
extern "c" fn _msize(memblock: ?*anyopaque) usize;
|
|
extern "c" fn malloc_size(?*const anyopaque) usize;
|
|
extern "c" fn malloc_usable_size(?*const anyopaque) usize;
|
|
extern "c" fn posix_memalign(memptr: *?*anyopaque, alignment: usize, size: usize) c_int;
|
|
|
|
/// macos modernized symbols.
|
|
/// x86_64 links to $INODE64 suffix for 64-bit support.
|
|
/// Note these are not necessary on aarch64.
|
|
extern "c" fn @"fstat$INODE64"(fd: fd_t, buf: *Stat) c_int;
|
|
extern "c" fn @"fstatat$INODE64"(dirfd: fd_t, path: [*:0]const u8, buf: *Stat, flag: u32) c_int;
|
|
extern "c" fn @"readdir$INODE64"(dir: *DIR) ?*dirent;
|
|
extern "c" fn @"stat$INODE64"(noalias path: [*:0]const u8, noalias buf: *Stat) c_int;
|
|
|
|
/// macos modernized symbols.
|
|
extern "c" fn @"realpath$DARWIN_EXTSN"(noalias file_name: [*:0]const u8, noalias resolved_name: [*]u8) ?[*:0]u8;
|
|
extern "c" fn __getdirentries64(fd: fd_t, buf_ptr: [*]u8, buf_len: usize, basep: *i64) isize;
|
|
|
|
extern "c" fn pthread_threadid_np(thread: ?pthread_t, thread_id: *u64) c_int;
|
|
|
|
/// netbsd modernized symbols.
|
|
extern "c" fn __clock_getres50(clk_id: clockid_t, tp: *timespec) c_int;
|
|
extern "c" fn __clock_gettime50(clk_id: clockid_t, tp: *timespec) c_int;
|
|
extern "c" fn __fstat50(fd: fd_t, buf: *Stat) c_int;
|
|
extern "c" fn __getrusage50(who: c_int, usage: *rusage) c_int;
|
|
extern "c" fn __gettimeofday50(noalias tv: ?*timeval, noalias tz: ?*timezone) c_int;
|
|
extern "c" fn __libc_thr_yield() c_int;
|
|
extern "c" fn __msync13(addr: *align(std.mem.page_size) const anyopaque, len: usize, flags: c_int) c_int;
|
|
extern "c" fn __nanosleep50(rqtp: *const timespec, rmtp: ?*timespec) c_int;
|
|
extern "c" fn __sigaction14(sig: c_int, noalias act: ?*const Sigaction, noalias oact: ?*Sigaction) c_int;
|
|
extern "c" fn __sigfillset14(set: ?*sigset_t) void;
|
|
extern "c" fn __sigprocmask14(how: c_int, noalias set: ?*const sigset_t, noalias oset: ?*sigset_t) c_int;
|
|
extern "c" fn __socket30(domain: c_uint, sock_type: c_uint, protocol: c_uint) c_int;
|
|
extern "c" fn __stat50(path: [*:0]const u8, buf: *Stat) c_int;
|
|
extern "c" fn __getdents30(fd: c_int, buf_ptr: [*]u8, nbytes: usize) c_int;
|
|
extern "c" fn __sigaltstack14(ss: ?*stack_t, old_ss: ?*stack_t) c_int;
|
|
|
|
// Don't forget to add another clown when an OS picks yet another unique
|
|
// symbol name for errno location!
|
|
// 🤡🤡🤡🤡🤡🤡
|
|
|
|
extern "c" fn ___errno() *c_int;
|
|
extern "c" fn __errno() *c_int;
|
|
extern "c" fn __errno_location() *c_int;
|
|
extern "c" fn __error() *c_int;
|
|
extern "c" fn _errno() *c_int;
|
|
|
|
extern threadlocal var errno: c_int;
|
|
|
|
fn errnoFromThreadLocal() *c_int {
|
|
return &errno;
|
|
}
|
|
};
|