zig/lib/std / c.zig

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.

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.heap.page_size_min;
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");

iovec

* 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 version. * If linking Android libc (bionic), returns true if the target API level is greater than or equal to version.major, ignoring other components. * If linking a libc other than these, returns false.


// These constants are shared among all operating systems even when not linking
// libc.

iovec_const

system-wide monotonic clock (aka system time)


pub const iovec = std.posix.iovec;
pub const iovec_const = std.posix.iovec_const;

LOCK

system-wide real time clock

pub const LOCK = std.posix.LOCK;

winsize

clock measuring the used CPU time of the current process

pub const winsize = std.posix.winsize;

versionCheck()

clock measuring the used CPU time of the current thread


/// 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 });
    }

DIR

No error occurred.

}

off_t

Also means DEADLOCK.


/// * 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
///   `version`.
/// * If linking Android libc (bionic), returns `true` if the target API level is greater than or
///   equal to `version.major`, ignoring other components.
/// * If linking a libc other than these, returns `false`.
pub inline fn versionCheck(comptime 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.versionRange().gnuLibCVersion().?;
            break :blk switch (ver.order(version)) {
                .gt, .eq => true,
                .lt => false,
            };
        } else if (builtin.abi.isAndroid()) {
            break :blk builtin.os.version_range.linux.android >= version.major;
        } else {
            break :blk false;
        }
    };

DIR

No error occurred.

}

fromTimestamp()

Not super-user


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,

DIR

No such file or directory

};

dev_t

No such process


pub const off_t = switch (native_os) {
    .linux => linux.off_t,
    .emscripten => emscripten.off_t,
    else => i64,

DIR

interrupted system call

};

nlink_t

I/O error


pub const timespec = switch (native_os) {
    .linux => linux.timespec,
    .emscripten => emscripten.timespec,
    .wasi => extern struct {
        sec: time_t,
        nsec: isize,

uid_t

No such device or address


        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)),
            };
        }

gid_t

Arg list too long


        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,

DIR

Exec format error

};

passwd

Bad file number


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,

DIR

No children

};

fd_t

Resource temporarily unavailable. also: WOULDBLOCK: Operation would block.


pub const mode_t = switch (native_os) {
    .linux => linux.mode_t,
    .emscripten => emscripten.mode_t,
    .openbsd, .haiku, .netbsd, .solaris, .illumos, .wasi, .windows => u32,
    .freebsd, .macos, .ios, .tvos, .watchos, .visionos, .dragonfly => u16,
    else => u0,

DIR

Not enough core

};

TIMERFD_CLOCK

Permission denied


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,

DIR

Bad address

};

CLOCK

Block device required


pub const uid_t = switch (native_os) {
    .linux => linux.uid_t,
    .emscripten => emscripten.uid_t,
    else => u32,

DIR

Mount device busy

};

CPU_COUNT

File exists


pub const gid_t = switch (native_os) {
    .linux => linux.gid_t,
    .emscripten => emscripten.gid_t,
    else => u32,

DIR

Cross-device link

};

Elf_Symndx

No such device


pub const blksize_t = switch (native_os) {
    .linux => linux.blksize_t,
    .emscripten => emscripten.blksize_t,
    .wasi => c_long,
    else => i32,

DIR

Not a directory

};

GETFD

Is a directory


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
    },
    .netbsd, .openbsd, .macos => 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,

DIR

Invalid argument

};

GETFL

File table overflow


pub const blkcnt_t = switch (native_os) {
    .linux => linux.blkcnt_t,
    .emscripten => emscripten.blkcnt_t,
    .wasi => c_longlong,
    else => i64,

DIR

Too many open files

};

DUPFD

Inappropriate ioctl for device


pub const fd_t = switch (native_os) {
    .linux => linux.fd_t,
    .wasi => wasi.fd_t,
    .windows => windows.HANDLE,
    else => i32,

DIR

Text file busy

};

SETFD

File too large


pub const ARCH = switch (native_os) {
    .linux => linux.ARCH,
    else => void,

DIR

No space left on device

};

SETFL

Illegal seek


// For use with posix.timerfd_create()
// Actually, the parameter for the timerfd_create() function is an integer,
// which means that the developer has to figure out which value is appropriate.
// To make this easier and, above all, safer, because an incorrect value leads
// to a panic, an enum is introduced which only allows the values
// that actually work.
pub const TIMERFD_CLOCK = timerfd_clockid_t;
pub const timerfd_clockid_t = switch (native_os) {
    .freebsd => enum(u32) {
        REALTIME = 0,
        MONOTONIC = 4,
        _,
    },
    .linux => linux.timerfd_clockid_t,
    else => clockid_t,

DIR

Read only file system

};

SETOWN

Too many links


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,

DIR

Broken pipe

};
pub const CPU_COUNT = switch (native_os) {
    .linux => linux.CPU_COUNT,
    .emscripten => emscripten.CPU_COUNT,
    else => void,

DIR

Math arg out of domain of func

};
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,

SETLKW

Math result not representable


        INVAL = 22,
        RANGE = 34,
        ILSEQ = 42,

SETLKWTIMEOUT

No message of desired type


        // 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,

FLUSH_DATA

Identifier removed


        // Filesystem Quotas
        /// Disc quota exceeded
        DQUOT = 49,

CHKCLEAN

Channel number out of range


        // 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,

PREALLOCATE

Level 2 not synchronized


        // 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,

SETSIZE

Level 3 halted


        // 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,

RDADVISE

Level 3 reset


        // 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,

RDAHEAD

Link number out of range


        // 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,

NOCACHE

Protocol driver not attached


        // 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,

LOG2PHYS

No CSI structure available


        // SUN Network File System
        /// Stale NFS file handle
        STALE = 151,

GETPATH

Level 2 halted


        _,
    },
    .netbsd => netbsd.E,
    .dragonfly => dragonfly.E,
    .haiku => haiku.E,
    .openbsd => openbsd.E,
    else => void,

DIR

Deadlock condition.

};
pub const Elf_Symndx = switch (native_os) {
    .linux => linux.Elf_Symndx,
    else => void,

DIR

No record locks available.

};
/// Command flags for fcntl(2).
pub const F = switch (native_os) {
    .linux => linux.F,
    .emscripten => emscripten.F,
    .wasi => struct {
        // Match `F_*` constants from lib/libc/include/wasm-wasi-musl/__header_fcntl.h

GETFD

Operation canceled

        pub const GETFD = 1;

SETFD

Operation not supported

        pub const SETFD = 2;

GETFL

Disc quota exceeded

        pub const GETFL = 3;

SETFL

invalid exchange

        pub const SETFL = 4;
    },
    .macos, .ios, .tvos, .watchos, .visionos => struct {
        /// duplicate file descriptor

DUPFD

invalid request descriptor

        pub const DUPFD = 0;
        /// get file descriptor flags

GETFD

exchange full

        pub const GETFD = 1;
        /// set file descriptor flags

SETFD

no anode

        pub const SETFD = 2;
        /// get file status flags

GETFL

invalid request code

        pub const GETFL = 3;
        /// set file status flags

SETFL

invalid slot

        pub const SETFL = 4;
        /// get SIGIO/SIGURG proc/pgrp

GETOWN

file locking deadlock error

        pub const GETOWN = 5;
        /// set SIGIO/SIGURG proc/pgrp

SETOWN

bad font file fmt

        pub const SETOWN = 6;
        /// get record locking information

GETLK

process died with the lock

        pub const GETLK = 7;
        /// set record locking information

SETLK

lock is not recoverable

        pub const SETLK = 8;
        /// F.SETLK; wait if blocked

SETLKW

locked lock was unmapped

        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

GETNOSIGPIPE

Facility is not active

        pub const GETNOSIGPIPE = 74;
        /// For some cases, we need to rewrap the key for AKS/MKB

TRANSCODEKEY

multihop attempted

        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

SINGLE_WRITER

trying to read unreadable message

        pub const SINGLE_WRITER = 76;
        /// Get the protection version number for this filesystem

GETPROTECTIONLEVEL

path name is too long

        pub const GETPROTECTIONLEVEL = 77;
        /// Add detached code signatures (used by dyld for shared libs)

FINDSIGS

value too large to be stored in data type

        pub const FINDSIGS = 78;
        /// Add signature from same file, only if it is signed by Apple (used by dyld for simulator)

ADDFILESIGS_FOR_DYLD_SIM

given log. name not unique

        pub const ADDFILESIGS_FOR_DYLD_SIM = 83;
        /// fsync + issue barrier to drive

BARRIERFSYNC

f.d. invalid for this operation

        pub const BARRIERFSYNC = 85;
        /// Add signature from same file, return end offset in structure on success

ADDFILESIGS_RETURN

Remote address changed

        pub const ADDFILESIGS_RETURN = 97;
        /// Check if Library Validation allows this Mach-O file to be mapped into the calling process

CHECK_LV

Device not a stream

        pub const CHECK_LV = 98;
        /// Deallocate a range of the file

PUNCHHOLE

no data (for no delay io)

        pub const PUNCHHOLE = 99;
        /// Trim an active file

TRIM_ACTIVE_FILE

timer expired

        pub const TRIM_ACTIVE_FILE = 100;
        /// mark the dup with FD_CLOEXEC

DUPFD_CLOEXEC

out of streams resources

        pub const DUPFD_CLOEXEC = 67;
        /// shared or read lock

RDLCK

Machine is not on the network

        pub const RDLCK = 1;
        /// unlock

UNLCK

Package not installed

        pub const UNLCK = 2;
        /// exclusive or write lock

WRLCK

The object is remote

        pub const WRLCK = 3;
    },
    .freebsd => struct {
        /// Duplicate file descriptor.

DUPFD

the link has been severed

        pub const DUPFD = 0;
        /// Get file descriptor flags.

GETFD

advertise error

        pub const GETFD = 1;
        /// Set file descriptor flags.

SETFD

srmount error

        pub const SETFD = 2;
        /// Get file status flags.

GETFL

Communication error on send

        pub const GETFL = 3;
        /// Set file status flags.

SETFL

Protocol error

        pub const SETFL = 4;

GETOWN

Can't access a needed shared lib.


        /// Get SIGIO/SIGURG proc/pgrrp.

GETOWN

Accessing a corrupted shared lib.

        pub const GETOWN = 5;
        /// Set SIGIO/SIGURG proc/pgrrp.

SETOWN

.lib section in a.out corrupted.

        pub const SETOWN = 6;

SETLK

Attempting to link in too many libs.


        /// Get record locking information.
        pub const GETLK = 11;
        /// Set record locking information.
        pub const SETLK = 12;
        /// Set record locking information and wait if blocked.

SETLKW

Attempting to exec a shared library.

        pub const SETLKW = 13;

SETLK_REMOTE

Illegal byte sequence.


        /// Debugging support for remote locks.
        pub const SETLK_REMOTE = 14;
        /// Read ahead.

READAHEAD

Unsupported file system operation

        pub const READAHEAD = 15;

DUPFD_CLOEXEC

Symbolic link loop


        /// DUPFD with FD_CLOEXEC set.

DUPFD_CLOEXEC

Restartable system call

        pub const DUPFD_CLOEXEC = 17;
        /// DUP2FD with FD_CLOEXEC set.

DUP2FD_CLOEXEC

if pipe/FIFO, don't sleep in stream head

        pub const DUP2FD_CLOEXEC = 18;

GET_SEALS

directory not empty


        pub const ADD_SEALS = 19;
        pub const GET_SEALS = 20;
        /// Return `kinfo_file` for a file descriptor.

KINFO

Too many users (for UFS)

        pub const KINFO = 22;

SEAL_SEAL

Socket operation on non-socket


        // Seals (ADD_SEALS, GET_SEALS)
        /// Prevent adding sealings.
        pub const SEAL_SEAL = 0x0001;
        /// May not shrink

SEAL_SHRINK

Destination address required

        pub const SEAL_SHRINK = 0x0002;
        /// May not grow.

SEAL_GROW

Message too long

        pub const SEAL_GROW = 0x0004;
        /// May not write.

SEAL_WRITE

Protocol wrong type for socket

        pub const SEAL_WRITE = 0x0008;

RDLCK

Protocol not available


        // Record locking flags (GETLK, SETLK, SETLKW).
        /// Shared or read lock.

RDLCK

Protocol not supported

        pub const RDLCK = 1;
        /// Unlock.

UNLCK

Socket type not supported

        pub const UNLCK = 2;
        /// Exclusive or write lock.

WRLCK

Operation not supported on socket

        pub const WRLCK = 3;
        /// Purge locks for a given system ID.
        pub const UNLCKSYS = 4;
        /// Cancel an async lock request.

CANCEL

Protocol family not supported

        pub const CANCEL = 5;

SETOWN_EX

Address family not supported by


        pub const SETOWN_EX = 15;

GETOWN_EX

Address already in use

        pub const GETOWN_EX = 16;

GETOWNER_UIDS

Can't assign requested address


        pub const GETOWNER_UIDS = 17;
    },
    .solaris, .illumos => struct {
        /// Unlock a previously locked region

ULOCK

Network is down

        pub const ULOCK = 0;
        /// Lock a region for exclusive use

LOCK

Network is unreachable

        pub const LOCK = 1;
        /// Test and lock a region for exclusive use

TLOCK

Network dropped connection because

        pub const TLOCK = 2;
        /// Test a region for other processes locks

TEST

Software caused connection abort

        pub const TEST = 3;

DUPFD

Connection reset by peer


        /// Duplicate fildes

DUPFD

No buffer space available

        pub const DUPFD = 0;
        /// Get fildes flags

GETFD

Socket is already connected

        pub const GETFD = 1;
        /// Set fildes flags

SETFD

Socket is not connected

        pub const SETFD = 2;
        /// Get file flags

GETFL

Can't send after socket shutdown

        pub const GETFL = 3;
        /// Get file flags including open-only flags
        pub const GETXFL = 45;
        /// Set file flags

SETFL

Too many references: can't splice

        pub const SETFL = 4;

CHKFL

Connection timed out


        /// Unused
        pub const CHKFL = 8;
        /// Duplicate fildes at third arg

DUP2FD

Connection refused

        pub const DUP2FD = 9;
        /// Like DUP2FD with O_CLOEXEC set EINVAL is fildes matches arg1

DUP2FD_CLOEXEC

Host is down

        pub const DUP2FD_CLOEXEC = 36;
        /// Like DUPFD with O_CLOEXEC set

DUPFD_CLOEXEC

No route to host

        pub const DUPFD_CLOEXEC = 37;

ISSTREAM

operation already in progress


        /// Is the file desc. a stream ?
        pub const ISSTREAM = 13;
        /// Turn on private access to file

PRIV

operation now in progress

        pub const PRIV = 15;
        /// Turn off private access to file

NPRIV

Stale NFS file handle

        pub const NPRIV = 16;
        /// UFS quota call

QUOTACTL

Command flags for fcntl(2).

        pub const QUOTACTL = 17;
        /// Get number of BLKSIZE blocks allocated

BLOCKS

duplicate file descriptor

        pub const BLOCKS = 18;
        /// Get optimal I/O block size

BLKSIZE

get file descriptor flags

        pub const BLKSIZE = 19;
        /// Get owner (socket emulation)

GETOWN

set file descriptor flags

        pub const GETOWN = 23;
        /// Set owner (socket emulation)

SETOWN

get file status flags

        pub const SETOWN = 24;
        /// Object reuse revoke access to file desc.

REVOKE

set file status flags

        pub const REVOKE = 25;
        /// Does vp have NFS locks private to lock manager

HASREMOTELOCKS

get SIGIO/SIGURG proc/pgrp

        pub const HASREMOTELOCKS = 26;

SETLK

set SIGIO/SIGURG proc/pgrp


        /// Set file lock
        pub const SETLK = 6;
        /// Set file lock and wait

SETLKW

get record locking information

        pub const SETLKW = 7;
        /// Allocate file space

ALLOCSP

set record locking information

        pub const ALLOCSP = 10;
        /// Free file space

FREESP

F.SETLK; wait if blocked

        pub const FREESP = 11;
        /// Get file lock

GETLK

F.SETLK; wait if blocked, return on timeout

        pub const GETLK = 14;
        /// Get file lock owned by file

OFD_GETLK

Used for regression test

        pub const OFD_GETLK = 47;
        /// Set file lock owned by file

OFD_SETLK

Preallocate storage

        pub const OFD_SETLK = 48;
        /// Set file lock owned by file and wait

OFD_SETLKW

Truncate a file without zeroing space

        pub const OFD_SETLKW = 49;
        /// Set a file share reservation

SHARE

Issue an advisory read async with no copy to user

        pub const SHARE = 40;
        /// Remove a file share reservation

UNSHARE

turn read ahead off/on for this fd

        pub const UNSHARE = 41;
        /// Create Poison FD

BADFD

turn data caching off/on for this fd

        pub const BADFD = 46;

RDLCK

file offset to device offset


        /// Read lock

RDLCK

return the full path of the fd

        pub const RDLCK = 1;
        /// Write lock
        pub const WRLCK = 2;
        /// Remove lock(s)

UNLCK

fsync + ask the drive to flush to the media

        pub const UNLCK = 3;
        /// remove remote locks for a given system

UNLKSYS

find which component (if any) is a package

        pub const UNLKSYS = 4;

RDACC

"freeze" all fs operations


        // f_access values
        /// Read-only share access
        pub const RDACC = 0x1;
        /// Write-only share access

WRACC

"thaw" all fs operations

        pub const WRACC = 0x2;
        /// Read-Write share access

RWACC

turn data caching off/on (globally) for this file

        pub const RWACC = 0x3;

NODNY

add detached signatures


        // f_deny values
        /// Don't deny others access
        pub const NODNY = 0x0;
        /// Deny others read share access

RDDNY

add signature from same file (used by dyld for shared libs)

        pub const RDDNY = 0x1;
        /// Deny others write share access

WRDNY

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 WRDNY = 0x2;
        /// Deny others read or write share access

RWDNY

Get the protection class of a file from the EA, returns int

        pub const RWDNY = 0x3;
        /// private flag: Deny delete share access

RMDNY

Set the protection class of a file for the EA, requires int

        pub const RMDNY = 0x4;
    },
    .netbsd => struct {

DUPFD

file offset to device offset, extended

        pub const DUPFD = 0;

GETFD

get record locking information, per-process

        pub const GETFD = 1;

SETFD

Mark the file as being the backing store for another filesystem

        pub const SETFD = 2;

GETFL

return the full path of the FD, but error in specific mtmd circumstances

        pub const GETFL = 3;

SETFL

Returns the code directory, with associated hashes, to the caller

        pub const SETFL = 4;

GETOWN

No SIGPIPE generated on EPIPE

        pub const GETOWN = 5;

SETOWN

Status of SIGPIPE for this fd

        pub const SETOWN = 6;

GETLK

For some cases, we need to rewrap the key for AKS/MKB

        pub const GETLK = 7;

SETLK

file being written to a by single writer... if throttling enabled, writes may be broken into smaller chunks with throttling in between

        pub const SETLK = 8;

SETLKW

Get the protection version number for this filesystem

        pub const SETLKW = 9;

CLOSEM

Add detached code signatures (used by dyld for shared libs)

        pub const CLOSEM = 10;

MAXFD

Add signature from same file, only if it is signed by Apple (used by dyld for simulator)

        pub const MAXFD = 11;

DUPFD_CLOEXEC

fsync + issue barrier to drive

        pub const DUPFD_CLOEXEC = 12;

GETNOSIGPIPE

Add signature from same file, return end offset in structure on success

        pub const GETNOSIGPIPE = 13;

SETNOSIGPIPE

Check if Library Validation allows this Mach-O file to be mapped into the calling process

        pub const SETNOSIGPIPE = 14;

GETPATH

Deallocate a range of the file

        pub const GETPATH = 15;

RDLCK

Trim an active file


RDLCK

mark the dup with FD_CLOEXEC

        pub const RDLCK = 1;

WRLCK

shared or read lock

        pub const WRLCK = 3;

UNLCK

unlock

        pub const UNLCK = 2;
    },
    .dragonfly => struct {
        pub const ULOCK = 0;

LOCK

exclusive or write lock

        pub const LOCK = 1;

TLOCK

Duplicate file descriptor.

        pub const TLOCK = 2;

TEST

Get file descriptor flags.

        pub const TEST = 3;

DUPFD

Set file descriptor flags.


DUPFD

Get file status flags.

        pub const DUPFD = 0;

GETFD

Set file status flags.

        pub const GETFD = 1;

RDLCK

Get SIGIO/SIGURG proc/pgrrp.

        pub const RDLCK = 1;

SETFD

Set SIGIO/SIGURG proc/pgrrp.

        pub const SETFD = 2;

UNLCK

Get record locking information.

        pub const UNLCK = 2;

WRLCK

Set record locking information.

        pub const WRLCK = 3;

GETFL

Set record locking information and wait if blocked.

        pub const GETFL = 3;

SETFL

Debugging support for remote locks.

        pub const SETFL = 4;

GETOWN

Read ahead.

        pub const GETOWN = 5;

SETOWN

DUPFD with FD_CLOEXEC set.

        pub const SETOWN = 6;

GETLK

DUP2FD with FD_CLOEXEC set.

        pub const GETLK = 7;

SETLK

Return kinfo_file for a file descriptor.

        pub const SETLK = 8;

SETLKW

Prevent adding sealings.

        pub const SETLKW = 9;
        pub const DUP2FD = 10;

DUPFD_CLOEXEC

May not shrink

        pub const DUPFD_CLOEXEC = 17;

DUP2FD_CLOEXEC

May not grow.

        pub const DUP2FD_CLOEXEC = 18;

GETPATH

May not write.

        pub const GETPATH = 19;
    },
    .haiku => struct {

DUPFD

Shared or read lock.

        pub const DUPFD = 0x0001;

GETFD

Unlock.

        pub const GETFD = 0x0002;

SETFD

Exclusive or write lock.

        pub const SETFD = 0x0004;

GETFL

Purge locks for a given system ID.

        pub const GETFL = 0x0008;

SETFL

Cancel an async lock request.

        pub const SETFL = 0x0010;

GETLK

Unlock a previously locked region


        pub const GETLK = 0x0020;

SETLK

Lock a region for exclusive use

        pub const SETLK = 0x0080;

SETLKW

Test and lock a region for exclusive use

        pub const SETLKW = 0x0100;

DUPFD_CLOEXEC

Test a region for other processes locks

        pub const DUPFD_CLOEXEC = 0x0200;

RDLCK

Duplicate fildes


        pub const RDLCK = 0x0040;

UNLCK

Get fildes flags

        pub const UNLCK = 0x0200;

WRLCK

Set fildes flags

        pub const WRLCK = 0x0400;
    },
    .openbsd => struct {

DUPFD

Get file flags

        pub const DUPFD = 0;

GETFD

Get file flags including open-only flags

        pub const GETFD = 1;

SETFD

Set file flags

        pub const SETFD = 2;

GETFL

Unused

        pub const GETFL = 3;

SETFL

Duplicate fildes at third arg

        pub const SETFL = 4;

GETOWN

Like DUP2FD with O_CLOEXEC set EINVAL is fildes matches arg1


        pub const GETOWN = 5;

SETOWN

Like DUPFD with O_CLOEXEC set

        pub const SETOWN = 6;

GETLK

Is the file desc. a stream ?


        pub const GETLK = 7;

SETLK

Turn on private access to file

        pub const SETLK = 8;

SETLKW

Turn off private access to file

        pub const SETLKW = 9;

RDLCK

UFS quota call


        pub const RDLCK = 1;

UNLCK

Get number of BLKSIZE blocks allocated

        pub const UNLCK = 2;

WRLCK

Get optimal I/O block size

        pub const WRLCK = 3;
    },
    else => void,

DIR

Get owner (socket emulation)

};
pub const FD_CLOEXEC = switch (native_os) {
    .linux => linux.FD_CLOEXEC,
    .emscripten => emscripten.FD_CLOEXEC,
    else => 1,

DIR

Set owner (socket emulation)

};

X_OK

Object reuse revoke access to file desc.


/// Test for existence of file.
pub const F_OK = switch (native_os) {
    .linux => linux.F_OK,
    .emscripten => emscripten.F_OK,
    else => 0,

DIR

Does vp have NFS locks private to lock manager

};
/// Test for execute or search permission.
pub const X_OK = switch (native_os) {
    .linux => linux.X_OK,
    .emscripten => emscripten.X_OK,
    else => 1,

DIR

Set file lock

};
/// Test for write permission.
pub const W_OK = switch (native_os) {
    .linux => linux.W_OK,
    .emscripten => emscripten.W_OK,
    else => 2,

DIR

Set file lock and wait

};
/// Test for read permission.
pub const R_OK = switch (native_os) {
    .linux => linux.R_OK,
    .emscripten => emscripten.R_OK,
    else => 4,

DIR

Allocate file space

};

IOV_MAX

Free file space


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,

DIR

Get file lock

};
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 => {},

DIR

Get file lock owned by file

};
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 => {},

DIR

Set file lock owned by file

};
pub const CTL = switch (native_os) {
    .freebsd => struct {

KERN

Set file lock owned by file and wait

        pub const KERN = 1;

DEBUG

Set a file share reservation

        pub const DEBUG = 5;
    },
    .netbsd => struct {

KERN

Remove a file share reservation

        pub const KERN = 1;

DEBUG

Create Poison FD

        pub const DEBUG = 5;
    },
    .dragonfly => struct {

UNSPEC

Read lock

        pub const UNSPEC = 0;

KERN

Write lock

        pub const KERN = 1;

VM

Remove lock(s)

        pub const VM = 2;
        pub const VFS = 3;

NET

remove remote locks for a given system

        pub const NET = 4;

DEBUG

Read-only share access

        pub const DEBUG = 5;

HW

Write-only share access

        pub const HW = 6;

MACHDEP

Read-Write share access

        pub const MACHDEP = 7;
        pub const USER = 8;

LWKT

Don't deny others access

        pub const LWKT = 10;

MAXID

Deny others read share access

        pub const MAXID = 11;

MAXNAME

Deny others write share access

        pub const MAXNAME = 12;
    },
    .openbsd => struct {

UNSPEC

Deny others read or write share access

        pub const UNSPEC = 0;

KERN

private flag: Deny delete share access

        pub const KERN = 1;

VM

Test for existence of file.

        pub const VM = 2;

FS

Test for execute or search permission.

        pub const FS = 3;

NET

Test for write permission.

        pub const NET = 4;

DEBUG

Test for read permission.

        pub const DEBUG = 5;

HW

Starting offset.

        pub const HW = 6;

MACHDEP

Number of consecutive bytes to be locked. A value of 0 means to the end of the file.

        pub const MACHDEP = 7;

DDB

Lock owner.


        pub const DDB = 9;

VFS

Lock type.

        pub const VFS = 10;
    },
    else => void,

DIR

Type of the start member.

};
pub const KERN = switch (native_os) {
    .freebsd => struct {
        /// struct: process entries

PROC

Remote system id or zero for local.

        pub const PROC = 14;
        /// path to executable

PROC_PATHNAME

struct: process entries

        pub const PROC_PATHNAME = 12;
        /// file descriptors for process

PROC_FILEDESC

path to executable

        pub const PROC_FILEDESC = 33;

IOV_MAX

file descriptors for process

        pub const IOV_MAX = 35;
    },
    .netbsd => struct {
        /// struct: process argv/env

PROC_ARGS

struct: process argv/env

        pub const PROC_ARGS = 48;
        /// path to executable

PROC_PATHNAME

path to executable

        pub const PROC_PATHNAME = 5;

IOV_MAX

no further special treatment

        pub const IOV_MAX = 38;
    },
    .dragonfly => struct {

PROC_ALL

expect random page references

        pub const PROC_ALL = 0;

OSTYPE

expect sequential page references

        pub const OSTYPE = 1;

PROC_PID

will need these pages

        pub const PROC_PID = 1;

OSRELEASE

don't need these pages

        pub const OSRELEASE = 2;

PROC_PGRP

contents can be freed

        pub const PROC_PGRP = 2;

OSREV

default access

        pub const OSREV = 3;

PROC_SESSION

next LWP to access heavily

        pub const PROC_SESSION = 3;

VERSION

many processes to access heavily

        pub const VERSION = 4;

PROC_TTY

contents will be purged

        pub const PROC_TTY = 4;

MAXVNODES

invalidate, leave mapped

        pub const MAXVNODES = 5;

PROC_UID

deactivate, leave mapped

        pub const PROC_UID = 5;

MAXPROC

any readable data available.

        pub const MAXPROC = 6;

PROC_RUID

OOB/Urgent readable data.

        pub const PROC_RUID = 6;

MAXFILES

file descriptor is writeable.

        pub const MAXFILES = 7;

PROC_ARGS

non-OOB/URG data available.

        pub const PROC_ARGS = 7;

ARGMAX

no write type differentiation.

        pub const ARGMAX = 8;

PROC_CWD

OOB/Urgent readable data.

        pub const PROC_CWD = 8;

PROC_PATHNAME

OOB/Urgent data can be written.

        pub const PROC_PATHNAME = 9;

SECURELVL

like IN, except ignore EOF.

        pub const SECURELVL = 9;

PROC_SIGTRAMP

some poll error occurred.

        pub const PROC_SIGTRAMP = 10;

HOSTNAME

file descriptor was "hung up".

        pub const HOSTNAME = 10;

HOSTID

requested events "invalid".

        pub const HOSTID = 11;

CLOCKRATE

Read-side hangup.

        pub const CLOCKRATE = 12;

VNODE

Non-testable events (may not be specified in events).

        pub const VNODE = 13;

PROC

Events to control /dev/poll (not specified in revents)

        pub const PROC = 14;

FILE

Testable events (may be specified in events field).

        pub const FILE = 15;

PROC_FLAGMASK

Non-testable events (may not be specified in events field).

        pub const PROC_FLAGMASK = 16;

PROF

any readable data available

        pub const PROF = 16;

PROC_FLAG_LWP

file descriptor is writeable

        pub const PROC_FLAG_LWP = 16;

POSIX1

priority readable data

        pub const POSIX1 = 17;

NGROUPS

priority data can be written

        pub const NGROUPS = 18;

JOB_CONTROL

high priority readable data

        pub const JOB_CONTROL = 19;

SAVED_IDS

errors pending

        pub const SAVED_IDS = 20;

BOOTTIME

disconnected

        pub const BOOTTIME = 21;

NISDOMAINNAME

invalid file descriptor

        pub const NISDOMAINNAME = 22;

UPDATEINTERVAL

Basic memory protection flags

        pub const UPDATEINTERVAL = 23;

OSRELDATE

page can not be accessed

        pub const OSRELDATE = 24;

NTP_PLL

page can be read

        pub const NTP_PLL = 25;

BOOTFILE

page can be written

        pub const BOOTFILE = 26;

MAXFILESPERPROC

page can be executed

        pub const MAXFILESPERPROC = 27;

MAXPROCPERUID

[MC2] no permissions

        pub const MAXPROCPERUID = 28;

DUMPDEV

[MC2] pages can be read

        pub const DUMPDEV = 29;

IPC

[MC2] pages can be written

        pub const IPC = 30;

DUMMY

[MC2] pages can be executed

        pub const DUMMY = 31;

PS_STRINGS

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 PS_STRINGS = 32;

USRSTACK

No limit

        pub const USRSTACK = 33;

LOGSIGEXIT

No limit

        pub const LOGSIGEXIT = 34;

IOV_MAX

SunOS 2.6 Door

        pub const IOV_MAX = 35;

MAXPOSIXLOCKSPERUID

Solaris 10 Event Port

        pub const MAXPOSIXLOCKSPERUID = 36;

MAXID

take signal on signal stack

        pub const MAXID = 37;
    },
    .openbsd => struct {

OSTYPE

restart system on signal return

        pub const OSTYPE = 1;

OSRELEASE

reset to SIG.DFL when taking signal

        pub const OSRELEASE = 2;

OSREV

do not generate SIG.CHLD on child stop

        pub const OSREV = 3;

VERSION

don't mask the signal we're delivering

        pub const VERSION = 4;

MAXVNODES

don't keep zombies around

        pub const MAXVNODES = 5;

MAXPROC

signal handler with SIGINFO args

        pub const MAXPROC = 6;

MAXFILES

do not bounce off kernel's sigtramp

        pub const MAXFILES = 7;

ARGMAX

signal handler with SIGINFO args with 64bit regs information

        pub const ARGMAX = 8;

SECURELVL

Signal types

        pub const SECURELVL = 9;

HOSTNAME

interrupt

        pub const HOSTNAME = 10;

HOSTID

illegal instruction - invalid function image

        pub const HOSTID = 11;

CLOCKRATE

floating point exception

        pub const CLOCKRATE = 12;

PROF

segment violation


        pub const PROF = 16;

POSIX1

Software termination signal from kill

        pub const POSIX1 = 17;

NGROUPS

Ctrl-Break sequence

        pub const NGROUPS = 18;

JOB_CONTROL

abnormal termination triggered by abort call

        pub const JOB_CONTROL = 19;

SAVED_IDS

SIGABRT compatible with other platforms, same as SIGABRT

        pub const SAVED_IDS = 20;

BOOTTIME

default signal action

        pub const BOOTTIME = 21;

DOMAINNAME

ignore signal

        pub const DOMAINNAME = 22;

MAXPARTITIONS

return current value

        pub const MAXPARTITIONS = 23;

RAWPARTITION

signal gets error

        pub const RAWPARTITION = 24;

MAXTHREAD

acknowledge

        pub const MAXTHREAD = 25;

NTHREADS

Signal error value (returned by signal call on error)

        pub const NTHREADS = 26;

OSVERSION

block specified signal set

        pub const OSVERSION = 27;

SOMAXCONN

unblock specified signal set

        pub const SOMAXCONN = 28;

SOMINCONN

set specified signal set

        pub const SOMINCONN = 29;

NOSUIDCOREDUMP

hangup


        pub const NOSUIDCOREDUMP = 32;

FSYNC

interrupt

        pub const FSYNC = 33;

SYSVMSG

quit

        pub const SYSVMSG = 34;

SYSVSEM

illegal instruction (not reset when caught)

        pub const SYSVSEM = 35;

SYSVSHM

trace trap (not reset when caught)

        pub const SYSVSHM = 36;

MSGBUFSIZE

abort()


        pub const MSGBUFSIZE = 38;

MALLOCSTATS

pollable event ([XSR] generated, not supported)

        pub const MALLOCSTATS = 39;

CPTIME

compatibility

        pub const CPTIME = 40;

NCHSTATS

EMT instruction

        pub const NCHSTATS = 41;

FORKSTAT

floating point exception

        pub const FORKSTAT = 42;

NSELCOLL

kill (cannot be caught or ignored)

        pub const NSELCOLL = 43;

TTY

bus error

        pub const TTY = 44;

CCPU

segmentation violation

        pub const CCPU = 45;

FSCALE

bad argument to system call

        pub const FSCALE = 46;

NPROCS

write on a pipe with no one to read it

        pub const NPROCS = 47;

MSGBUF

alarm clock

        pub const MSGBUF = 48;

POOL

software termination signal from kill

        pub const POOL = 49;

STACKGAPRANDOM

urgent condition on IO channel

        pub const STACKGAPRANDOM = 50;

SYSVIPC_INFO

sendable stop signal not from tty

        pub const SYSVIPC_INFO = 51;

ALLOWKMEM

stop signal from tty

        pub const ALLOWKMEM = 52;

WITNESSWATCH

continue a stopped process

        pub const WITNESSWATCH = 53;

SPLASSERT

to parent on child stop or exit

        pub const SPLASSERT = 54;

PROC_ARGS

to readers pgrp upon background tty read

        pub const PROC_ARGS = 55;

NFILES

like TTIN for output if (tp->t_local<OSTOP)

        pub const NFILES = 56;

TTYCOUNT

input/output possible signal

        pub const TTYCOUNT = 57;

NUMVNODES

exceeded CPU time limit

        pub const NUMVNODES = 58;

MBSTAT

exceeded file size limit

        pub const MBSTAT = 59;

WITNESS

virtual time alarm

        pub const WITNESS = 60;

SEMINFO

profiling time alarm

        pub const SEMINFO = 61;

SHMINFO

window size changes

        pub const SHMINFO = 62;

INTRCNT

information request

        pub const INTRCNT = 63;

WATCHDOG

user defined signal 1

        pub const WATCHDOG = 64;

ALLOWDT

user defined signal 2

        pub const ALLOWDT = 65;

PROC

Renamed from sigaction to Sigaction to avoid conflict with function name.

        pub const PROC = 66;

MAXCLUSTERS

signal handler

        pub const MAXCLUSTERS = 67;

EVCOUNT

see signal options

        pub const EVCOUNT = 68;

TIMECOUNTER

signal mask to apply

        pub const TIMECOUNTER = 69;

MAXLOCKSPERUID

signal options

        pub const MAXLOCKSPERUID = 70;

CPTIME2

signal handler

        pub const CPTIME2 = 71;

CACHEPCT

signal mask to apply

        pub const CACHEPCT = 72;

FILE

signal handler

        pub const FILE = 73;

WXABORT

signal mask to apply

        pub const WXABORT = 74;

CONSDEV

see signal options

        pub const CONSDEV = 75;

NETLIVELOCKS

will be passed to the signal handler, BeOS extension

        pub const NETLIVELOCKS = 76;

POOL_DEBUG

signal handler

        pub const POOL_DEBUG = 77;

PROC_CWD

signal mask to apply

        pub const PROC_CWD = 78;

PROC_NOBROADCASTKILL

signal options

        pub const PROC_NOBROADCASTKILL = 79;

PROC_VMMAP

bis local mode bits

        pub const PROC_VMMAP = 80;

GLOBAL_PTRACE

bic local mode bits

        pub const GLOBAL_PTRACE = 81;

CONSBUFSIZE

set entire local mode word

        pub const CONSBUFSIZE = 82;

CONSBUF

get local modes

        pub const CONSBUF = 83;

AUDIO

set break bit

        pub const AUDIO = 84;

CPUSTATS

clear break bit

        pub const CPUSTATS = 85;

PFSTATUS

set data terminal ready

        pub const PFSTATUS = 86;

TIMEOUT_STATS

clear data terminal ready

        pub const TIMEOUT_STATS = 87;

UTC_OFFSET

set local special chars

        pub const UTC_OFFSET = 88;

VIDEO

get local special chars

        pub const VIDEO = 89;

PROC_ALL

driver output queue size


        pub const PROC_ALL = 0;

PROC_PID

void tty association

        pub const PROC_PID = 1;

PROC_PGRP

get a ctty

        pub const PROC_PGRP = 2;

PROC_SESSION

stop output, like ^S

        pub const PROC_SESSION = 3;

PROC_TTY

start output, like ^Q

        pub const PROC_TTY = 4;

PROC_UID

get pgrp of tty

        pub const PROC_UID = 5;

PROC_RUID

set pgrp of tty

        pub const PROC_RUID = 6;

PROC_KTHREAD

get session id on ctty

        pub const PROC_KTHREAD = 7;

PROC_SHOW_THREADS

simulate terminal input

        pub const PROC_SHOW_THREADS = 0x40000000;

PROC_ARGV

set all modem bits


        pub const PROC_ARGV = 1;

PROC_NARGV

bis modem bits

        pub const PROC_NARGV = 2;

PROC_ENV

bic modem bits

        pub const PROC_ENV = 3;

PROC_NENV

get all modem bits

        pub const PROC_NENV = 4;
    },
    else => void,

DIR

[XSI] no hang in wait/no child to reap

};
pub const MADV = switch (native_os) {
    .linux => linux.MADV,
    .emscripten => emscripten.MADV,
    .macos, .ios, .tvos, .watchos, .visionos => struct {

NORMAL

[XSI] notify on stop, untraced child

        pub const NORMAL = 0;

RANDOM

Module relocation base.

        pub const RANDOM = 1;

SEQUENTIAL

Module name.

        pub const SEQUENTIAL = 2;

WILLNEED

Pointer to module's phdr.

        pub const WILLNEED = 3;

DONTNEED

Number of entries in phdr.

        pub const DONTNEED = 4;

FREE

Total number of loads.

        pub const FREE = 5;

ZERO_WIRED_PAGES

Total number of unloads.

        pub const ZERO_WIRED_PAGES = 6;

FREE_REUSABLE

Incremented when a new object is mapped into the process.

        pub const FREE_REUSABLE = 7;

FREE_REUSE

Incremented when an object is unmapped from the process.

        pub const FREE_REUSE = 8;

CAN_REUSE

optional address

        pub const CAN_REUSE = 9;

PAGEOUT

size of address

        pub const PAGEOUT = 10;

ZERO

scatter/gather array

        pub const ZERO = 11;
    },
    .freebsd => struct {

NORMAL

# elements in iov

        pub const NORMAL = 0;

RANDOM

ancillary data

        pub const RANDOM = 1;

SEQUENTIAL

ancillary data buffer len

        pub const SEQUENTIAL = 2;

WILLNEED

flags on received message

        pub const WILLNEED = 3;

DONTNEED

optional address

        pub const DONTNEED = 4;

FREE

size of address

        pub const FREE = 5;

NOSYNC

scatter/gather array

        pub const NOSYNC = 6;

AUTOSYNC

# elements in iov

        pub const AUTOSYNC = 7;

NOCORE

ancillary data

        pub const NOCORE = 8;

CORE

ancillary data buffer len

        pub const CORE = 9;

PROTECT

flags on received message

        pub const PROTECT = 10;
    },
    .solaris, .illumos => struct {
        /// no further special treatment

NORMAL

Soft limit

        pub const NORMAL = 0;
        /// expect random page references

RANDOM

Hard limit

        pub const RANDOM = 1;
        /// expect sequential page references

SEQUENTIAL

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.

        pub const SEQUENTIAL = 2;
        /// will need these pages

WILLNEED

Sending process.

        pub const WILLNEED = 3;
        /// don't need these pages

DONTNEED

Sender's ruid.

        pub const DONTNEED = 4;
        /// contents can be freed

FREE

Exit value.

        pub const FREE = 5;
        /// default access

ACCESS_DEFAULT

Faulting instruction.

        pub const ACCESS_DEFAULT = 6;
        /// next LWP to access heavily

ACCESS_LWP

Signal value.

        pub const ACCESS_LWP = 7;
        /// many processes to access heavily

ACCESS_MANY

Machine specific trap code.

        pub const ACCESS_MANY = 8;
        /// contents will be purged

PURGE

Band event for SIGPOLL. UNUSED.

        pub const PURGE = 9;
    },
    .dragonfly => struct {

SEQUENTIAL

UNIX domain socket

        pub const SEQUENTIAL = 2;

CONTROL_END

total length

        pub const CONTROL_END = SETMAP;

DONTNEED

address family

        pub const DONTNEED = 4;

RANDOM

actually longer; address value

        pub const RANDOM = 1;

WILLNEED

address family

        pub const WILLNEED = 3;

NORMAL

actually longer; address value

        pub const NORMAL = 0;

CONTROL_START

Definitions for UNIX IPC domain.

        pub const CONTROL_START = INVAL;

FREE

total length

        pub const FREE = 5;

NOSYNC

address family

        pub const NOSYNC = 6;

AUTOSYNC

actually longer; address value

        pub const AUTOSYNC = 7;

NOCORE

Definitions for UNIX IPC domain.

        pub const NOCORE = 8;

CORE

total sockaddr length

        pub const CORE = 9;

INVAL

path name

        pub const INVAL = 10;

SETMAP

total length

        pub const SETMAP = 11;
    },
    else => void,

DIR

address family

};
pub const MSF = switch (native_os) {
    .linux => linux.MSF,
    .emscripten => emscripten.MSF,
    .macos, .ios, .tvos, .watchos, .visionos => struct {

ASYNC

actually longer; address value

        pub const ASYNC = 0x1;

INVALIDATE

total length

        pub const INVALIDATE = 0x2;
        /// invalidate, leave mapped

KILLPAGES

address family

        pub const KILLPAGES = 0x4;
        /// deactivate, leave mapped

DEACTIVATE

actually longer; address value

        pub const DEACTIVATE = 0x8;

SYNC

Definitions for UNIX IPC domain.

        pub const SYNC = 0x10;
    },
    .openbsd, .haiku, .dragonfly, .netbsd, .solaris, .illumos, .freebsd => struct {

ASYNC

total sockaddr length

        pub const ASYNC = 1;

INVALIDATE

path name

        pub const INVALIDATE = 2;

SYNC

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 SYNC = 4;
    },
    else => void,

DIR

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 MMAP2_UNIT = switch (native_os) {
    .linux => linux.MMAP2_UNIT,
    else => void,

DIR

Datagram.

};
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 => {},

DIR

STREAM.

};
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 => {},

DIR

Raw-protocol interface.

};

RDNORM

Reliably-delivered message.


pub const POLL = switch (native_os) {
    .linux => linux.POLL,
    .emscripten => emscripten.POLL,
    .wasi => struct {
        pub const RDNORM = 0x1;

WRNORM

Sequenced packed stream.

        pub const WRNORM = 0x2;

IN

dummy for IP

        pub const IN = RDNORM;

OUT

control message protocol

        pub const OUT = WRNORM;

ERR

tcp

        pub const ERR = 0x1000;

HUP

user datagram protocol

        pub const HUP = 0x2000;

NVAL

IP6 header

        pub const NVAL = 0x4000;
    },
    .windows => ws2_32.POLL,
    .macos, .ios, .tvos, .watchos, .visionos => struct {

IN

raw IP packet

        pub const IN = 0x001;

PRI

IP6 hop-by-hop options

        pub const PRI = 0x002;

OUT

group mgmt protocol

        pub const OUT = 0x004;

RDNORM

gateway^2 (deprecated)

        pub const RDNORM = 0x040;

WRNORM

IPv4 encapsulation

        pub const WRNORM = OUT;

RDBAND

for compatibility

        pub const RDBAND = 0x080;

WRBAND

Stream protocol II

        pub const WRBAND = 0x100;

EXTEND

exterior gateway protocol


        pub const EXTEND = 0x0200;

ATTRIB

private interior gateway

        pub const ATTRIB = 0x0400;

NLINK

BBN RCC Monitoring

        pub const NLINK = 0x0800;

WRITE

network voice protocol

        pub const WRITE = 0x1000;

ERR

pup


        pub const ERR = 0x008;

HUP

Argus

        pub const HUP = 0x010;

NVAL

EMCON

        pub const NVAL = 0x020;

STANDARD

Cross Net Debugger


STANDARD

Chaos

        pub const STANDARD = IN | PRI | OUT | RDNORM | RDBAND | WRBAND | ERR | HUP | NVAL;
    },
    .freebsd => struct {
        /// any readable data available.

IN

Multiplexing

        pub const IN = 0x0001;
        /// OOB/Urgent readable data.

PRI

DCN Measurement Subsystems

        pub const PRI = 0x0002;
        /// file descriptor is writeable.

OUT

Host Monitoring

        pub const OUT = 0x0004;
        /// non-OOB/URG data available.

RDNORM

Packet Radio Measurement

        pub const RDNORM = 0x0040;
        /// no write type differentiation.

WRNORM

xns idp

        pub const WRNORM = OUT;
        /// OOB/Urgent readable data.

RDBAND

Trunk-1

        pub const RDBAND = 0x0080;
        /// OOB/Urgent data can be written.

WRBAND

Trunk-2

        pub const WRBAND = 0x0100;
        /// like IN, except ignore EOF.
        pub const INIGNEOF = 0x2000;
        /// some poll error occurred.

ERR

Leaf-1

        pub const ERR = 0x0008;
        /// file descriptor was "hung up".

HUP

Leaf-2

        pub const HUP = 0x0010;
        /// requested events "invalid".

NVAL

Reliable Data

        pub const NVAL = 0x0020;

STANDARD

Reliable Transaction


        pub const STANDARD = IN | PRI | OUT | RDNORM | RDBAND | WRBAND | ERR | HUP | NVAL;
    },
    .solaris, .illumos => struct {

IN

tp-4 w/ class negotiation

        pub const IN = 0x0001;

PRI

Bulk Data Transfer

        pub const PRI = 0x0002;

OUT

Network Services

        pub const OUT = 0x0004;

RDNORM

Merit Internodal

        pub const RDNORM = 0x0040;

WRNORM

Datagram Congestion Control Protocol

        pub const WRNORM = .OUT;

RDBAND

Third Party Connect

        pub const RDBAND = 0x0080;

WRBAND

InterDomain Policy Routing

        pub const WRBAND = 0x0100;
        /// Read-side hangup.

RDHUP

XTP

        pub const RDHUP = 0x4000;

ERR

Datagram Delivery


        /// Non-testable events (may not be specified in events).

ERR

Control Message Transport

        pub const ERR = 0x0008;

HUP

TP++ Transport

        pub const HUP = 0x0010;

NVAL

IL transport protocol

        pub const NVAL = 0x0020;

ONESHOT

Source Demand Routing


        /// Events to control `/dev/poll` (not specified in revents)
        pub const REMOVE = 0x0800;
        pub const ONESHOT = 0x1000;

ET

IP6 routing header

        pub const ET = 0x2000;
    },
    .dragonfly, .netbsd => struct {
        /// Testable events (may be specified in events field).

IN

IP6 fragmentation header

        pub const IN = 0x0001;

PRI

InterDomain Routing

        pub const PRI = 0x0002;

OUT

resource reservation

        pub const OUT = 0x0004;

RDNORM

General Routing Encap.

        pub const RDNORM = 0x0040;

WRNORM

Mobile Host Routing

        pub const WRNORM = OUT;

RDBAND

BHA

        pub const RDBAND = 0x0080;

WRBAND

IP6 Encap Sec. Payload

        pub const WRBAND = 0x0100;

ERR

IP6 Auth Header


        /// Non-testable events (may not be specified in events field).

ERR

Integ. Net Layer Security

        pub const ERR = 0x0008;

HUP

IP with encryption

        pub const HUP = 0x0010;

NVAL

Next Hop Resolution

        pub const NVAL = 0x0020;
    },
    .haiku => struct {
        /// any readable data available

IN

IP Mobility

        pub const IN = 0x0001;
        /// file descriptor is writeable
        pub const OUT = 0x0002;

RDNORM

Transport Layer Security

        pub const RDNORM = IN;

WRNORM

SKIP

        pub const WRNORM = OUT;
        /// priority readable data

RDBAND

ICMP6

        pub const RDBAND = 0x0008;
        /// priority data can be written

WRBAND

IP6 no next header

        pub const WRBAND = 0x0010;
        /// high priority readable data

PRI

IP6 destination option

        pub const PRI = 0x0020;

ERR

any host internal protocol


        /// errors pending
        pub const ERR = 0x0004;
        /// disconnected

HUP

CFTP

        pub const HUP = 0x0080;
        /// invalid file descriptor

NVAL

"hello" routing protocol

        pub const NVAL = 0x1000;
    },
    .openbsd => struct {

IN

SATNET/Backroom EXPAK

        pub const IN = 0x0001;

PRI

Kryptolan

        pub const PRI = 0x0002;

OUT

Remote Virtual Disk

        pub const OUT = 0x0004;

ERR

Pluribus Packet Core

        pub const ERR = 0x0008;

HUP

Any distributed FS

        pub const HUP = 0x0010;

NVAL

Satnet Monitoring

        pub const NVAL = 0x0020;

RDNORM

VISA Protocol

        pub const RDNORM = 0x0040;

NORM

Packet Core Utility

        pub const NORM = RDNORM;

WRNORM

Comp. Prot. Net. Executive

        pub const WRNORM = OUT;

RDBAND

Comp. Prot. HeartBeat

        pub const RDBAND = 0x0080;

WRBAND

Wang Span Network

        pub const WRBAND = 0x0100;
    },
    else => void,

DIR

Packet Video Protocol

};

NONE

BackRoom SATNET Monitoring


/// 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

READ

Sun net disk proto (temp.)

        pub const READ = 0x1;
        /// page can be written

WRITE

WIDEBAND Monitoring

        pub const WRITE = 0x2;
        /// page can be executed

EXEC

WIDEBAND EXPAK

        pub const EXEC = 0x4;
    },
    .macos, .ios, .tvos, .watchos, .visionos => struct {
        /// [MC2] no permissions

NONE:

ISO cnlp

        pub const NONE: vm_prot_t = 0x00;
        /// [MC2] pages can be read

READ:

VMTP

        pub const READ: vm_prot_t = 0x01;
        /// [MC2] pages can be written

WRITE:

Secure VMTP

        pub const WRITE: vm_prot_t = 0x02;
        /// [MC2] pages can be executed

EXEC:

Banyon VINES

        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.

COPY:

TTP

        pub const COPY: vm_prot_t = 0x10;
    },
    else => void,

DIR

NSFNET-IGP

};

FP

dissimilar gateway prot.


pub const REG = switch (native_os) {
    .linux => linux.REG,
    .emscripten => emscripten.REG,
    .freebsd => switch (builtin.cpu.arch) {
        .aarch64 => struct {

FP

TCF

            pub const FP = 29;

SP

Cisco/GXS IGRP

            pub const SP = 31;

PC

OSPFIGP

            pub const PC = 32;
        },
        .arm => struct {

FP

Strite RPC protocol

            pub const FP = 11;

SP

Locus Address Resoloution

            pub const SP = 13;

PC

Multicast Transport

            pub const PC = 15;
        },
        .x86_64 => struct {

RBP

AX.25 Frames

            pub const RBP = 12;

RIP

IP encapsulated in IP

            pub const RIP = 21;

RSP

Mobile Int.ing control

            pub const RSP = 24;
        },
        else => struct {},
    },
    .solaris, .illumos => struct {
        pub const R15 = 0;

R14

Semaphore Comm. security

        pub const R14 = 1;

R13

Ethernet IP encapsulation

        pub const R13 = 2;

R12

encapsulation header

        pub const R12 = 3;

R11

any private encr. scheme

        pub const R11 = 4;

R10

GMTP

        pub const R10 = 5;

R9

payload compression (IPComp)

        pub const R9 = 6;

R8

SCTP

        pub const R8 = 7;

RDI

IPv6 Mobility Header

        pub const RDI = 8;

RSI

UDP-Lite

        pub const RSI = 9;

RBP

IP6 Host Identity Protocol

        pub const RBP = 10;

RBX

IP6 Shim6 Protocol

        pub const RBX = 11;

RDX

Protocol Independent Mcast

        pub const RDX = 12;

RCX

CARP

        pub const RCX = 13;

RAX

PGM

        pub const RAX = 14;

RIP

MPLS-in-IP

        pub const RIP = 17;

RSP

PFSYNC

        pub const RSP = 20;
    },
    .netbsd => switch (builtin.cpu.arch) {
        .aarch64 => struct {

FP

Reserved

            pub const FP = 29;

SP

Reserved

            pub const SP = 31;

PC

dummy for IP

            pub const PC = 32;
        },
        .arm => struct {

FP

Hop by hop header for IPv6

            pub const FP = 11;

SP

control message protocol

            pub const SP = 13;

PC

group control protocol

            pub const PC = 15;
        },
        .x86_64 => struct {

RDI

gateway^2 (deprecated)

            pub const RDI = 0;

RSI

IP in IP encapsulation

            pub const RSI = 1;

RDX

tcp

            pub const RDX = 2;

RCX

exterior gateway protocol

            pub const RCX = 3;

R8

pup

            pub const R8 = 4;

R9

user datagram protocol

            pub const R9 = 5;

R10

xns idp

            pub const R10 = 6;

R11

IPv6 encapsulated in IP

            pub const R11 = 7;

R12

Routing header for IPv6

            pub const R12 = 8;

R13

Fragment header for IPv6

            pub const R13 = 9;

R14

rsvp

            pub const R14 = 10;

R15

IPsec Encap. Sec. Payload

            pub const R15 = 11;

RBP

IPsec Authentication Hdr.

            pub const RBP = 12;

RBX

ICMP for IPv6

            pub const RBX = 13;

RAX

No next header for IPv6

            pub const RAX = 14;

GS

Destination options

            pub const GS = 15;

FS

"hello" routing protocol

            pub const FS = 16;

ES

UNOFFICIAL net disk proto

            pub const ES = 17;

DS

ISO clnp

            pub const DS = 18;

TRAPNO

OSPF

            pub const TRAPNO = 19;

ERR

PIM routing protocol

            pub const ERR = 20;

RIP

Stream Control

            pub const RIP = 21;

CS

raw IP packet

            pub const CS = 22;

RFLAGS

Sockets Direct Protocol

            pub const RFLAGS = 23;

RSP

dummy for IP

            pub const RSP = 24;

SS

IP6 hop-by-hop options

            pub const SS = 25;
        },
        else => struct {},
    },
    else => struct {},

DIR

control message protocol

};
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

INFINITY:

group mgmt protocol

        pub const INFINITY: rlim_t = (1 << 63) - 1;

SAVED_MAX

gateway^2 (deprecated)


        pub const SAVED_MAX = INFINITY;

SAVED_CUR

IP header

        pub const SAVED_CUR = INFINITY;
    },
    .solaris, .illumos => struct {
        /// No limit

INFINITY:

IP inside IP

        pub const INFINITY: rlim_t = (1 << 63) - 3;

SAVED_MAX:

tcp

        pub const SAVED_MAX: rlim_t = (1 << 63) - 2;

SAVED_CUR:

exterior gateway protocol

        pub const SAVED_CUR: rlim_t = (1 << 63) - 1;
    },
    else => void,

DIR

pup

};
pub const S = switch (native_os) {
    .linux => linux.S,
    .emscripten => emscripten.S,
    .wasi => struct {
        // Match `S_*` constants from lib/libc/include/wasm-wasi-musl/__mode_t.h

IFBLK

user datagram protocol

        pub const IFBLK = 0x6000;

IFCHR

xns idp

        pub const IFCHR = 0x2000;

IFDIR

tp-4 w/ class negotiation

        pub const IFDIR = 0x4000;

IFIFO

DCCP

        pub const IFIFO = 0x1000;

IFLNK

IP6 header

        pub const IFLNK = 0xa000;

IFMT

IP6 routing header

        pub const IFMT = IFBLK | IFCHR | IFDIR | IFIFO | IFLNK | IFREG | IFSOCK;

IFREG

IP6 fragmentation header

        pub const IFREG = 0x8000;

IFSOCK

resource reservation

        pub const IFSOCK = 0xc000;

ISBLK()

GRE encaps RFC 1701


ISBLK()

encap. security payload

        pub fn ISBLK(m: u32) bool {
            return m & IFMT == IFBLK;
        }

ISDIR()

authentication header


ISCHR()

IP Mobility RFC 2004

        pub fn ISCHR(m: u32) bool {
            return m & IFMT == IFCHR;
        }

ISLNK()

IPv6 ICMP


ISDIR()

ICMP6

        pub fn ISDIR(m: u32) bool {
            return m & IFMT == IFDIR;
        }

ISSOCK()

IP6 no next header


ISFIFO()

IP6 destination option

        pub fn ISFIFO(m: u32) bool {
            return m & IFMT == IFIFO;
        }

IFIFO

ISO cnlp


ISLNK()

Ethernet-in-IP

        pub fn ISLNK(m: u32) bool {
            return m & IFMT == IFLNK;
        }

IFDIR

encapsulation header


ISREG()

Protocol indep. multicast

        pub fn ISREG(m: u32) bool {
            return m & IFMT == IFREG;
        }

IFREG

IP Payload Comp. Protocol


ISSOCK()

VRRP RFC 2338

        pub fn ISSOCK(m: u32) bool {
            return m & IFMT == IFSOCK;
        }
    },
    .macos, .ios, .tvos, .watchos, .visionos => struct {

IFMT

Common Address Resolution Protocol

        pub const IFMT = 0o170000;

IFWHT

L2TPv3


IFIFO

SCTP

        pub const IFIFO = 0o010000;

IFCHR

PFSYNC

        pub const IFCHR = 0o020000;

IFDIR

raw IP packet

        pub const IFDIR = 0o040000;

IFBLK

dummy for IP

        pub const IFBLK = 0o060000;

IFREG

IP6 hop-by-hop options

        pub const IFREG = 0o100000;

IFLNK

control message protocol

        pub const IFLNK = 0o120000;

IFSOCK

group mgmt protocol

        pub const IFSOCK = 0o140000;

IFWHT

gateway^2 (deprecated)

        pub const IFWHT = 0o160000;

IRGRP

IP header


ISUID

IP inside IP

        pub const ISUID = 0o4000;

ISGID

tcp

        pub const ISGID = 0o2000;

ISVTX

exterior gateway protocol

        pub const ISVTX = 0o1000;

IRWXU

pup

        pub const IRWXU = 0o700;

IRUSR

user datagram protocol

        pub const IRUSR = 0o400;

IWUSR

xns idp

        pub const IWUSR = 0o200;

IXUSR

tp-4 w/ class negotiation

        pub const IXUSR = 0o100;

IRWXG

IP6 header

        pub const IRWXG = 0o070;

IRGRP

IP6 routing header

        pub const IRGRP = 0o040;

IWGRP

IP6 fragmentation header

        pub const IWGRP = 0o020;

IXGRP

resource reservation

        pub const IXGRP = 0o010;

IRWXO

GRE encaps RFC 1701

        pub const IRWXO = 0o007;

IROTH

encap. security payload

        pub const IROTH = 0o004;

IWOTH

authentication header

        pub const IWOTH = 0o002;

IXOTH

IP Mobility RFC 2004

        pub const IXOTH = 0o001;

IFIFO

IPv6 ICMP


ISFIFO()

ICMP6

        pub fn ISFIFO(m: u32) bool {
            return m & IFMT == IFIFO;
        }

IFDIR

IP6 no next header


ISCHR()

IP6 destination option

        pub fn ISCHR(m: u32) bool {
            return m & IFMT == IFCHR;
        }

IFREG

ISO cnlp


ISDIR()

Ethernet-in-IP

        pub fn ISDIR(m: u32) bool {
            return m & IFMT == IFDIR;
        }

IFSOCK

encapsulation header


ISBLK()

Protocol indep. multicast

        pub fn ISBLK(m: u32) bool {
            return m & IFMT == IFBLK;
        }

ISUID

IP Payload Comp. Protocol


ISREG()

VRRP RFC 2338

        pub fn ISREG(m: u32) bool {
            return m & IFMT == IFREG;
        }

ISVTX

Common Address Resolution Protocol


ISLNK()

PFSYNC

        pub fn ISLNK(m: u32) bool {
            return m & IFMT == IFLNK;
        }

IRUSR

raw IP packet


ISSOCK()

Signal stack base.

        pub fn ISSOCK(m: u32) bool {
            return m & IFMT == IFSOCK;
        }

IXUSR

Signal stack length.


IWHT()

SS_DISABLE and/or SS_ONSTACK.

        pub fn IWHT(m: u32) bool {
            return m & IFMT == IFWHT;
        }
    },
    .freebsd => struct {

IFMT

seconds

        pub const IFMT = 0o170000;

IWGRP

microseconds


IFIFO

File number of entry.

        pub const IFIFO = 0o010000;

IFCHR

Directory offset of entry.

        pub const IFCHR = 0o020000;

IFDIR

Length of this record.

        pub const IFDIR = 0o040000;

IFBLK

File type, one of DT_.

        pub const IFBLK = 0o060000;

IFREG

Length of the name member.

        pub const IFREG = 0o100000;

IFLNK

Name of entry.

        pub const IFLNK = 0o120000;

IFSOCK

Inode number of entry.

        pub const IFSOCK = 0o140000;

IFWHT

Offset of this entry on disk.

        pub const IFWHT = 0o160000;

ISBLK()

Length of this record.


ISUID

File name.

        pub const ISUID = 0o4000;

ISGID

address family for hostname not supported

        pub const ISGID = 0o2000;

ISVTX

temporary failure in name resolution

        pub const ISVTX = 0o1000;

IRWXU

invalid value for ai_flags

        pub const IRWXU = 0o700;

IRUSR

non-recoverable failure in name resolution

        pub const IRUSR = 0o400;

IWUSR

ai_family not supported

        pub const IWUSR = 0o200;

IXUSR

memory allocation failure

        pub const IXUSR = 0o100;

IRWXG

no address associated with hostname

        pub const IRWXG = 0o070;

IRGRP

hostname nor servname provided, or not known

        pub const IRGRP = 0o040;

IWGRP

servname not supported for ai_socktype

        pub const IWGRP = 0o020;

IXGRP

ai_socktype not supported

        pub const IXGRP = 0o010;

IRWXO

system error returned in errno

        pub const IRWXO = 0o007;

IROTH

invalid value for hints

        pub const IROTH = 0o004;

IWOTH

resolved protocol is unknown

        pub const IWOTH = 0o002;

IXOTH

argument buffer overflow

        pub const IXOTH = 0o001;

ISGID

address family for hostname not supported


ISFIFO()

temporary failure in name resolution

        pub fn ISFIFO(m: u32) bool {
            return m & IFMT == IFIFO;
        }

IRWXU

invalid value for ai_flags


ISCHR()

non-recoverable failure in name resolution

        pub fn ISCHR(m: u32) bool {
            return m & IFMT == IFCHR;
        }

IWUSR

ai_family not supported


ISDIR()

memory allocation failure

        pub fn ISDIR(m: u32) bool {
            return m & IFMT == IFDIR;
        }

IRWXG

no address associated with hostname


ISBLK()

hostname nor servname provided, or not known

        pub fn ISBLK(m: u32) bool {
            return m & IFMT == IFBLK;
        }

IWGRP

servname not supported for ai_socktype


ISREG()

ai_socktype not supported

        pub fn ISREG(m: u32) bool {
            return m & IFMT == IFREG;
        }

IRWXO

system error returned in errno


ISLNK()

invalid value for hints

        pub fn ISLNK(m: u32) bool {
            return m & IFMT == IFLNK;
        }

IWOTH

resolved protocol is unknown


ISSOCK()

argument buffer overflow

        pub fn ISSOCK(m: u32) bool {
            return m & IFMT == IFSOCK;
        }

ISFIFO()

address family for hostname not supported


IWHT()

name could not be resolved at this time

        pub fn IWHT(m: u32) bool {
            return m & IFMT == IFWHT;
        }
    },
    .solaris, .illumos => struct {

IFMT

flags parameter had an invalid value

        pub const IFMT = 0o170000;

ISBLK()

non-recoverable failure in name resolution


IFIFO

address family not recognized

        pub const IFIFO = 0o010000;

IFCHR

memory allocation failure

        pub const IFCHR = 0o020000;

IFDIR

no address associated with hostname

        pub const IFDIR = 0o040000;

IFBLK

name does not resolve

        pub const IFBLK = 0o060000;

IFREG

service not recognized for socket type

        pub const IFREG = 0o100000;

IFLNK

intended socket type was not recognized

        pub const IFLNK = 0o120000;

IFSOCK

system error returned in errno

        pub const IFSOCK = 0o140000;
        /// SunOS 2.6 Door
        pub const IFDOOR = 0o150000;
        /// Solaris 10 Event Port
        pub const IFPORT = 0o160000;

IFCHR

argument buffer overflow


ISUID

resolved protocol is unknown

        pub const ISUID = 0o4000;

ISGID

address family for hostname not supported

        pub const ISGID = 0o2000;

ISVTX

name could not be resolved at this time

        pub const ISVTX = 0o1000;

IRWXU

flags parameter had an invalid value

        pub const IRWXU = 0o700;

IRUSR

non-recoverable failure in name resolution

        pub const IRUSR = 0o400;

IWUSR

address family not recognized

        pub const IWUSR = 0o200;

IXUSR

memory allocation failure

        pub const IXUSR = 0o100;

IRWXG

no address associated with hostname

        pub const IRWXG = 0o070;

IRGRP

name does not resolve

        pub const IRGRP = 0o040;

IWGRP

service not recognized for socket type

        pub const IWGRP = 0o020;

IXGRP

intended socket type was not recognized

        pub const IXGRP = 0o010;

IRWXO

system error returned in errno

        pub const IRWXO = 0o007;

IROTH

invalid value for hints

        pub const IROTH = 0o004;

IWOTH

resolved protocol is unknown

        pub const IWOTH = 0o002;

IXOTH

argument buffer overflow

        pub const IXOTH = 0o001;

IWGRP

Renamed from kevent to Kevent to avoid conflict with function name.


ISFIFO()

Identifier for this event.

        pub fn ISFIFO(m: u32) bool {
            return m & IFMT == IFIFO;
        }

IRWXO

Filter for event.


ISCHR()

Action flags for kqueue.

        pub fn ISCHR(m: u32) bool {
            return m & IFMT == IFCHR;
        }

IWOTH

Filter flag value.


ISDIR()

Filter data value.

        pub fn ISDIR(m: u32) bool {
            return m & IFMT == IFDIR;
        }

ISFIFO()

Opaque user data identifier.


ISBLK()

Future extensions.

        pub fn ISBLK(m: u32) bool {
            return m & IFMT == IFBLK;
        }

ISDIR()

Event source.


ISREG()

Source-specific object.

        pub fn ISREG(m: u32) bool {
            return m & IFMT == IFREG;
        }

ISREG()

User cookie.


ISLNK()

Remove directory instead of unlinking file

        pub fn ISLNK(m: u32) bool {
            return m & IFMT == IFLNK;
        }

ISSOCK()

Use effective ids in access check


ISSOCK()

Act on the symlink itself not the target

        pub fn ISSOCK(m: u32) bool {
            return m & IFMT == IFSOCK;
        }

IREAD

Act on target of symlink


        pub fn ISDOOR(m: u32) bool {
            return m & IFMT == IFDOOR;
        }

IEXEC

Path refers to directory


        pub fn ISPORT(m: u32) bool {
            return m & IFMT == IFPORT;
        }
    },
    .netbsd => struct {

IFMT

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 IFMT = 0o170000;

IXOTH

Check access using effective user and group ID


IFIFO

Do not follow symbolic links

        pub const IFIFO = 0o010000;

IFCHR

Follow symbolic link

        pub const IFCHR = 0o020000;

IFDIR

Remove directory instead of file

        pub const IFDIR = 0o040000;

IFBLK

Fail if not under dirfd

        pub const IFBLK = 0o060000;

IFREG

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 IFREG = 0o100000;

IFLNK

Check access using effective user and group ID

        pub const IFLNK = 0o120000;

IFSOCK

Do not follow symbolic links

        pub const IFSOCK = 0o140000;
        pub const IFWHT = 0o160000;

IXUSR

Follow symbolic link


ISUID

Remove directory instead of file

        pub const ISUID = 0o4000;

ISGID

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 ISGID = 0o2000;

ISVTX

Check access using effective user and group ID

        pub const ISVTX = 0o1000;

IRWXU

Do not follow symbolic links

        pub const IRWXU = 0o700;

IRUSR

Follow symbolic link

        pub const IRUSR = 0o400;

IWUSR

Remove directory instead of file

        pub const IWUSR = 0o200;

IXUSR

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 IXUSR = 0o100;

IRWXG

Do not follow symbolic links

        pub const IRWXG = 0o070;

IRGRP

Follow symbolic link

        pub const IRGRP = 0o040;

IWGRP

Remove directory instead of file

        pub const IWGRP = 0o020;

IXGRP

Check access using effective user and group ID

        pub const IXGRP = 0o010;

IRWXO

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 IRWXO = 0o007;

IROTH

Used by libc to communicate failure. Not actually part of the underlying syscall.

        pub const IROTH = 0o004;

IWOTH

Indices into the cc array in the termios struct.

        pub const IWOTH = 0o002;

IXOTH

maximum signal number + 1

        pub const IXOTH = 0o001;

IFSOCK

add event to kq (implies enable)


ISFIFO()

delete event from kq

        pub fn ISFIFO(m: u32) bool {
            return m & IFMT == IFIFO;
        }

IFMT

enable event


ISCHR()

disable event (not reported)

        pub fn ISCHR(m: u32) bool {
            return m & IFMT == IFCHR;
        }

IFMT

only report one occurrence


ISDIR()

clear event state after reporting

        pub fn ISDIR(m: u32) bool {
            return m & IFMT == IFDIR;
        }

IFLNK

force immediate event output ... with or without ERROR ... use KEVENT_FLAG_ERROR_EVENTS on syscalls supporting flags


ISBLK()

disable event after reporting

        pub fn ISBLK(m: u32) bool {
            return m & IFMT == IFBLK;
        }

IFBLK

unique kevent per udata value


ISREG()

... in combination with DELETE will defer delete until udata-specific event enabled. EINPROGRESS will be returned to indicate the deferral

        pub fn ISREG(m: u32) bool {
            return m & IFMT == IFREG;
        }

IFCHR

report that source has vanished ... only valid with DISPATCH2


ISLNK()

reserved by system

        pub fn ISLNK(m: u32) bool {
            return m & IFMT == IFLNK;
        }

INDEX_DIR

filter-specific flag


ISSOCK()

filter-specific flag

        pub fn ISSOCK(m: u32) bool {
            return m & IFMT == IFSOCK;
        }

ISUID

EOF detected


        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;

ISGID

error, data contains errno


ISCHR()

add event to kq (implies enable)

        pub fn ISCHR(m: u32) bool {
            return m & IFMT == IFCHR;
        }
    },
    .haiku => struct {

IFMT

delete event from kq

        pub const IFMT = 0o170000;

IFSOCK

enable event

        pub const IFSOCK = 0o140000;

IFLNK

disable event (not reported)

        pub const IFLNK = 0o120000;

IFREG

only report one occurrence

        pub const IFREG = 0o100000;

IFBLK

clear event state after reporting

        pub const IFBLK = 0o060000;

IFDIR

force immediate event output ... with or without ERROR ... use KEVENT_FLAG_ERROR_EVENTS on syscalls supporting flags

        pub const IFDIR = 0o040000;

IFCHR

disable event after reporting

        pub const IFCHR = 0o020000;

IFIFO

add event to kq (implies enable)

        pub const IFIFO = 0o010000;
        pub const INDEX_DIR = 0o4000000000;

IRWXO

delete event from kq


        pub const IUMSK = 0o7777;

ISUID

enable event

        pub const ISUID = 0o4000;

ISGID

disable event (not reported)

        pub const ISGID = 0o2000;

ISVTX

only report one occurrence

        pub const ISVTX = 0o1000;

IRWXU

clear event state after reporting

        pub const IRWXU = 0o700;

IRUSR

error, event data contains errno

        pub const IRUSR = 0o400;

IWUSR

force immediate event output ... with or without ERROR ... use KEVENT_FLAG_ERROR_EVENTS on syscalls supporting flags

        pub const IWUSR = 0o200;

IXUSR

disable event after reporting

        pub const IXUSR = 0o100;

IRWXG

add event to kq (implies enable)

        pub const IRWXG = 0o070;

IRGRP

delete event from kq

        pub const IRGRP = 0o040;

IWGRP

enable event

        pub const IWGRP = 0o020;

IXGRP

disable event (not reported)

        pub const IXGRP = 0o010;

IRWXO

only report one occurrence

        pub const IRWXO = 0o007;

IROTH

clear event state after reporting

        pub const IROTH = 0o004;

IWOTH

force immediate event output ... with or without ERROR ... use KEVENT_FLAG_ERROR_EVENTS on syscalls supporting flags

        pub const IWOTH = 0o002;

IXOTH

disable event after reporting

        pub const IXOTH = 0o001;

IFBLK

attached to aio requests


ISREG()

attached to vnodes

        pub fn ISREG(m: u32) bool {
            return m & IFMT == IFREG;
        }

IFLNK

attached to struct proc


ISLNK()

attached to struct proc

        pub fn ISLNK(m: u32) bool {
            return m & IFMT == IFLNK;
        }

ISUID

timers


ISBLK()

Mach portsets

        pub fn ISBLK(m: u32) bool {
            return m & IFMT == IFBLK;
        }

ISVTX

Filesystem events


ISDIR()

User events

        pub fn ISDIR(m: u32) bool {
            return m & IFMT == IFDIR;
        }

IRUSR

Virtual memory events


ISCHR()

Exception events

        pub fn ISCHR(m: u32) bool {
            return m & IFMT == IFCHR;
        }

IXUSR

attached to aio requests


ISFIFO()

attached to vnodes

        pub fn ISFIFO(m: u32) bool {
            return m & IFMT == IFIFO;
        }

IRGRP

attached to struct proc


ISSOCK()

attached to struct proc

        pub fn ISSOCK(m: u32) bool {
            return m & IFMT == IFSOCK;
        }

IXGRP

timers


        pub fn ISINDEX(m: u32) bool {
            return m & INDEX_DIR == INDEX_DIR;
        }
    },
    .openbsd => struct {
        pub const IFMT = 0o170000;

IRWXO

Process descriptors


        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;

IROTH

Filesystem events


        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;

IWOTH

User events

        pub const IWOTH = 0o002;

IXOTH

Sendfile events

        pub const IXOTH = 0o001;

ISFIFO()

attached to aio requests


        pub fn ISFIFO(m: u32) bool {
            return m & IFMT == IFIFO;
        }

ISCHR()

attached to vnodes


        pub fn ISCHR(m: u32) bool {
            return m & IFMT == IFCHR;
        }

ISDIR()

attached to struct proc


        pub fn ISDIR(m: u32) bool {
            return m & IFMT == IFDIR;
        }

ISBLK()

attached to struct proc


        pub fn ISBLK(m: u32) bool {
            return m & IFMT == IFBLK;
        }

ISREG()

timers


        pub fn ISREG(m: u32) bool {
            return m & IFMT == IFREG;
        }

ISLNK()

Filesystem events


        pub fn ISLNK(m: u32) bool {
            return m & IFMT == IFLNK;
        }

ISSOCK()

User events


        pub fn ISSOCK(m: u32) bool {
            return m & IFMT == IFSOCK;
        }
    },
    else => void,

DIR

attached to aio requests

};
pub const SA = switch (native_os) {
    .linux => linux.SA,
    .emscripten => emscripten.SA,
    .macos, .ios, .tvos, .watchos, .visionos => struct {
        /// take signal on signal stack

ONSTACK

attached to vnodes

        pub const ONSTACK = 0x0001;
        /// restart system on signal return

RESTART

attached to struct proc

        pub const RESTART = 0x0002;
        /// reset to SIG.DFL when taking signal

RESETHAND

attached to struct proc

        pub const RESETHAND = 0x0004;
        /// do not generate SIG.CHLD on child stop

NOCLDSTOP

timers

        pub const NOCLDSTOP = 0x0008;
        /// don't mask the signal we're delivering

NODEFER

Process descriptors

        pub const NODEFER = 0x0010;
        /// don't keep zombies around

NOCLDWAIT

Filesystem events

        pub const NOCLDWAIT = 0x0020;
        /// signal handler with SIGINFO args

SIGINFO

User events

        pub const SIGINFO = 0x0040;
        /// do not bounce off kernel's sigtramp

USERTRAMP

Sendfile events

        pub const USERTRAMP = 0x0100;
        /// signal handler with SIGINFO args with 64bit regs information

@"64REGSET"

On input, TRIGGER causes the event to be triggered for output.

        pub const @"64REGSET" = 0x0200;
    },
    .freebsd => struct {

ONSTACK

ignore input fflags

        pub const ONSTACK = 0x0001;

RESTART

and fflags

        pub const RESTART = 0x0002;

RESETHAND

or fflags

        pub const RESETHAND = 0x0004;

NOCLDSTOP

copy fflags

        pub const NOCLDSTOP = 0x0008;

NODEFER

mask for operations

        pub const NODEFER = 0x0010;

NOCLDWAIT

low water mark

        pub const NOCLDWAIT = 0x0020;

SIGINFO

OOB data

        pub const SIGINFO = 0x0040;
    },
    .solaris, .illumos => struct {

ONSTACK

vnode was removed

        pub const ONSTACK = 0x00000001;

RESETHAND

data contents changed

        pub const RESETHAND = 0x00000002;

RESTART

size increased

        pub const RESTART = 0x00000004;

SIGINFO

attributes changed

        pub const SIGINFO = 0x00000008;

NODEFER

link count changed

        pub const NODEFER = 0x00000010;

NOCLDWAIT

vnode was renamed

        pub const NOCLDWAIT = 0x00010000;
    },
    .netbsd => struct {

ONSTACK

vnode access was revoked

        pub const ONSTACK = 0x0001;

RESTART

No specific vnode event: to test for EVFILT_READ activation

        pub const RESTART = 0x0002;

RESETHAND

vnode was unlocked by flock(2)

        pub const RESETHAND = 0x0004;

NOCLDSTOP

process exited

        pub const NOCLDSTOP = 0x0008;

NODEFER

process forked

        pub const NODEFER = 0x0010;

NOCLDWAIT

process exec'd

        pub const NOCLDWAIT = 0x0020;

SIGINFO

shared with EVFILT_SIGNAL

        pub const SIGINFO = 0x0040;
    },
    .dragonfly => struct {

ONSTACK

exit status to be returned, valid for child process only

        pub const ONSTACK = 0x0001;

RESTART

provide details on reasons for exit

        pub const RESTART = 0x0002;

RESETHAND

mask for signal & exit status

        pub const RESETHAND = 0x0004;

NODEFER

will react on memory pressure

        pub const NODEFER = 0x0010;

NOCLDWAIT

will quit on memory pressure, possibly after cleaning up dirty state

        pub const NOCLDWAIT = 0x0020;

SIGINFO

will quit immediately on memory pressure

        pub const SIGINFO = 0x0040;
    },
    .haiku => struct {

NOCLDSTOP

there was an error

        pub const NOCLDSTOP = 0x01;

NOCLDWAIT

data is seconds

        pub const NOCLDWAIT = 0x02;

RESETHAND

data is microseconds

        pub const RESETHAND = 0x04;

NODEFER

data is nanoseconds

        pub const NODEFER = 0x08;

RESTART

absolute timeout

        pub const RESTART = 0x10;

ONSTACK

ext[1] holds leeway for power aware timers

        pub const ONSTACK = 0x20;

SIGINFO

system does minimal timer coalescing

        pub const SIGINFO = 0x40;

NOMASK

system does maximum timer coalescing

        pub const NOMASK = NODEFER;

STACK

data is mach absolute time units

        pub const STACK = ONSTACK;

ONESHOT

On input, TRIGGER causes the event to be triggered for output.

        pub const ONESHOT = RESETHAND;
    },
    .openbsd => struct {

ONSTACK

low water mark

        pub const ONSTACK = 0x0001;

RESTART

vnode was removed

        pub const RESTART = 0x0002;

RESETHAND

data contents changed

        pub const RESETHAND = 0x0004;

NOCLDSTOP

size increased

        pub const NOCLDSTOP = 0x0008;

NODEFER

attributes changed

        pub const NODEFER = 0x0010;

NOCLDWAIT

link count changed

        pub const NOCLDWAIT = 0x0020;

SIGINFO

vnode was renamed

        pub const SIGINFO = 0x0040;
    },
    else => void,

DIR

vnode access was revoked

};
pub const sigval_t = switch (native_os) {
    .netbsd, .solaris, .illumos => extern union {
        int: i32,
        ptr: ?*anyopaque,
    },
    else => void,

DIR

process exited

};

_SC

process forked


pub const SC = switch (native_os) {
    .linux => linux.SC,
    else => void,

DIR

process exec'd

};

SET:

mask for signal & exit status


pub const _SC = if (builtin.abi.isAndroid()) enum(c_int) {
    PAGESIZE = 39,
    NPROCESSORS_ONLN = 97,
} else switch (native_os) {
    .driverkit, .ios, .macos, .tvos, .visionos, .watchos => enum(c_int) {
        PAGESIZE = 29,
    },
    .dragonfly => enum(c_int) {
        PAGESIZE = 47,
    },
    .freebsd => enum(c_int) {
        PAGESIZE = 47,
    },
    .fuchsia => enum(c_int) {
        PAGESIZE = 30,
    },
    .haiku => enum(c_int) {
        PAGESIZE = 27,
    },
    .linux => enum(c_int) {
        PAGESIZE = 30,
    },
    .netbsd => enum(c_int) {
        PAGESIZE = 28,
    },
    .openbsd => enum(c_int) {
        PAGESIZE = 28,
    },
    .solaris, .illumos => enum(c_int) {
        PAGESIZE = 11,
        NPROCESSORS_ONLN = 15,
    },
    else => void,

DIR

On input, TRIGGER causes the event to be triggered for output.

};

END:

ignore input fflags


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 {

SET

and fflags

        pub const SET = 0;

CUR

or fflags

        pub const CUR = 1;

END

copy fflags

        pub const END = 2;
    },
    .dragonfly, .solaris, .illumos => struct {

SET

mask for operations

        pub const SET = 0;

CUR

low water mark

        pub const CUR = 1;

END

behave like poll()

        pub const END = 2;

DATA

vnode was removed

        pub const DATA = 3;

HOLE

data contents changed

        pub const HOLE = 4;
    },
    else => void,

DIR

size increased

};
pub const SHUT = switch (native_os) {
    .linux => linux.SHUT,
    .emscripten => emscripten.SHUT,
    else => struct {

RD

attributes changed

        pub const RD = 0;

WR

link count changed

        pub const WR = 1;

RDWR

vnode was renamed

        pub const RDWR = 2;
    },

DIR

vnode access was revoked

};

INT

vnode was opened


/// Signal types
pub const SIG = switch (native_os) {
    .linux => linux.SIG,
    .emscripten => emscripten.SIG,
    .windows => struct {
        /// interrupt

INT

file closed, fd did not allow write

        pub const INT = 2;
        /// illegal instruction - invalid function image

ILL

file closed, fd did allow write

        pub const ILL = 4;
        /// floating point exception

FPE

file was read

        pub const FPE = 8;
        /// segment violation

SEGV

process exited

        pub const SEGV = 11;
        /// Software termination signal from kill

TERM

process forked

        pub const TERM = 15;
        /// Ctrl-Break sequence
        pub const BREAK = 21;
        /// abnormal termination triggered by abort call

ABRT

process exec'd

        pub const ABRT = 22;
        /// SIGABRT compatible with other platforms, same as SIGABRT

ABRT_COMPAT

mask for signal & exit status

        pub const ABRT_COMPAT = 6;

DFL

data is seconds


        // Signal action codes
        /// default signal action
        pub const DFL = 0;
        /// ignore signal

IGN

data is milliseconds

        pub const IGN = 1;
        /// return current value

GET

data is microseconds

        pub const GET = 2;
        /// signal gets error

SGE

data is nanoseconds

        pub const SGE = 3;
        /// acknowledge

ACK

timeout is absolute

        pub const ACK = 4;
        /// Signal error value (returned by signal call on error)

ERR

See std.elf for constants for this

        pub const ERR = -1;
    },
    .macos, .ios, .tvos, .watchos, .visionos => struct {

ERR:

On Linux, res will not be modified on error and freeaddrinfo will potentially crash if you pass it an undefined pointer

        pub const ERR: ?Sigaction.handler_fn = @ptrFromInt(maxInt(usize));

DFL:

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 DFL: ?Sigaction.handler_fn = @ptrFromInt(0);

IGN:

External definitions shared by two or more operating systems.

        pub const IGN: ?Sigaction.handler_fn = @ptrFromInt(1);

HOLD:

macos modernized symbols. x86_64 links to $INODE64 suffix for 64-bit support. Note these are not necessary on aarch64.

        pub const HOLD: ?Sigaction.handler_fn = @ptrFromInt(5);

BLOCK

macos modernized symbols.


        /// block specified signal set

BLOCK

netbsd modernized symbols.

        pub const BLOCK = 1;
        /// unblock specified signal set

UNBLOCK

        pub const UNBLOCK = 2;
        /// set specified signal set

SETMASK

        pub const SETMASK = 3;
        /// hangup

HUP

        pub const HUP = 1;
        /// interrupt

INT

        pub const INT = 2;
        /// quit

QUIT

        pub const QUIT = 3;
        /// illegal instruction (not reset when caught)

ILL

        pub const ILL = 4;
        /// trace trap (not reset when caught)

TRAP

        pub const TRAP = 5;
        /// abort()

ABRT

        pub const ABRT = 6;
        /// pollable event ([XSR] generated, not supported)
        pub const POLL = 7;
        /// compatibility

IOT

        pub const IOT = ABRT;
        /// EMT instruction

EMT

        pub const EMT = 7;
        /// floating point exception

FPE

        pub const FPE = 8;
        /// kill (cannot be caught or ignored)

KILL

        pub const KILL = 9;
        /// bus error

BUS

        pub const BUS = 10;
        /// segmentation violation

SEGV

        pub const SEGV = 11;
        /// bad argument to system call

SYS

        pub const SYS = 12;
        /// write on a pipe with no one to read it

PIPE

        pub const PIPE = 13;
        /// alarm clock

ALRM

        pub const ALRM = 14;
        /// software termination signal from kill

TERM

        pub const TERM = 15;
        /// urgent condition on IO channel

URG

        pub const URG = 16;
        /// sendable stop signal not from tty

STOP

        pub const STOP = 17;
        /// stop signal from tty

TSTP

        pub const TSTP = 18;
        /// continue a stopped process

CONT

        pub const CONT = 19;
        /// to parent on child stop or exit

CHLD

        pub const CHLD = 20;
        /// to readers pgrp upon background tty read

TTIN

        pub const TTIN = 21;
        /// like TTIN for output if (tp->t_local&LTOSTOP)

TTOU

        pub const TTOU = 22;
        /// input/output possible signal

IO

        pub const IO = 23;
        /// exceeded CPU time limit

XCPU

        pub const XCPU = 24;
        /// exceeded file size limit

XFSZ

        pub const XFSZ = 25;
        /// virtual time alarm

VTALRM

        pub const VTALRM = 26;
        /// profiling time alarm

PROF

        pub const PROF = 27;
        /// window size changes

WINCH

        pub const WINCH = 28;
        /// information request

INFO

        pub const INFO = 29;
        /// user defined signal 1

USR1

        pub const USR1 = 30;
        /// user defined signal 2

USR2

        pub const USR2 = 31;
    },
    .freebsd => struct {

HUP

        pub const HUP = 1;

INT

        pub const INT = 2;

QUIT

        pub const QUIT = 3;

ILL

        pub const ILL = 4;

TRAP

        pub const TRAP = 5;

ABRT

        pub const ABRT = 6;

IOT

        pub const IOT = ABRT;

EMT

        pub const EMT = 7;

FPE

        pub const FPE = 8;

KILL

        pub const KILL = 9;

BUS

        pub const BUS = 10;

SEGV

        pub const SEGV = 11;

SYS

        pub const SYS = 12;

PIPE

        pub const PIPE = 13;

ALRM

        pub const ALRM = 14;

TERM

        pub const TERM = 15;

URG

        pub const URG = 16;

STOP

        pub const STOP = 17;

TSTP

        pub const TSTP = 18;

CONT

        pub const CONT = 19;

CHLD

        pub const CHLD = 20;

TTIN

        pub const TTIN = 21;

TTOU

        pub const TTOU = 22;

IO

        pub const IO = 23;

XCPU

        pub const XCPU = 24;

XFSZ

        pub const XFSZ = 25;

VTALRM

        pub const VTALRM = 26;

PROF

        pub const PROF = 27;

WINCH

        pub const WINCH = 28;

INFO

        pub const INFO = 29;

USR1

        pub const USR1 = 30;

USR2

        pub const USR2 = 31;

THR

        pub const THR = 32;

LWP

        pub const LWP = THR;

LIBRT

        pub const LIBRT = 33;

RTMIN


        pub const RTMIN = 65;

RTMAX

        pub const RTMAX = 126;

BLOCK


BLOCK

        pub const BLOCK = 1;

UNBLOCK

        pub const UNBLOCK = 2;

SETMASK

        pub const SETMASK = 3;

IGN:


DFL:

        pub const DFL: ?Sigaction.handler_fn = @ptrFromInt(0);

IGN:

        pub const IGN: ?Sigaction.handler_fn = @ptrFromInt(1);

ERR:

        pub const ERR: ?Sigaction.handler_fn = @ptrFromInt(maxInt(usize));

IDX()


WORDS

        pub const WORDS = 4;

MAXSIG

        pub const MAXSIG = 128;

VALID()


IDX()

        pub inline fn IDX(sig: usize) usize {
            return sig - 1;
        }

WORD()

        pub inline fn WORD(sig: usize) usize {
            return IDX(sig) >> 5;
        }

BIT()

        pub inline fn BIT(sig: usize) usize {
            return 1 << (IDX(sig) & 31);
        }

VALID()

        pub inline fn VALID(sig: usize) usize {
            return sig <= MAXSIG and sig > 0;
        }
    },
    .solaris, .illumos => struct {

DFL:

        pub const DFL: ?Sigaction.handler_fn = @ptrFromInt(0);

ERR:

        pub const ERR: ?Sigaction.handler_fn = @ptrFromInt(maxInt(usize));

IGN:

        pub const IGN: ?Sigaction.handler_fn = @ptrFromInt(1);
        pub const HOLD: ?Sigaction.handler_fn = @ptrFromInt(2);

SIG_UNBLOCK


WORDS

        pub const WORDS = 4;
        pub const MAXSIG = 75;

HUP


        pub const SIG_BLOCK = 1;
        pub const SIG_UNBLOCK = 2;
        pub const SIG_SETMASK = 3;

INT


HUP

        pub const HUP = 1;

INT

        pub const INT = 2;

QUIT

        pub const QUIT = 3;

ILL

        pub const ILL = 4;

TRAP

        pub const TRAP = 5;
        pub const IOT = 6;

ABRT

        pub const ABRT = 6;

EMT

        pub const EMT = 7;

FPE

        pub const FPE = 8;

KILL

        pub const KILL = 9;

BUS

        pub const BUS = 10;

SEGV

        pub const SEGV = 11;

SYS

        pub const SYS = 12;

PIPE

        pub const PIPE = 13;

ALRM

        pub const ALRM = 14;

TERM

        pub const TERM = 15;
        pub const USR1 = 16;

USR2

        pub const USR2 = 17;

CLD

        pub const CLD = 18;

CHLD

        pub const CHLD = 18;

PWR

        pub const PWR = 19;

WINCH

        pub const WINCH = 20;

URG

        pub const URG = 21;

POLL

        pub const POLL = 22;

IO

        pub const IO = .POLL;

STOP

        pub const STOP = 23;

TSTP

        pub const TSTP = 24;

CONT

        pub const CONT = 25;

TTIN

        pub const TTIN = 26;

TTOU

        pub const TTOU = 27;

VTALRM

        pub const VTALRM = 28;

PROF

        pub const PROF = 29;

XCPU

        pub const XCPU = 30;

XFSZ

        pub const XFSZ = 31;

WAITING

        pub const WAITING = 32;

LWP

        pub const LWP = 33;

FREEZE

        pub const FREEZE = 34;

THAW

        pub const THAW = 35;

CANCEL

        pub const CANCEL = 36;

LOST

        pub const LOST = 37;

XRES

        pub const XRES = 38;

JVM1

        pub const JVM1 = 39;

JVM2

        pub const JVM2 = 40;

INFO

        pub const INFO = 41;

RTMIN


        pub const RTMIN = 42;

RTMAX

        pub const RTMAX = 74;

IDX()


IDX()

        pub inline fn IDX(sig: usize) usize {
            return sig - 1;
        }

WORD()

        pub inline fn WORD(sig: usize) usize {
            return IDX(sig) >> 5;
        }

BIT()

        pub inline fn BIT(sig: usize) usize {
            return 1 << (IDX(sig) & 31);
        }

VALID()

        pub inline fn VALID(sig: usize) usize {
            return sig <= MAXSIG and sig > 0;
        }
    },
    .netbsd => struct {

DFL:

        pub const DFL: ?Sigaction.handler_fn = @ptrFromInt(0);

IGN:

        pub const IGN: ?Sigaction.handler_fn = @ptrFromInt(1);

ERR:

        pub const ERR: ?Sigaction.handler_fn = @ptrFromInt(maxInt(usize));

MAXSIG


WORDS

        pub const WORDS = 4;
        pub const MAXSIG = 128;

UNBLOCK


BLOCK

        pub const BLOCK = 1;

UNBLOCK

        pub const UNBLOCK = 2;

SETMASK

        pub const SETMASK = 3;

QUIT


HUP

        pub const HUP = 1;

INT

        pub const INT = 2;

QUIT

        pub const QUIT = 3;

ILL

        pub const ILL = 4;

TRAP

        pub const TRAP = 5;

ABRT

        pub const ABRT = 6;

IOT

        pub const IOT = ABRT;

EMT

        pub const EMT = 7;

FPE

        pub const FPE = 8;

KILL

        pub const KILL = 9;

BUS

        pub const BUS = 10;

SEGV

        pub const SEGV = 11;

SYS

        pub const SYS = 12;

PIPE

        pub const PIPE = 13;

ALRM

        pub const ALRM = 14;

TERM

        pub const TERM = 15;

URG

        pub const URG = 16;

STOP

        pub const STOP = 17;

TSTP

        pub const TSTP = 18;

CONT

        pub const CONT = 19;

CHLD

        pub const CHLD = 20;

TTIN

        pub const TTIN = 21;

TTOU

        pub const TTOU = 22;

IO

        pub const IO = 23;

XCPU

        pub const XCPU = 24;

XFSZ

        pub const XFSZ = 25;

VTALRM

        pub const VTALRM = 26;

PROF

        pub const PROF = 27;

WINCH

        pub const WINCH = 28;

INFO

        pub const INFO = 29;

USR1

        pub const USR1 = 30;

USR2

        pub const USR2 = 31;

PWR

        pub const PWR = 32;

WORD()


        pub const RTMIN = 33;
        pub const RTMAX = 63;

BIT()


        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);
        }

VALID()

        pub inline fn VALID(sig: usize) usize {
            return sig <= MAXSIG and sig > 0;
        }
    },
    .dragonfly => struct {

DFL:

        pub const DFL: ?Sigaction.handler_fn = @ptrFromInt(0);

IGN:

        pub const IGN: ?Sigaction.handler_fn = @ptrFromInt(1);

ERR:

        pub const ERR: ?Sigaction.handler_fn = @ptrFromInt(maxInt(usize));

BLOCK


BLOCK

        pub const BLOCK = 1;

UNBLOCK

        pub const UNBLOCK = 2;

SETMASK

        pub const SETMASK = 3;

HUP


IOT

        pub const IOT = ABRT;

HUP

        pub const HUP = 1;

INT

        pub const INT = 2;

QUIT

        pub const QUIT = 3;

ILL

        pub const ILL = 4;

TRAP

        pub const TRAP = 5;

ABRT

        pub const ABRT = 6;

EMT

        pub const EMT = 7;

FPE

        pub const FPE = 8;

KILL

        pub const KILL = 9;

BUS

        pub const BUS = 10;

SEGV

        pub const SEGV = 11;

SYS

        pub const SYS = 12;

PIPE

        pub const PIPE = 13;

ALRM

        pub const ALRM = 14;

TERM

        pub const TERM = 15;

URG

        pub const URG = 16;

STOP

        pub const STOP = 17;

TSTP

        pub const TSTP = 18;

CONT

        pub const CONT = 19;

CHLD

        pub const CHLD = 20;

TTIN

        pub const TTIN = 21;

TTOU

        pub const TTOU = 22;

IO

        pub const IO = 23;

XCPU

        pub const XCPU = 24;

XFSZ

        pub const XFSZ = 25;

VTALRM

        pub const VTALRM = 26;

PROF

        pub const PROF = 27;

WINCH

        pub const WINCH = 28;

INFO

        pub const INFO = 29;

USR1

        pub const USR1 = 30;

USR2

        pub const USR2 = 31;
        pub const THR = 32;
        pub const CKPT = 33;

CKPTEXIT

        pub const CKPTEXIT = 34;

WORDS


        pub const WORDS = 4;
    },
    .haiku => struct {

DFL:

        pub const DFL: ?Sigaction.handler_fn = @ptrFromInt(0);

IGN:

        pub const IGN: ?Sigaction.handler_fn = @ptrFromInt(1);

ERR:

        pub const ERR: ?Sigaction.handler_fn = @ptrFromInt(maxInt(usize));

HOLD:


HOLD:

        pub const HOLD: ?Sigaction.handler_fn = @ptrFromInt(3);

INT


HUP

        pub const HUP = 1;

INT

        pub const INT = 2;

QUIT

        pub const QUIT = 3;

ILL

        pub const ILL = 4;
        pub const CHLD = 5;

ABRT

        pub const ABRT = 6;

IOT

        pub const IOT = ABRT;
        pub const PIPE = 7;

FPE

        pub const FPE = 8;

KILL

        pub const KILL = 9;

STOP

        pub const STOP = 10;

SEGV

        pub const SEGV = 11;

CONT

        pub const CONT = 12;

TSTP

        pub const TSTP = 13;

ALRM

        pub const ALRM = 14;

TERM

        pub const TERM = 15;

TTIN

        pub const TTIN = 16;

TTOU

        pub const TTOU = 17;

USR1

        pub const USR1 = 18;

USR2

        pub const USR2 = 19;

WINCH

        pub const WINCH = 20;

KILLTHR

        pub const KILLTHR = 21;

TRAP

        pub const TRAP = 22;

POLL

        pub const POLL = 23;

PROF

        pub const PROF = 24;

SYS

        pub const SYS = 25;

URG

        pub const URG = 26;

VTALRM

        pub const VTALRM = 27;

XCPU

        pub const XCPU = 28;

XFSZ

        pub const XFSZ = 29;

BUS

        pub const BUS = 30;

RESERVED1

        pub const RESERVED1 = 31;

RESERVED2

        pub const RESERVED2 = 32;

BLOCK


BLOCK

        pub const BLOCK = 1;

UNBLOCK

        pub const UNBLOCK = 2;

SETMASK

        pub const SETMASK = 3;
    },
    .openbsd => struct {
        pub const DFL: ?Sigaction.handler_fn = @ptrFromInt(0);

IGN:

        pub const IGN: ?Sigaction.handler_fn = @ptrFromInt(1);

ERR:

        pub const ERR: ?Sigaction.handler_fn = @ptrFromInt(maxInt(usize));

CATCH:

        pub const CATCH: ?Sigaction.handler_fn = @ptrFromInt(2);

HOLD:

        pub const HOLD: ?Sigaction.handler_fn = @ptrFromInt(3);

HUP


        pub const HUP = 1;

INT

        pub const INT = 2;

QUIT

        pub const QUIT = 3;

ILL

        pub const ILL = 4;

TRAP

        pub const TRAP = 5;

ABRT

        pub const ABRT = 6;

IOT

        pub const IOT = ABRT;

EMT

        pub const EMT = 7;

FPE

        pub const FPE = 8;

KILL

        pub const KILL = 9;

BUS

        pub const BUS = 10;

SEGV

        pub const SEGV = 11;

SYS

        pub const SYS = 12;

PIPE

        pub const PIPE = 13;

ALRM

        pub const ALRM = 14;

TERM

        pub const TERM = 15;

URG

        pub const URG = 16;

STOP

        pub const STOP = 17;

TSTP

        pub const TSTP = 18;

CONT

        pub const CONT = 19;

CHLD

        pub const CHLD = 20;

TTIN

        pub const TTIN = 21;

TTOU

        pub const TTOU = 22;

IO

        pub const IO = 23;

XCPU

        pub const XCPU = 24;

XFSZ

        pub const XFSZ = 25;

VTALRM

        pub const VTALRM = 26;

PROF

        pub const PROF = 27;

WINCH

        pub const WINCH = 28;

INFO

        pub const INFO = 29;

USR1

        pub const USR1 = 30;

USR2

        pub const USR2 = 31;

PWR

        pub const PWR = 32;

BLOCK


        pub const BLOCK = 1;

UNBLOCK

        pub const UNBLOCK = 2;

SETMASK

        pub const SETMASK = 3;
    },
    else => void,

DIR

};

STDIN_FILENO


pub const SIOCGIFINDEX = switch (native_os) {
    .linux => linux.SIOCGIFINDEX,
    .emscripten => emscripten.SIOCGIFINDEX,
    .solaris, .illumos => solaris.SIOCGLIFINDEX,
    else => void,

DIR

};

STDERR_FILENO


pub const STDIN_FILENO = switch (native_os) {
    .linux => linux.STDIN_FILENO,
    .emscripten => emscripten.STDIN_FILENO,
    else => 0,

DIR

};
pub const STDOUT_FILENO = switch (native_os) {
    .linux => linux.STDOUT_FILENO,
    .emscripten => emscripten.STDOUT_FILENO,
    else => 1,

DIR

};
pub const STDERR_FILENO = switch (native_os) {
    .linux => linux.STDERR_FILENO,
    .emscripten => emscripten.STDERR_FILENO,
    else => 2,

DIR

};

sigaction_fn


pub const SYS = switch (native_os) {
    .linux => linux.SYS,
    else => void,

DIR

};
/// Renamed from `sigaction` to `Sigaction` to avoid conflict with function name.
pub const Sigaction = switch (native_os) {
    .linux => switch (native_arch) {
        .mips,
        .mipsel,
        .mips64,
        .mips64el,
        => if (builtin.target.abi.isMusl())
            linux.Sigaction
        else if (builtin.target.ptrBitWidth() == 64) extern struct {

handler_fn

            pub const handler_fn = *align(1) const fn (i32) callconv(.c) void;

sigaction_fn

            pub const sigaction_fn = *const fn (i32, *const siginfo_t, ?*anyopaque) callconv(.c) void;

sigaction_fn


            flags: c_uint,
            handler: extern union {
                handler: ?handler_fn,
                sigaction: ?sigaction_fn,
            },
            mask: sigset_t,
            restorer: ?*const fn () callconv(.c) void = null,
        } else 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_fn


            flags: c_uint,
            handler: extern union {
                handler: ?handler_fn,
                sigaction: ?sigaction_fn,
            },
            mask: sigset_t,
            restorer: ?*const fn () callconv(.c) void = null,
            __resv: [1]c_int = .{0},
        },
        .s390x => if (builtin.abi == .gnu) 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;

sigaction_fn


            handler: extern union {
                handler: ?handler_fn,
                sigaction: ?sigaction_fn,
            },
            __glibc_reserved0: c_int = 0,
            flags: c_uint,
            restorer: ?*const fn () callconv(.c) void = null,
            mask: sigset_t,
        } else linux.Sigaction,
        else => linux.Sigaction,
    },
    .emscripten => emscripten.Sigaction,
    .netbsd, .macos, .ios, .tvos, .watchos, .visionos => extern struct {

handler_fn

        pub const handler_fn = *align(1) const fn (i32) callconv(.c) void;

sigaction_fn

        pub const sigaction_fn = *const fn (i32, *const siginfo_t, ?*anyopaque) callconv(.c) void;

handler_fn


        handler: extern union {
            handler: ?handler_fn,
            sigaction: ?sigaction_fn,
        },
        mask: sigset_t,
        flags: c_uint,
    },
    .dragonfly, .freebsd => extern struct {

handler_fn

        pub const handler_fn = *align(1) const fn (i32) callconv(.c) void;

sigaction_fn

        pub const sigaction_fn = *const fn (i32, *const siginfo_t, ?*anyopaque) callconv(.c) void;

sigaction_fn


        /// 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 {

handler_fn

        pub const handler_fn = *align(1) const fn (i32) callconv(.c) void;

sigaction_fn

        pub const sigaction_fn = *const fn (i32, *const siginfo_t, ?*anyopaque) callconv(.c) void;

T


        /// 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;

IOCGWINSZ


        /// signal handler
        handler: extern union {
            handler: handler_fn,
            sigaction: sigaction_fn,
        },

IOCEXCL


        /// signal mask to apply
        mask: sigset_t,

IOCNXCL


        /// see signal options
        flags: i32,

IOCSCTTY


        /// 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;

IOCGPGRP


        /// 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,

DIR

};
pub const T = switch (native_os) {
    .linux => linux.T,
    .macos, .ios, .tvos, .watchos, .visionos => struct {
        pub const IOCGWINSZ = ior(0x40000000, 't', 104, @sizeOf(winsize));

IOCOUTQ


        fn ior(inout: u32, group: usize, num: usize, len: usize) usize {
            return (inout | ((len & IOCPARM_MASK) << 16) | ((group) << 8) | (num));
        }
    },
    .freebsd => struct {

IOCEXCL

        pub const IOCEXCL = 0x2000740d;

IOCNXCL

        pub const IOCNXCL = 0x2000740e;

IOCSCTTY

        pub const IOCSCTTY = 0x20007461;

IOCGPGRP

        pub const IOCGPGRP = 0x40047477;

IOCSPGRP

        pub const IOCSPGRP = 0x80047476;

IOCOUTQ

        pub const IOCOUTQ = 0x40047473;

IOCSTI

        pub const IOCSTI = 0x80017472;

IOCGWINSZ

        pub const IOCGWINSZ = 0x40087468;

IOCSWINSZ

        pub const IOCSWINSZ = 0x80087467;

IOCMGET

        pub const IOCMGET = 0x4004746a;

IOCMBIS

        pub const IOCMBIS = 0x8004746c;

IOCMBIC

        pub const IOCMBIC = 0x8004746b;

IOCMSET

        pub const IOCMSET = 0x8004746d;
        pub const FIONREAD = 0x4004667f;

IOCCONS

        pub const IOCCONS = 0x80047462;

IOCPKT

        pub const IOCPKT = 0x80047470;
        pub const FIONBIO = 0x8004667e;

IOCNOTTY

        pub const IOCNOTTY = 0x20007471;

IOCSETD

        pub const IOCSETD = 0x8004741b;

IOCGETD

        pub const IOCGETD = 0x4004741a;

IOCSBRK

        pub const IOCSBRK = 0x2000747b;

IOCCBRK

        pub const IOCCBRK = 0x2000747a;

IOCGSID

        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);

CSETAW

        pub const CSETAW = tioc('T', 3);

CSETAF

        pub const CSETAF = tioc('T', 4);

CSBRK

        pub const CSBRK = tioc('T', 5);

CXONC

        pub const CXONC = tioc('T', 6);

CFLSH

        pub const CFLSH = tioc('T', 7);

IOCGWINSZ

        pub const IOCGWINSZ = tioc('T', 104);

IOCSWINSZ

        pub const IOCSWINSZ = tioc('T', 103);
        // Softcarrier ioctls

IOCGSOFTCAR

        pub const IOCGSOFTCAR = tioc('T', 105);

IOCSSOFTCAR

        pub const IOCSSOFTCAR = tioc('T', 106);
        // termios ioctls

CGETS

        pub const CGETS = tioc('T', 13);

CSETS

        pub const CSETS = tioc('T', 14);

CSANOW

        pub const CSANOW = tioc('T', 14);

CSETSW

        pub const CSETSW = tioc('T', 15);

CSADRAIN

        pub const CSADRAIN = tioc('T', 15);

CSETSF

        pub const CSETSF = tioc('T', 16);

IOCSETLD

        pub const IOCSETLD = tioc('T', 123);

IOCGETLD

        pub const IOCGETLD = tioc('T', 124);
        // NTP PPS ioctls

IOCGPPS

        pub const IOCGPPS = tioc('T', 125);

IOCSPPS

        pub const IOCSPPS = tioc('T', 126);

IOCGPPSEV

        pub const IOCGPPSEV = tioc('T', 127);

IOCGETD


        pub const IOCGETD = tioc('t', 0);

IOCSETD

        pub const IOCSETD = tioc('t', 1);

IOCHPCL

        pub const IOCHPCL = tioc('t', 2);

IOCGETP

        pub const IOCGETP = tioc('t', 8);

IOCSETP

        pub const IOCSETP = tioc('t', 9);

IOCSETN

        pub const IOCSETN = tioc('t', 10);

IOCEXCL

        pub const IOCEXCL = tioc('t', 13);

IOCNXCL

        pub const IOCNXCL = tioc('t', 14);

IOCFLUSH

        pub const IOCFLUSH = tioc('t', 16);

IOCSETC

        pub const IOCSETC = tioc('t', 17);

IOCGETC

        pub const IOCGETC = tioc('t', 18);
        /// bis local mode bits

IOCLBIS

        pub const IOCLBIS = tioc('t', 127);
        /// bic local mode bits

IOCLBIC

        pub const IOCLBIC = tioc('t', 126);
        /// set entire local mode word

IOCLSET

        pub const IOCLSET = tioc('t', 125);
        /// get local modes

IOCLGET

        pub const IOCLGET = tioc('t', 124);
        /// set break bit

IOCSBRK

        pub const IOCSBRK = tioc('t', 123);
        /// clear break bit

IOCCBRK

        pub const IOCCBRK = tioc('t', 122);
        /// set data terminal ready

IOCSDTR

        pub const IOCSDTR = tioc('t', 121);
        /// clear data terminal ready

IOCCDTR

        pub const IOCCDTR = tioc('t', 120);
        /// set local special chars

IOCSLTC

        pub const IOCSLTC = tioc('t', 117);
        /// get local special chars

IOCGLTC

        pub const IOCGLTC = tioc('t', 116);
        /// driver output queue size

IOCOUTQ

        pub const IOCOUTQ = tioc('t', 115);
        /// void tty association

IOCNOTTY

        pub const IOCNOTTY = tioc('t', 113);
        /// get a ctty

IOCSCTTY

        pub const IOCSCTTY = tioc('t', 132);
        /// stop output, like ^S

IOCSTOP

        pub const IOCSTOP = tioc('t', 111);
        /// start output, like ^Q

IOCSTART

        pub const IOCSTART = tioc('t', 110);
        /// get pgrp of tty

IOCGPGRP

        pub const IOCGPGRP = tioc('t', 20);
        /// set pgrp of tty

IOCSPGRP

        pub const IOCSPGRP = tioc('t', 21);
        /// get session id on ctty

IOCGSID

        pub const IOCGSID = tioc('t', 22);
        /// simulate terminal input

IOCSTI

        pub const IOCSTI = tioc('t', 23);
        /// set all modem bits

IOCMSET

        pub const IOCMSET = tioc('t', 26);
        /// bis modem bits

IOCMBIS

        pub const IOCMBIS = tioc('t', 27);
        /// bic modem bits

IOCMBIC

        pub const IOCMBIC = tioc('t', 28);
        /// get all modem bits

IOCMGET

        pub const IOCMGET = tioc('t', 29);

IOCCBRK


        fn tioc(t: u16, num: u8) u16 {
            return (t << 8) | num;
        }
    },
    .netbsd => struct {

IOCCBRK

        pub const IOCCBRK = 0x2000747a;

IOCCDTR

        pub const IOCCDTR = 0x20007478;

IOCCONS

        pub const IOCCONS = 0x80047462;

IOCDCDTIMESTAMP

        pub const IOCDCDTIMESTAMP = 0x40107458;

IOCDRAIN

        pub const IOCDRAIN = 0x2000745e;

IOCEXCL

        pub const IOCEXCL = 0x2000740d;

IOCEXT

        pub const IOCEXT = 0x80047460;

IOCFLAG_CDTRCTS

        pub const IOCFLAG_CDTRCTS = 0x10;

IOCFLAG_CLOCAL

        pub const IOCFLAG_CLOCAL = 0x2;

IOCFLAG_CRTSCTS

        pub const IOCFLAG_CRTSCTS = 0x4;

IOCFLAG_MDMBUF

        pub const IOCFLAG_MDMBUF = 0x8;

IOCFLAG_SOFTCAR

        pub const IOCFLAG_SOFTCAR = 0x1;

IOCFLUSH

        pub const IOCFLUSH = 0x80047410;

IOCGETA

        pub const IOCGETA = 0x402c7413;

IOCGETD

        pub const IOCGETD = 0x4004741a;

IOCGFLAGS

        pub const IOCGFLAGS = 0x4004745d;

IOCGLINED

        pub const IOCGLINED = 0x40207442;

IOCGPGRP

        pub const IOCGPGRP = 0x40047477;

IOCGQSIZE

        pub const IOCGQSIZE = 0x40047481;

IOCGRANTPT

        pub const IOCGRANTPT = 0x20007447;

IOCGSID

        pub const IOCGSID = 0x40047463;

IOCGSIZE

        pub const IOCGSIZE = 0x40087468;

IOCGWINSZ

        pub const IOCGWINSZ = 0x40087468;

IOCMBIC

        pub const IOCMBIC = 0x8004746b;

IOCMBIS

        pub const IOCMBIS = 0x8004746c;

IOCMGET

        pub const IOCMGET = 0x4004746a;

IOCMSET

        pub const IOCMSET = 0x8004746d;

IOCM_CAR

        pub const IOCM_CAR = 0x40;

IOCM_CD

        pub const IOCM_CD = 0x40;

IOCM_CTS

        pub const IOCM_CTS = 0x20;

IOCM_DSR

        pub const IOCM_DSR = 0x100;

IOCM_DTR

        pub const IOCM_DTR = 0x2;

IOCM_LE

        pub const IOCM_LE = 0x1;

IOCM_RI

        pub const IOCM_RI = 0x80;

IOCM_RNG

        pub const IOCM_RNG = 0x80;

IOCM_RTS

        pub const IOCM_RTS = 0x4;

IOCM_SR

        pub const IOCM_SR = 0x10;

IOCM_ST

        pub const IOCM_ST = 0x8;

IOCNOTTY

        pub const IOCNOTTY = 0x20007471;

IOCNXCL

        pub const IOCNXCL = 0x2000740e;

IOCOUTQ

        pub const IOCOUTQ = 0x40047473;

IOCPKT

        pub const IOCPKT = 0x80047470;

IOCPKT_DATA

        pub const IOCPKT_DATA = 0x0;

IOCPKT_DOSTOP

        pub const IOCPKT_DOSTOP = 0x20;

IOCPKT_FLUSHREAD

        pub const IOCPKT_FLUSHREAD = 0x1;

IOCPKT_FLUSHWRITE

        pub const IOCPKT_FLUSHWRITE = 0x2;

IOCPKT_IOCTL

        pub const IOCPKT_IOCTL = 0x40;

IOCPKT_NOSTOP

        pub const IOCPKT_NOSTOP = 0x10;

IOCPKT_START

        pub const IOCPKT_START = 0x8;

IOCPKT_STOP

        pub const IOCPKT_STOP = 0x4;

IOCPTMGET

        pub const IOCPTMGET = 0x40287446;

IOCPTSNAME

        pub const IOCPTSNAME = 0x40287448;

IOCRCVFRAME

        pub const IOCRCVFRAME = 0x80087445;

IOCREMOTE

        pub const IOCREMOTE = 0x80047469;

IOCSBRK

        pub const IOCSBRK = 0x2000747b;

IOCSCTTY

        pub const IOCSCTTY = 0x20007461;

IOCSDTR

        pub const IOCSDTR = 0x20007479;

IOCSETA

        pub const IOCSETA = 0x802c7414;

IOCSETAF

        pub const IOCSETAF = 0x802c7416;

IOCSETAW

        pub const IOCSETAW = 0x802c7415;

IOCSETD

        pub const IOCSETD = 0x8004741b;

IOCSFLAGS

        pub const IOCSFLAGS = 0x8004745c;

IOCSIG

        pub const IOCSIG = 0x2000745f;

IOCSLINED

        pub const IOCSLINED = 0x80207443;

IOCSPGRP

        pub const IOCSPGRP = 0x80047476;

IOCSQSIZE

        pub const IOCSQSIZE = 0x80047480;

IOCSSIZE

        pub const IOCSSIZE = 0x80087467;

IOCSTART

        pub const IOCSTART = 0x2000746e;

IOCSTAT

        pub const IOCSTAT = 0x80047465;

IOCSTI

        pub const IOCSTI = 0x80017472;

IOCSTOP

        pub const IOCSTOP = 0x2000746f;

IOCSWINSZ

        pub const IOCSWINSZ = 0x80087467;

IOCUCNTL

        pub const IOCUCNTL = 0x80047466;

IOCXMTFRAME

        pub const IOCXMTFRAME = 0x80087444;
    },
    .haiku => struct {
        pub const CGETA = 0x8000;

CSETA

        pub const CSETA = 0x8001;

CSETAF

        pub const CSETAF = 0x8002;

CSETAW

        pub const CSETAW = 0x8003;

CWAITEVENT

        pub const CWAITEVENT = 0x8004;

CSBRK

        pub const CSBRK = 0x8005;

CFLSH

        pub const CFLSH = 0x8006;

CXONC

        pub const CXONC = 0x8007;

CQUERYCONNECTED

        pub const CQUERYCONNECTED = 0x8008;

CGETBITS

        pub const CGETBITS = 0x8009;

CSETDTR

        pub const CSETDTR = 0x8010;

CSETRTS

        pub const CSETRTS = 0x8011;

IOCGWINSZ

        pub const IOCGWINSZ = 0x8012;

IOCSWINSZ

        pub const IOCSWINSZ = 0x8013;

CVTIME

        pub const CVTIME = 0x8014;

IOCGPGRP

        pub const IOCGPGRP = 0x8015;

IOCSPGRP

        pub const IOCSPGRP = 0x8016;

IOCSCTTY

        pub const IOCSCTTY = 0x8017;

IOCMGET

        pub const IOCMGET = 0x8018;

IOCMSET

        pub const IOCMSET = 0x8019;

IOCSBRK

        pub const IOCSBRK = 0x8020;

IOCCBRK

        pub const IOCCBRK = 0x8021;

IOCMBIS

        pub const IOCMBIS = 0x8022;

IOCMBIC

        pub const IOCMBIC = 0x8023;

IOCGSID

        pub const IOCGSID = 0x8024;

FIONREAD


        pub const FIONREAD = 0xbe000001;

FIONBIO

        pub const FIONBIO = 0xbe000000;
    },
    .openbsd => struct {

IOCCBRK

        pub const IOCCBRK = 0x2000747a;

IOCCDTR

        pub const IOCCDTR = 0x20007478;

IOCCONS

        pub const IOCCONS = 0x80047462;

IOCDCDTIMESTAMP

        pub const IOCDCDTIMESTAMP = 0x40107458;

IOCDRAIN

        pub const IOCDRAIN = 0x2000745e;

IOCEXCL

        pub const IOCEXCL = 0x2000740d;

IOCEXT

        pub const IOCEXT = 0x80047460;

IOCFLAG_CDTRCTS

        pub const IOCFLAG_CDTRCTS = 0x10;

IOCFLAG_CLOCAL

        pub const IOCFLAG_CLOCAL = 0x2;

IOCFLAG_CRTSCTS

        pub const IOCFLAG_CRTSCTS = 0x4;

IOCFLAG_MDMBUF

        pub const IOCFLAG_MDMBUF = 0x8;

IOCFLAG_SOFTCAR

        pub const IOCFLAG_SOFTCAR = 0x1;

IOCFLUSH

        pub const IOCFLUSH = 0x80047410;

IOCGETA

        pub const IOCGETA = 0x402c7413;

IOCGETD

        pub const IOCGETD = 0x4004741a;

IOCGFLAGS

        pub const IOCGFLAGS = 0x4004745d;

IOCGLINED

        pub const IOCGLINED = 0x40207442;

IOCGPGRP

        pub const IOCGPGRP = 0x40047477;

IOCGQSIZE

        pub const IOCGQSIZE = 0x40047481;

IOCGRANTPT

        pub const IOCGRANTPT = 0x20007447;

IOCGSID

        pub const IOCGSID = 0x40047463;

IOCGSIZE

        pub const IOCGSIZE = 0x40087468;

IOCGWINSZ

        pub const IOCGWINSZ = 0x40087468;

IOCMBIC

        pub const IOCMBIC = 0x8004746b;

IOCMBIS

        pub const IOCMBIS = 0x8004746c;

IOCMGET

        pub const IOCMGET = 0x4004746a;

IOCMSET

        pub const IOCMSET = 0x8004746d;

IOCM_CAR

        pub const IOCM_CAR = 0x40;

IOCM_CD

        pub const IOCM_CD = 0x40;

IOCM_CTS

        pub const IOCM_CTS = 0x20;

IOCM_DSR

        pub const IOCM_DSR = 0x100;

IOCM_DTR

        pub const IOCM_DTR = 0x2;

IOCM_LE

        pub const IOCM_LE = 0x1;

IOCM_RI

        pub const IOCM_RI = 0x80;

IOCM_RNG

        pub const IOCM_RNG = 0x80;

IOCM_RTS

        pub const IOCM_RTS = 0x4;

IOCM_SR

        pub const IOCM_SR = 0x10;

IOCM_ST

        pub const IOCM_ST = 0x8;

IOCNOTTY

        pub const IOCNOTTY = 0x20007471;

IOCNXCL

        pub const IOCNXCL = 0x2000740e;

IOCOUTQ

        pub const IOCOUTQ = 0x40047473;

IOCPKT

        pub const IOCPKT = 0x80047470;

IOCPKT_DATA

        pub const IOCPKT_DATA = 0x0;

IOCPKT_DOSTOP

        pub const IOCPKT_DOSTOP = 0x20;

IOCPKT_FLUSHREAD

        pub const IOCPKT_FLUSHREAD = 0x1;

IOCPKT_FLUSHWRITE

        pub const IOCPKT_FLUSHWRITE = 0x2;

IOCPKT_IOCTL

        pub const IOCPKT_IOCTL = 0x40;

IOCPKT_NOSTOP

        pub const IOCPKT_NOSTOP = 0x10;

IOCPKT_START

        pub const IOCPKT_START = 0x8;

IOCPKT_STOP

        pub const IOCPKT_STOP = 0x4;

IOCPTMGET

        pub const IOCPTMGET = 0x40287446;

IOCPTSNAME

        pub const IOCPTSNAME = 0x40287448;

IOCRCVFRAME

        pub const IOCRCVFRAME = 0x80087445;

IOCREMOTE

        pub const IOCREMOTE = 0x80047469;

IOCSBRK

        pub const IOCSBRK = 0x2000747b;

IOCSCTTY

        pub const IOCSCTTY = 0x20007461;

IOCSDTR

        pub const IOCSDTR = 0x20007479;

IOCSETA

        pub const IOCSETA = 0x802c7414;

IOCSETAF

        pub const IOCSETAF = 0x802c7416;

IOCSETAW

        pub const IOCSETAW = 0x802c7415;

IOCSETD

        pub const IOCSETD = 0x8004741b;

IOCSFLAGS

        pub const IOCSFLAGS = 0x8004745c;

IOCSIG

        pub const IOCSIG = 0x2000745f;

IOCSLINED

        pub const IOCSLINED = 0x80207443;

IOCSPGRP

        pub const IOCSPGRP = 0x80047476;

IOCSQSIZE

        pub const IOCSQSIZE = 0x80047480;

IOCSSIZE

        pub const IOCSSIZE = 0x80087467;

IOCSTART

        pub const IOCSTART = 0x2000746e;

IOCSTAT

        pub const IOCSTAT = 0x80047465;

IOCSTI

        pub const IOCSTI = 0x80017472;

IOCSTOP

        pub const IOCSTOP = 0x2000746f;

IOCSWINSZ

        pub const IOCSWINSZ = 0x80087467;

IOCUCNTL

        pub const IOCUCNTL = 0x80047466;

IOCXMTFRAME

        pub const IOCXMTFRAME = 0x80087444;
    },
    .dragonfly => struct {

IOCMODG

        pub const IOCMODG = 0x40047403;

IOCMODS

        pub const IOCMODS = 0x80047404;

IOCM_LE

        pub const IOCM_LE = 0x00000001;

IOCM_DTR

        pub const IOCM_DTR = 0x00000002;

IOCM_RTS

        pub const IOCM_RTS = 0x00000004;

IOCM_ST

        pub const IOCM_ST = 0x00000008;

IOCM_SR

        pub const IOCM_SR = 0x00000010;

IOCM_CTS

        pub const IOCM_CTS = 0x00000020;

IOCM_CAR

        pub const IOCM_CAR = 0x00000040;

IOCM_CD

        pub const IOCM_CD = 0x00000040;

IOCM_RNG

        pub const IOCM_RNG = 0x00000080;

IOCM_RI

        pub const IOCM_RI = 0x00000080;

IOCM_DSR

        pub const IOCM_DSR = 0x00000100;

IOCEXCL

        pub const IOCEXCL = 0x2000740d;

IOCNXCL

        pub const IOCNXCL = 0x2000740e;

IOCFLUSH

        pub const IOCFLUSH = 0x80047410;

IOCGETA

        pub const IOCGETA = 0x402c7413;

IOCSETA

        pub const IOCSETA = 0x802c7414;

IOCSETAW

        pub const IOCSETAW = 0x802c7415;

IOCSETAF

        pub const IOCSETAF = 0x802c7416;

IOCGETD

        pub const IOCGETD = 0x4004741a;

IOCSETD

        pub const IOCSETD = 0x8004741b;

IOCSBRK

        pub const IOCSBRK = 0x2000747b;

IOCCBRK

        pub const IOCCBRK = 0x2000747a;

IOCSDTR

        pub const IOCSDTR = 0x20007479;

IOCCDTR

        pub const IOCCDTR = 0x20007478;

IOCGPGRP

        pub const IOCGPGRP = 0x40047477;

IOCSPGRP

        pub const IOCSPGRP = 0x80047476;

IOCOUTQ

        pub const IOCOUTQ = 0x40047473;

IOCSTI

        pub const IOCSTI = 0x80017472;

IOCNOTTY

        pub const IOCNOTTY = 0x20007471;

IOCPKT

        pub const IOCPKT = 0x80047470;

IOCPKT_DATA

        pub const IOCPKT_DATA = 0x00000000;

IOCPKT_FLUSHREAD

        pub const IOCPKT_FLUSHREAD = 0x00000001;

IOCPKT_FLUSHWRITE

        pub const IOCPKT_FLUSHWRITE = 0x00000002;

IOCPKT_STOP

        pub const IOCPKT_STOP = 0x00000004;

IOCPKT_START

        pub const IOCPKT_START = 0x00000008;

IOCPKT_NOSTOP

        pub const IOCPKT_NOSTOP = 0x00000010;

IOCPKT_DOSTOP

        pub const IOCPKT_DOSTOP = 0x00000020;

IOCPKT_IOCTL

        pub const IOCPKT_IOCTL = 0x00000040;

IOCSTOP

        pub const IOCSTOP = 0x2000746f;

IOCSTART

        pub const IOCSTART = 0x2000746e;

IOCMSET

        pub const IOCMSET = 0x8004746d;

IOCMBIS

        pub const IOCMBIS = 0x8004746c;

IOCMBIC

        pub const IOCMBIC = 0x8004746b;

IOCMGET

        pub const IOCMGET = 0x4004746a;

IOCREMOTE

        pub const IOCREMOTE = 0x80047469;

IOCGWINSZ

        pub const IOCGWINSZ = 0x40087468;

IOCSWINSZ

        pub const IOCSWINSZ = 0x80087467;

IOCUCNTL

        pub const IOCUCNTL = 0x80047466;

IOCSTAT

        pub const IOCSTAT = 0x20007465;

IOCGSID

        pub const IOCGSID = 0x40047463;

IOCCONS

        pub const IOCCONS = 0x80047462;

IOCSCTTY

        pub const IOCSCTTY = 0x20007461;

IOCEXT

        pub const IOCEXT = 0x80047460;

IOCSIG

        pub const IOCSIG = 0x2000745f;

IOCDRAIN

        pub const IOCDRAIN = 0x2000745e;

IOCMSDTRWAIT

        pub const IOCMSDTRWAIT = 0x8004745b;

IOCMGDTRWAIT

        pub const IOCMGDTRWAIT = 0x4004745a;

IOCTIMESTAMP

        pub const IOCTIMESTAMP = 0x40107459;

IOCDCDTIMESTAMP

        pub const IOCDCDTIMESTAMP = 0x40107458;

IOCSDRAINWAIT

        pub const IOCSDRAINWAIT = 0x80047457;

IOCGDRAINWAIT

        pub const IOCGDRAINWAIT = 0x40047456;

IOCISPTMASTER

        pub const IOCISPTMASTER = 0x20007455;
    },
    else => void,

DIR

};
pub const IOCPARM_MASK = switch (native_os) {
    .windows => ws2_32.IOCPARM_MASK,
    .macos, .ios, .tvos, .watchos, .visionos => 0x1fff,
    else => void,

DIR

};
pub const TCSA = std.posix.TCSA;

TFD

pub const TFD = switch (native_os) {
    .linux => linux.TFD,
    else => void,

DIR

};
pub const VDSO = switch (native_os) {
    .linux => linux.VDSO,
    else => void,

DIR

};
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

NOHANG

        pub const NOHANG = 0x00000001;
        /// [XSI] notify on stop, untraced child

UNTRACED

        pub const UNTRACED = 0x00000002;

EXITSTATUS()


        pub fn EXITSTATUS(x: u32) u8 {
            return @as(u8, @intCast(x >> 8));
        }

TERMSIG()

        pub fn TERMSIG(x: u32) u32 {
            return status(x);
        }

STOPSIG()

        pub fn STOPSIG(x: u32) u32 {
            return x >> 8;
        }

IFEXITED()

        pub fn IFEXITED(x: u32) bool {
            return status(x) == 0;
        }

IFSTOPPED()

        pub fn IFSTOPPED(x: u32) bool {
            return status(x) == stopped and STOPSIG(x) != 0x13;
        }

IFSIGNALED()

        pub fn IFSIGNALED(x: u32) bool {
            return status(x) != stopped and status(x) != 0;
        }

NOHANG


        fn status(x: u32) u32 {
            return x & 0o177;
        }
        const stopped = 0o177;
    },
    .freebsd => struct {

NOHANG

        pub const NOHANG = 1;

UNTRACED

        pub const UNTRACED = 2;

STOPPED

        pub const STOPPED = UNTRACED;
        pub const CONTINUED = 4;

NOWAIT

        pub const NOWAIT = 8;

EXITED

        pub const EXITED = 16;

TRAPPED

        pub const TRAPPED = 32;

EXITSTATUS()


EXITSTATUS()

        pub fn EXITSTATUS(s: u32) u8 {
            return @as(u8, @intCast((s & 0xff00) >> 8));
        }

TERMSIG()

        pub fn TERMSIG(s: u32) u32 {
            return s & 0x7f;
        }

STOPSIG()

        pub fn STOPSIG(s: u32) u32 {
            return EXITSTATUS(s);
        }

IFEXITED()

        pub fn IFEXITED(s: u32) bool {
            return TERMSIG(s) == 0;
        }

IFSTOPPED()

        pub fn IFSTOPPED(s: u32) bool {
            return @as(u16, @truncate((((s & 0xffff) *% 0x10001) >> 8))) > 0x7f00;
        }

IFSIGNALED()

        pub fn IFSIGNALED(s: u32) bool {
            return (s & 0xffff) -% 1 < 0xff;
        }
    },
    .solaris, .illumos => struct {
        pub const EXITED = 0o001;

TRAPPED

        pub const TRAPPED = 0o002;

UNTRACED

        pub const UNTRACED = 0o004;

STOPPED

        pub const STOPPED = UNTRACED;

CONTINUED

        pub const CONTINUED = 0o010;

NOHANG

        pub const NOHANG = 0o100;

NOWAIT

        pub const NOWAIT = 0o200;

EXITSTATUS()


EXITSTATUS()

        pub fn EXITSTATUS(s: u32) u8 {
            return @as(u8, @intCast((s >> 8) & 0xff));
        }

TERMSIG()

        pub fn TERMSIG(s: u32) u32 {
            return s & 0x7f;
        }

STOPSIG()

        pub fn STOPSIG(s: u32) u32 {
            return EXITSTATUS(s);
        }

IFEXITED()

        pub fn IFEXITED(s: u32) bool {
            return TERMSIG(s) == 0;
        }

IFSTOPPED()


IFCONTINUED()

        pub fn IFCONTINUED(s: u32) bool {
            return ((s & 0o177777) == 0o177777);
        }

NOHANG


IFSTOPPED()

        pub fn IFSTOPPED(s: u32) bool {
            return (s & 0x00ff != 0o177) and !(s & 0xff00 != 0);
        }

STOPPED


IFSIGNALED()

        pub fn IFSIGNALED(s: u32) bool {
            return s & 0x00ff > 0 and s & 0xff00 == 0;
        }
    },
    .netbsd => struct {
        pub const NOHANG = 0x00000001;
        pub const UNTRACED = 0x00000002;

STOPPED

        pub const STOPPED = UNTRACED;
        pub const CONTINUED = 0x00000010;
        pub const NOWAIT = 0x00010000;

EXITED

        pub const EXITED = 0x00000020;

TRAPPED

        pub const TRAPPED = 0x00000040;

EXITSTATUS()


EXITSTATUS()

        pub fn EXITSTATUS(s: u32) u8 {
            return @as(u8, @intCast((s >> 8) & 0xff));
        }

TERMSIG()

        pub fn TERMSIG(s: u32) u32 {
            return s & 0x7f;
        }

STOPSIG()

        pub fn STOPSIG(s: u32) u32 {
            return EXITSTATUS(s);
        }

IFEXITED()

        pub fn IFEXITED(s: u32) bool {
            return TERMSIG(s) == 0;
        }

IFSTOPPED()


IFCONTINUED()

        pub fn IFCONTINUED(s: u32) bool {
            return ((s & 0x7f) == 0xffff);
        }

NOHANG


IFSTOPPED()

        pub fn IFSTOPPED(s: u32) bool {
            return ((s & 0x7f != 0x7f) and !IFCONTINUED(s));
        }

CONTINUED


IFSIGNALED()

        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;

NOWAIT

        pub const NOWAIT = 0x0008;

EXITED

        pub const EXITED = 0x0010;

TRAPPED

        pub const TRAPPED = 0x0020;

EXITSTATUS()


EXITSTATUS()

        pub fn EXITSTATUS(s: u32) u8 {
            return @as(u8, @intCast((s & 0xff00) >> 8));
        }

TERMSIG()

        pub fn TERMSIG(s: u32) u32 {
            return s & 0x7f;
        }

STOPSIG()

        pub fn STOPSIG(s: u32) u32 {
            return EXITSTATUS(s);
        }

IFEXITED()

        pub fn IFEXITED(s: u32) bool {
            return TERMSIG(s) == 0;
        }

IFSTOPPED()

        pub fn IFSTOPPED(s: u32) bool {
            return @as(u16, @truncate((((s & 0xffff) *% 0x10001) >> 8))) > 0x7f00;
        }

IFSIGNALED()

        pub fn IFSIGNALED(s: u32) bool {
            return (s & 0xffff) -% 1 < 0xff;
        }
    },
    .haiku => struct {
        pub const NOHANG = 0x1;

UNTRACED

        pub const UNTRACED = 0x2;

CONTINUED

        pub const CONTINUED = 0x4;

EXITED

        pub const EXITED = 0x08;

STOPPED

        pub const STOPPED = 0x10;

NOWAIT

        pub const NOWAIT = 0x20;

EXITSTATUS()


EXITSTATUS()

        pub fn EXITSTATUS(s: u32) u8 {
            return @as(u8, @intCast(s & 0xff));
        }

STOPSIG()


TERMSIG()

        pub fn TERMSIG(s: u32) u32 {
            return (s >> 8) & 0xff;
        }

IFSTOPPED()


STOPSIG()

        pub fn STOPSIG(s: u32) u32 {
            return (s >> 16) & 0xff;
        }

NOHANG


IFEXITED()

        pub fn IFEXITED(s: u32) bool {
            return (s & ~@as(u32, 0xff)) == 0;
        }

CONTINUED


IFSTOPPED()

        pub fn IFSTOPPED(s: u32) bool {
            return ((s >> 16) & 0xff) != 0;
        }

TERMSIG()


IFSIGNALED()

        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;

IFEXITED()


        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;
        }

IFCONTINUED()


        pub fn IFCONTINUED(s: u32) bool {
            return ((s & 0o177777) == 0o177777);
        }

IFSTOPPED()


        pub fn IFSTOPPED(s: u32) bool {
            return (s & 0xff == 0o177);
        }

IFSIGNALED()


        pub fn IFSIGNALED(s: u32) bool {
            return (((s) & 0o177) != 0o177) and (((s) & 0o177) != 0);
        }
    },
    else => void,

DIR

};
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,

DIR

};
pub const cpu_set_t = switch (native_os) {
    .linux => linux.cpu_set_t,
    .emscripten => emscripten.cpu_set_t,
    else => void,

DIR

};
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,

DIR

};
pub const epoll_event = switch (native_os) {
    .linux => linux.epoll_event,
    else => void,

DIR

};
pub const ifreq = switch (native_os) {
    .linux => linux.ifreq,
    .emscripten => emscripten.ifreq,
    .solaris, .illumos => lifreq,
    else => void,

DIR

};
pub const itimerspec = switch (native_os) {
    .linux => linux.itimerspec,
    .haiku => extern struct {
        interval: timespec,
        value: timespec,
    },
    else => void,

DIR

};
pub const msghdr = switch (native_os) {
    .linux => linux.msghdr,
    .openbsd,
    .emscripten,
    .dragonfly,
    .freebsd,
    .netbsd,
    .haiku,
    .solaris,
    .illumos,
    .macos,
    .driverkit,
    .ios,
    .tvos,
    .visionos,
    .watchos,
    => 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,

DIR

};
pub const msghdr_const = switch (native_os) {
    .linux => linux.msghdr_const,
    .openbsd,
    .emscripten,
    .dragonfly,
    .freebsd,
    .netbsd,
    .haiku,
    .solaris,
    .illumos,
    .macos,
    .driverkit,
    .ios,
    .tvos,
    .visionos,
    .watchos,
    => 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,

DIR

};
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,

DIR

};
pub const perf_event_attr = switch (native_os) {
    .linux => linux.perf_event_attr,
    else => void,

DIR

};
pub const pid_t = switch (native_os) {
    .linux => linux.pid_t,
    .emscripten => emscripten.pid_t,
    .windows => windows.HANDLE,
    else => i32,

DIR

};
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,
    },

DIR

};
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,

DIR

};
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,
    },

DIR

};
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,
        _,

AS:


        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,
        _,

AS:


AS:

        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,
        _,

AS:


AS:

        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,
        _,

rusage


        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,
        _,

SELF


        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,

DIR

};
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,

SELF


        pub const SELF = 0;

CHILDREN

        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,

THREAD


        pub const SELF = 0;
        pub const CHILDREN = -1;
        pub const THREAD = 1;
    },
    else => void,

DIR

};

sigset_t


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)),

empty_sigset:


        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,

filled_sigset


        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,
        },

sigval


        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,

DIR

};
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,

DIR

};
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,

DIR

};
pub const filled_sigset = switch (native_os) {
    .linux => linux.filled_sigset,
    .haiku => ~@as(sigset_t, 0),
    else => 0,

DIR

};
pub const sigval = switch (native_os) {
    .linux => linux.sigval,
    .openbsd, .dragonfly, .freebsd => extern union {
        int: c_int,
        ptr: ?*anyopaque,
    },
    else => void,

DIR

};

in6


pub const addrinfo = if (builtin.abi.isAndroid()) extern struct {
    flags: AI,
    family: i32,
    socktype: i32,
    protocol: i32,
    addrlen: socklen_t,
    canonname: ?[*:0]u8,
    addr: ?*sockaddr,
    next: ?*addrinfo,
} else 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,

DIR

};
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,

SS_MAXSIZE


SS_MAXSIZE

        pub const SS_MAXSIZE = 128;

storage

        pub const storage = extern struct {
            len: u8 align(8),
            family: sa_family_t,
            padding: [126]u8 = undefined,

in6


            comptime {
                assert(@sizeOf(storage) == SS_MAXSIZE);
                assert(@alignOf(storage) == 8);
            }
        };

in

        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 },
        };

in6

        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,
        };

storage


        /// UNIX domain socket

un

        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,

in6


SS_MAXSIZE

        pub const SS_MAXSIZE = 128;

storage

        pub const storage = extern struct {
            len: u8 align(8),
            family: sa_family_t,
            padding: [126]u8 = undefined,

storage


            comptime {
                assert(@sizeOf(storage) == SS_MAXSIZE);
                assert(@alignOf(storage) == 8);
            }
        };

in


in

        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 },
        };

un


in6

        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,
        };

storage


un

        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,

in6


        /// actually longer; address value
        data: [14]u8,

un


SS_MAXSIZE

        pub const SS_MAXSIZE = 256;

storage

        pub const storage = extern struct {
            family: sa_family_t align(8),
            padding: [254]u8 = undefined,

in


            comptime {
                assert(@sizeOf(storage) == SS_MAXSIZE);
                assert(@alignOf(storage) == 8);
            }
        };

in6


in

        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 },
        };

SS_MAXSIZE


in6

        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,
        };

in


        /// Definitions for UNIX IPC domain.

un

        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,

un


        pub const SS_MAXSIZE = 128;
        pub const storage = extern struct {
            len: u8 align(8),
            family: sa_family_t,
            padding: [126]u8 = undefined,

socklen_t


            comptime {
                assert(@sizeOf(storage) == SS_MAXSIZE);
                assert(@alignOf(storage) == 8);
            }
        };

in_port_t


        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 },
        };

sa_family_t


        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,
        };

AF


        /// Definitions for UNIX IPC domain.
        pub const un = extern struct {
            /// total sockaddr length
            len: u8 = @sizeOf(un),

UNSPEC


            family: sa_family_t = AF.LOCAL,

UNIX


            /// path name
            path: [104]u8,
        };
    },
    .dragonfly => extern struct {
        len: u8,
        family: sa_family_t,
        data: [14]u8,

LOCAL


        pub const SS_MAXSIZE = 128;
        pub const storage = extern struct {
            len: u8 align(8),
            family: sa_family_t,
            padding: [126]u8 = undefined,

INET


            comptime {
                assert(@sizeOf(storage) == SS_MAXSIZE);
                assert(@alignOf(storage) == 8);
            }
        };

AX25


        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 },
        };

IPX


        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,
        };

APPLETALK


        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,

NETROM


        pub const SS_MAXSIZE = 128;
        pub const storage = extern struct {
            len: u8 align(8),
            family: sa_family_t,
            padding: [126]u8 = undefined,

BRIDGE


            comptime {
                assert(@sizeOf(storage) == SS_MAXSIZE);
                assert(@alignOf(storage) == 8);
            }
        };

ATMPVC


        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 },
        };

X25


        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,
        };

INET6


        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,

ROSE


        pub const SS_MAXSIZE = 256;
        pub const storage = extern struct {
            len: u8 align(8),
            family: sa_family_t,
            padding: [254]u8 = undefined,

DECnet


            comptime {
                assert(@sizeOf(storage) == SS_MAXSIZE);
                assert(@alignOf(storage) == 8);
            }
        };

NETBEUI


        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 },
        };

SECURITY


        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,
        };

KEY


        /// Definitions for UNIX IPC domain.
        pub const un = extern struct {
            /// total sockaddr length
            len: u8 = @sizeOf(un),

NETLINK


            family: sa_family_t = AF.LOCAL,

ROUTE


            /// path name
            path: [104]u8,
        };
    },
    else => void,

DIR

};
pub const socklen_t = switch (native_os) {
    .linux, .emscripten => linux.socklen_t,
    .windows => ws2_32.socklen_t,
    else => u32,

DIR

};
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,

DIR

};
pub const AF = if (builtin.abi.isAndroid()) struct {

UNSPEC

    pub const UNSPEC = 0;

UNIX

    pub const UNIX = 1;

LOCAL

    pub const LOCAL = 1;

INET

    pub const INET = 2;
    pub const AX25 = 3;
    pub const IPX = 4;
    pub const APPLETALK = 5;
    pub const NETROM = 6;
    pub const BRIDGE = 7;
    pub const ATMPVC = 8;
    pub const X25 = 9;
    pub const INET6 = 10;
    pub const ROSE = 11;

DECnet

    pub const DECnet = 12;
    pub const NETBEUI = 13;
    pub const SECURITY = 14;
    pub const KEY = 15;
    pub const NETLINK = 16;
    pub const ROUTE = NETLINK;
    pub const PACKET = 17;
    pub const ASH = 18;
    pub const ECONET = 19;
    pub const ATMSVC = 20;
    pub const RDS = 21;
    pub const SNA = 22;
    pub const IRDA = 23;
    pub const PPPOX = 24;

WANPIPE

    pub const WANPIPE = 25;

LLC

    pub const LLC = 26;

CAN

    pub const CAN = 29;

TIPC

    pub const TIPC = 30;

BLUETOOTH

    pub const BLUETOOTH = 31;

IUCV

    pub const IUCV = 32;

RXRPC

    pub const RXRPC = 33;

ISDN

    pub const ISDN = 34;

PHONET

    pub const PHONET = 35;

IEEE802154

    pub const IEEE802154 = 36;

CAIF

    pub const CAIF = 37;

ALG

    pub const ALG = 38;

NFC

    pub const NFC = 39;

VSOCK

    pub const VSOCK = 40;

KCM

    pub const KCM = 41;

QIPCRTR

    pub const QIPCRTR = 42;

MAX

    pub const MAX = 43;
} else switch (native_os) {
    .linux, .emscripten => linux.AF,
    .windows => ws2_32.AF,
    .macos, .ios, .tvos, .watchos, .visionos => struct {

UNSPEC

        pub const UNSPEC = 0;

LOCAL

        pub const LOCAL = 1;

UNIX

        pub const UNIX = LOCAL;

INET

        pub const INET = 2;

SYS_CONTROL

        pub const SYS_CONTROL = 2;

IMPLINK

        pub const IMPLINK = 3;

PUP

        pub const PUP = 4;

CHAOS

        pub const CHAOS = 5;

NS

        pub const NS = 6;

ISO

        pub const ISO = 7;

OSI

        pub const OSI = ISO;

ECMA

        pub const ECMA = 8;

DATAKIT

        pub const DATAKIT = 9;

CCITT

        pub const CCITT = 10;

SNA

        pub const SNA = 11;

DECnet

        pub const DECnet = 12;

DLI

        pub const DLI = 13;

LAT

        pub const LAT = 14;

HYLINK

        pub const HYLINK = 15;

APPLETALK

        pub const APPLETALK = 16;

ROUTE

        pub const ROUTE = 17;

LINK

        pub const LINK = 18;

XTP

        pub const XTP = 19;

COIP

        pub const COIP = 20;

CNT

        pub const CNT = 21;

RTIP

        pub const RTIP = 22;

IPX

        pub const IPX = 23;

SIP

        pub const SIP = 24;

PIP

        pub const PIP = 25;

ISDN

        pub const ISDN = 28;

E164

        pub const E164 = ISDN;

KEY

        pub const KEY = 29;

INET6

        pub const INET6 = 30;

NATM

        pub const NATM = 31;

SYSTEM

        pub const SYSTEM = 32;

NETBIOS

        pub const NETBIOS = 33;

PPP

        pub const PPP = 34;

MAX

        pub const MAX = 40;
    },
    .freebsd => struct {

UNSPEC

        pub const UNSPEC = 0;

UNIX

        pub const UNIX = 1;

LOCAL

        pub const LOCAL = UNIX;

FILE

        pub const FILE = LOCAL;

INET

        pub const INET = 2;

IMPLINK

        pub const IMPLINK = 3;

PUP

        pub const PUP = 4;

CHAOS

        pub const CHAOS = 5;

NETBIOS

        pub const NETBIOS = 6;

ISO

        pub const ISO = 7;

OSI

        pub const OSI = ISO;

ECMA

        pub const ECMA = 8;

DATAKIT

        pub const DATAKIT = 9;

CCITT

        pub const CCITT = 10;

SNA

        pub const SNA = 11;

DECnet

        pub const DECnet = 12;

DLI

        pub const DLI = 13;

LAT

        pub const LAT = 14;

HYLINK

        pub const HYLINK = 15;

APPLETALK

        pub const APPLETALK = 16;

ROUTE

        pub const ROUTE = 17;

LINK

        pub const LINK = 18;

pseudo_XTP

        pub const pseudo_XTP = 19;

COIP

        pub const COIP = 20;

CNT

        pub const CNT = 21;

pseudo_RTIP

        pub const pseudo_RTIP = 22;

IPX

        pub const IPX = 23;

SIP

        pub const SIP = 24;

pseudo_PIP

        pub const pseudo_PIP = 25;

ISDN

        pub const ISDN = 26;

E164

        pub const E164 = ISDN;

pseudo_KEY

        pub const pseudo_KEY = 27;

INET6

        pub const INET6 = 28;

NATM

        pub const NATM = 29;

ATM

        pub const ATM = 30;

pseudo_HDRCMPLT

        pub const pseudo_HDRCMPLT = 31;

NETGRAPH

        pub const NETGRAPH = 32;

SLOW

        pub const SLOW = 33;

SCLUSTER

        pub const SCLUSTER = 34;

ARP

        pub const ARP = 35;

BLUETOOTH

        pub const BLUETOOTH = 36;

IEEE80211

        pub const IEEE80211 = 37;

INET_SDP

        pub const INET_SDP = 40;

INET6_SDP

        pub const INET6_SDP = 42;

MAX

        pub const MAX = 42;
    },
    .solaris, .illumos => struct {

UNSPEC

        pub const UNSPEC = 0;

UNIX

        pub const UNIX = 1;

LOCAL

        pub const LOCAL = UNIX;

FILE

        pub const FILE = UNIX;

INET

        pub const INET = 2;

IMPLINK

        pub const IMPLINK = 3;

PUP

        pub const PUP = 4;

CHAOS

        pub const CHAOS = 5;

NS

        pub const NS = 6;

NBS

        pub const NBS = 7;

ECMA

        pub const ECMA = 8;

DATAKIT

        pub const DATAKIT = 9;

CCITT

        pub const CCITT = 10;

SNA

        pub const SNA = 11;

DECnet

        pub const DECnet = 12;

DLI

        pub const DLI = 13;

LAT

        pub const LAT = 14;

HYLINK

        pub const HYLINK = 15;

APPLETALK

        pub const APPLETALK = 16;

NIT

        pub const NIT = 17;

@"802"

        pub const @"802" = 18;

OSI

        pub const OSI = 19;

X25

        pub const X25 = 20;

OSINET

        pub const OSINET = 21;

GOSIP

        pub const GOSIP = 22;

IPX

        pub const IPX = 23;

ROUTE

        pub const ROUTE = 24;

LINK

        pub const LINK = 25;

INET6

        pub const INET6 = 26;

KEY

        pub const KEY = 27;

NCA

        pub const NCA = 28;

POLICY

        pub const POLICY = 29;

INET_OFFLOAD

        pub const INET_OFFLOAD = 30;

TRILL

        pub const TRILL = 31;

PACKET

        pub const PACKET = 32;

LX_NETLINK

        pub const LX_NETLINK = 33;

MAX

        pub const MAX = 33;
    },
    .netbsd => struct {

UNSPEC

        pub const UNSPEC = 0;

LOCAL

        pub const LOCAL = 1;

UNIX

        pub const UNIX = LOCAL;

INET

        pub const INET = 2;

IMPLINK

        pub const IMPLINK = 3;

PUP

        pub const PUP = 4;

CHAOS

        pub const CHAOS = 5;

NS

        pub const NS = 6;

ISO

        pub const ISO = 7;

OSI

        pub const OSI = ISO;

ECMA

        pub const ECMA = 8;

DATAKIT

        pub const DATAKIT = 9;

CCITT

        pub const CCITT = 10;

SNA

        pub const SNA = 11;

DECnet

        pub const DECnet = 12;

DLI

        pub const DLI = 13;

LAT

        pub const LAT = 14;

HYLINK

        pub const HYLINK = 15;

APPLETALK

        pub const APPLETALK = 16;

OROUTE

        pub const OROUTE = 17;

LINK

        pub const LINK = 18;

COIP

        pub const COIP = 20;

CNT

        pub const CNT = 21;

IPX

        pub const IPX = 23;

INET6

        pub const INET6 = 24;

ISDN

        pub const ISDN = 26;

E164

        pub const E164 = ISDN;

NATM

        pub const NATM = 27;

ARP

        pub const ARP = 28;

BLUETOOTH

        pub const BLUETOOTH = 31;

IEEE80211

        pub const IEEE80211 = 32;

MPLS

        pub const MPLS = 33;

ROUTE

        pub const ROUTE = 34;

CAN

        pub const CAN = 35;

ETHER

        pub const ETHER = 36;

MAX

        pub const MAX = 37;
    },
    .dragonfly => struct {

UNSPEC

        pub const UNSPEC = 0;

OSI

        pub const OSI = ISO;

UNIX

        pub const UNIX = LOCAL;

LOCAL

        pub const LOCAL = 1;

INET

        pub const INET = 2;

IMPLINK

        pub const IMPLINK = 3;

PUP

        pub const PUP = 4;

CHAOS

        pub const CHAOS = 5;

NETBIOS

        pub const NETBIOS = 6;

ISO

        pub const ISO = 7;

ECMA

        pub const ECMA = 8;

DATAKIT

        pub const DATAKIT = 9;

CCITT

        pub const CCITT = 10;

SNA

        pub const SNA = 11;

DLI

        pub const DLI = 13;

LAT

        pub const LAT = 14;

HYLINK

        pub const HYLINK = 15;

APPLETALK

        pub const APPLETALK = 16;

ROUTE

        pub const ROUTE = 17;

LINK

        pub const LINK = 18;

COIP

        pub const COIP = 20;

CNT

        pub const CNT = 21;

IPX

        pub const IPX = 23;

SIP

        pub const SIP = 24;

ISDN

        pub const ISDN = 26;

INET6

        pub const INET6 = 28;

NATM

        pub const NATM = 29;

ATM

        pub const ATM = 30;

NETGRAPH

        pub const NETGRAPH = 32;

BLUETOOTH

        pub const BLUETOOTH = 33;

MPLS

        pub const MPLS = 34;

MAX

        pub const MAX = 36;
    },
    .haiku => struct {

UNSPEC

        pub const UNSPEC = 0;

INET

        pub const INET = 1;

APPLETALK

        pub const APPLETALK = 2;

ROUTE

        pub const ROUTE = 3;

LINK

        pub const LINK = 4;

INET6

        pub const INET6 = 5;

DLI

        pub const DLI = 6;

IPX

        pub const IPX = 7;

NOTIFY

        pub const NOTIFY = 8;

LOCAL

        pub const LOCAL = 9;

UNIX

        pub const UNIX = LOCAL;

BLUETOOTH

        pub const BLUETOOTH = 10;

MAX

        pub const MAX = 11;
    },
    .openbsd => struct {

UNSPEC

        pub const UNSPEC = 0;

UNIX

        pub const UNIX = 1;

LOCAL

        pub const LOCAL = UNIX;

INET

        pub const INET = 2;

APPLETALK

        pub const APPLETALK = 16;

INET6

        pub const INET6 = 24;

KEY

        pub const KEY = 30;

ROUTE

        pub const ROUTE = 17;

SNA

        pub const SNA = 11;

MPLS

        pub const MPLS = 33;

BLUETOOTH

        pub const BLUETOOTH = 32;

ISDN

        pub const ISDN = 26;

MAX

        pub const MAX = 36;
    },
    else => void,

DIR

};
pub const PF = if (builtin.abi.isAndroid()) struct {

UNSPEC

    pub const UNSPEC = AF.UNSPEC;

UNIX

    pub const UNIX = AF.UNIX;

LOCAL

    pub const LOCAL = AF.LOCAL;

INET

    pub const INET = AF.INET;

AX25

    pub const AX25 = AF.AX25;

IPX

    pub const IPX = AF.IPX;

APPLETALK

    pub const APPLETALK = AF.APPLETALK;

NETROM

    pub const NETROM = AF.NETROM;

BRIDGE

    pub const BRIDGE = AF.BRIDGE;

ATMPVC

    pub const ATMPVC = AF.ATMPVC;

X25

    pub const X25 = AF.X25;

PF_INET6

    pub const PF_INET6 = AF.INET6;

PF_ROSE

    pub const PF_ROSE = AF.ROSE;

PF_DECnet

    pub const PF_DECnet = AF.DECnet;

PF_NETBEUI

    pub const PF_NETBEUI = AF.NETBEUI;

PF_SECURITY

    pub const PF_SECURITY = AF.SECURITY;

PF_KEY

    pub const PF_KEY = AF.KEY;

PF_NETLINK

    pub const PF_NETLINK = AF.NETLINK;

PF_ROUTE

    pub const PF_ROUTE = AF.ROUTE;

PF_PACKET

    pub const PF_PACKET = AF.PACKET;

PF_ASH

    pub const PF_ASH = AF.ASH;

PF_ECONET

    pub const PF_ECONET = AF.ECONET;

PF_ATMSVC

    pub const PF_ATMSVC = AF.ATMSVC;

PF_RDS

    pub const PF_RDS = AF.RDS;

PF_SNA

    pub const PF_SNA = AF.SNA;

PF_IRDA

    pub const PF_IRDA = AF.IRDA;

PF_PPPOX

    pub const PF_PPPOX = AF.PPPOX;

PF_WANPIPE

    pub const PF_WANPIPE = AF.WANPIPE;

PF_LLC

    pub const PF_LLC = AF.LLC;

PF_CAN

    pub const PF_CAN = AF.CAN;

PF_TIPC

    pub const PF_TIPC = AF.TIPC;

PF_BLUETOOTH

    pub const PF_BLUETOOTH = AF.BLUETOOTH;

PF_IUCV

    pub const PF_IUCV = AF.IUCV;

PF_RXRPC

    pub const PF_RXRPC = AF.RXRPC;

PF_ISDN

    pub const PF_ISDN = AF.ISDN;

PF_PHONET

    pub const PF_PHONET = AF.PHONET;

PF_IEEE802154

    pub const PF_IEEE802154 = AF.IEEE802154;

PF_CAIF

    pub const PF_CAIF = AF.CAIF;

PF_ALG

    pub const PF_ALG = AF.ALG;

PF_NFC

    pub const PF_NFC = AF.NFC;

PF_VSOCK

    pub const PF_VSOCK = AF.VSOCK;

PF_KCM

    pub const PF_KCM = AF.KCM;

PF_QIPCRTR

    pub const PF_QIPCRTR = AF.QIPCRTR;

PF_MAX

    pub const PF_MAX = AF.MAX;
} else switch (native_os) {
    .linux, .emscripten => linux.PF,
    .macos, .ios, .tvos, .watchos, .visionos => struct {

UNSPEC

        pub const UNSPEC = AF.UNSPEC;

LOCAL

        pub const LOCAL = AF.LOCAL;

UNIX

        pub const UNIX = PF.LOCAL;

INET

        pub const INET = AF.INET;

IMPLINK

        pub const IMPLINK = AF.IMPLINK;

PUP

        pub const PUP = AF.PUP;

CHAOS

        pub const CHAOS = AF.CHAOS;

NS

        pub const NS = AF.NS;

ISO

        pub const ISO = AF.ISO;

OSI

        pub const OSI = AF.ISO;

ECMA

        pub const ECMA = AF.ECMA;

DATAKIT

        pub const DATAKIT = AF.DATAKIT;

CCITT

        pub const CCITT = AF.CCITT;

SNA

        pub const SNA = AF.SNA;

DECnet

        pub const DECnet = AF.DECnet;

DLI

        pub const DLI = AF.DLI;

LAT

        pub const LAT = AF.LAT;

HYLINK

        pub const HYLINK = AF.HYLINK;

APPLETALK

        pub const APPLETALK = AF.APPLETALK;

ROUTE

        pub const ROUTE = AF.ROUTE;

LINK

        pub const LINK = AF.LINK;

XTP

        pub const XTP = AF.XTP;

COIP

        pub const COIP = AF.COIP;

CNT

        pub const CNT = AF.CNT;

SIP

        pub const SIP = AF.SIP;

IPX

        pub const IPX = AF.IPX;

RTIP

        pub const RTIP = AF.RTIP;

PIP

        pub const PIP = AF.PIP;

ISDN

        pub const ISDN = AF.ISDN;

KEY

        pub const KEY = AF.KEY;

INET6

        pub const INET6 = AF.INET6;

NATM

        pub const NATM = AF.NATM;

SYSTEM

        pub const SYSTEM = AF.SYSTEM;

NETBIOS

        pub const NETBIOS = AF.NETBIOS;

PPP

        pub const PPP = AF.PPP;

MAX

        pub const MAX = AF.MAX;
    },
    .freebsd => struct {

UNSPEC

        pub const UNSPEC = AF.UNSPEC;

LOCAL

        pub const LOCAL = AF.LOCAL;

UNIX

        pub const UNIX = PF.LOCAL;

INET

        pub const INET = AF.INET;

IMPLINK

        pub const IMPLINK = AF.IMPLINK;

PUP

        pub const PUP = AF.PUP;

CHAOS

        pub const CHAOS = AF.CHAOS;

NETBIOS

        pub const NETBIOS = AF.NETBIOS;

ISO

        pub const ISO = AF.ISO;

OSI

        pub const OSI = AF.ISO;

ECMA

        pub const ECMA = AF.ECMA;

DATAKIT

        pub const DATAKIT = AF.DATAKIT;

CCITT

        pub const CCITT = AF.CCITT;

DECnet

        pub const DECnet = AF.DECnet;

DLI

        pub const DLI = AF.DLI;

LAT

        pub const LAT = AF.LAT;

HYLINK

        pub const HYLINK = AF.HYLINK;

APPLETALK

        pub const APPLETALK = AF.APPLETALK;

ROUTE

        pub const ROUTE = AF.ROUTE;

LINK

        pub const LINK = AF.LINK;

XTP

        pub const XTP = AF.pseudo_XTP;

COIP

        pub const COIP = AF.COIP;

CNT

        pub const CNT = AF.CNT;

SIP

        pub const SIP = AF.SIP;

IPX

        pub const IPX = AF.IPX;

RTIP

        pub const RTIP = AF.pseudo_RTIP;

PIP

        pub const PIP = AF.pseudo_PIP;

ISDN

        pub const ISDN = AF.ISDN;

KEY

        pub const KEY = AF.pseudo_KEY;

INET6

        pub const INET6 = AF.pseudo_INET6;

NATM

        pub const NATM = AF.NATM;

ATM

        pub const ATM = AF.ATM;

NETGRAPH

        pub const NETGRAPH = AF.NETGRAPH;

SLOW

        pub const SLOW = AF.SLOW;

SCLUSTER

        pub const SCLUSTER = AF.SCLUSTER;

ARP

        pub const ARP = AF.ARP;

BLUETOOTH

        pub const BLUETOOTH = AF.BLUETOOTH;

IEEE80211

        pub const IEEE80211 = AF.IEEE80211;

INET_SDP

        pub const INET_SDP = AF.INET_SDP;

INET6_SDP

        pub const INET6_SDP = AF.INET6_SDP;

MAX

        pub const MAX = AF.MAX;
    },
    .solaris, .illumos => struct {

UNSPEC

        pub const UNSPEC = AF.UNSPEC;

UNIX

        pub const UNIX = AF.UNIX;

LOCAL

        pub const LOCAL = UNIX;

FILE

        pub const FILE = UNIX;

INET

        pub const INET = AF.INET;

IMPLINK

        pub const IMPLINK = AF.IMPLINK;

PUP

        pub const PUP = AF.PUP;

CHAOS

        pub const CHAOS = AF.CHAOS;

NS

        pub const NS = AF.NS;

NBS

        pub const NBS = AF.NBS;

ECMA

        pub const ECMA = AF.ECMA;

DATAKIT

        pub const DATAKIT = AF.DATAKIT;

CCITT

        pub const CCITT = AF.CCITT;

SNA

        pub const SNA = AF.SNA;

DECnet

        pub const DECnet = AF.DECnet;

DLI

        pub const DLI = AF.DLI;

LAT

        pub const LAT = AF.LAT;

HYLINK

        pub const HYLINK = AF.HYLINK;

APPLETALK

        pub const APPLETALK = AF.APPLETALK;

NIT

        pub const NIT = AF.NIT;

@"802"

        pub const @"802" = AF.@"802";

OSI

        pub const OSI = AF.OSI;

X25

        pub const X25 = AF.X25;

OSINET

        pub const OSINET = AF.OSINET;

GOSIP

        pub const GOSIP = AF.GOSIP;

IPX

        pub const IPX = AF.IPX;

ROUTE

        pub const ROUTE = AF.ROUTE;

LINK

        pub const LINK = AF.LINK;

INET6

        pub const INET6 = AF.INET6;

KEY

        pub const KEY = AF.KEY;

NCA

        pub const NCA = AF.NCA;

POLICY

        pub const POLICY = AF.POLICY;

TRILL

        pub const TRILL = AF.TRILL;

PACKET

        pub const PACKET = AF.PACKET;

LX_NETLINK

        pub const LX_NETLINK = AF.LX_NETLINK;

MAX

        pub const MAX = AF.MAX;
    },
    .netbsd => struct {

UNSPEC

        pub const UNSPEC = AF.UNSPEC;

LOCAL

        pub const LOCAL = AF.LOCAL;

UNIX

        pub const UNIX = PF.LOCAL;

INET

        pub const INET = AF.INET;

IMPLINK

        pub const IMPLINK = AF.IMPLINK;

PUP

        pub const PUP = AF.PUP;

CHAOS

        pub const CHAOS = AF.CHAOS;

NS

        pub const NS = AF.NS;

ISO

        pub const ISO = AF.ISO;

OSI

        pub const OSI = AF.ISO;

ECMA

        pub const ECMA = AF.ECMA;

DATAKIT

        pub const DATAKIT = AF.DATAKIT;

CCITT

        pub const CCITT = AF.CCITT;

SNA

        pub const SNA = AF.SNA;

DECnet

        pub const DECnet = AF.DECnet;

DLI

        pub const DLI = AF.DLI;

LAT

        pub const LAT = AF.LAT;

HYLINK

        pub const HYLINK = AF.HYLINK;

APPLETALK

        pub const APPLETALK = AF.APPLETALK;

OROUTE

        pub const OROUTE = AF.OROUTE;

LINK

        pub const LINK = AF.LINK;

COIP

        pub const COIP = AF.COIP;

CNT

        pub const CNT = AF.CNT;

INET6

        pub const INET6 = AF.INET6;

IPX

        pub const IPX = AF.IPX;

ISDN

        pub const ISDN = AF.ISDN;

E164

        pub const E164 = AF.E164;

NATM

        pub const NATM = AF.NATM;

ARP

        pub const ARP = AF.ARP;

BLUETOOTH

        pub const BLUETOOTH = AF.BLUETOOTH;

MPLS

        pub const MPLS = AF.MPLS;

ROUTE

        pub const ROUTE = AF.ROUTE;

CAN

        pub const CAN = AF.CAN;

ETHER

        pub const ETHER = AF.ETHER;

MAX

        pub const MAX = AF.MAX;
    },
    .dragonfly => struct {

INET6

        pub const INET6 = AF.INET6;

IMPLINK

        pub const IMPLINK = AF.IMPLINK;

ROUTE

        pub const ROUTE = AF.ROUTE;

ISO

        pub const ISO = AF.ISO;

PIP

        pub const PIP = AF.pseudo_PIP;

CHAOS

        pub const CHAOS = AF.CHAOS;

DATAKIT

        pub const DATAKIT = AF.DATAKIT;

INET

        pub const INET = AF.INET;

APPLETALK

        pub const APPLETALK = AF.APPLETALK;

SIP

        pub const SIP = AF.SIP;

OSI

        pub const OSI = AF.ISO;

CNT

        pub const CNT = AF.CNT;

LINK

        pub const LINK = AF.LINK;

HYLINK

        pub const HYLINK = AF.HYLINK;

MAX

        pub const MAX = AF.MAX;

KEY

        pub const KEY = AF.pseudo_KEY;

PUP

        pub const PUP = AF.PUP;

COIP

        pub const COIP = AF.COIP;

SNA

        pub const SNA = AF.SNA;

LOCAL

        pub const LOCAL = AF.LOCAL;

NETBIOS

        pub const NETBIOS = AF.NETBIOS;

NATM

        pub const NATM = AF.NATM;

BLUETOOTH

        pub const BLUETOOTH = AF.BLUETOOTH;

UNSPEC

        pub const UNSPEC = AF.UNSPEC;

NETGRAPH

        pub const NETGRAPH = AF.NETGRAPH;

ECMA

        pub const ECMA = AF.ECMA;

IPX

        pub const IPX = AF.IPX;

DLI

        pub const DLI = AF.DLI;

ATM

        pub const ATM = AF.ATM;

CCITT

        pub const CCITT = AF.CCITT;

ISDN

        pub const ISDN = AF.ISDN;

RTIP

        pub const RTIP = AF.pseudo_RTIP;

LAT

        pub const LAT = AF.LAT;

UNIX

        pub const UNIX = PF.LOCAL;

XTP

        pub const XTP = AF.pseudo_XTP;

DECnet

        pub const DECnet = AF.DECnet;
    },
    .haiku => struct {

UNSPEC

        pub const UNSPEC = AF.UNSPEC;

INET

        pub const INET = AF.INET;

ROUTE

        pub const ROUTE = AF.ROUTE;

LINK

        pub const LINK = AF.LINK;

INET6

        pub const INET6 = AF.INET6;

LOCAL

        pub const LOCAL = AF.LOCAL;

UNIX

        pub const UNIX = AF.UNIX;

BLUETOOTH

        pub const BLUETOOTH = AF.BLUETOOTH;
    },
    .openbsd => struct {

UNSPEC

        pub const UNSPEC = AF.UNSPEC;

LOCAL

        pub const LOCAL = AF.LOCAL;

UNIX

        pub const UNIX = AF.UNIX;

INET

        pub const INET = AF.INET;

APPLETALK

        pub const APPLETALK = AF.APPLETALK;

INET6

        pub const INET6 = AF.INET6;

DECnet

        pub const DECnet = AF.DECnet;

KEY

        pub const KEY = AF.KEY;

ROUTE

        pub const ROUTE = AF.ROUTE;

SNA

        pub const SNA = AF.SNA;

MPLS

        pub const MPLS = AF.MPLS;

BLUETOOTH

        pub const BLUETOOTH = AF.BLUETOOTH;

ISDN

        pub const ISDN = AF.ISDN;

MAX

        pub const MAX = AF.MAX;
    },
    else => void,

DIR

};
pub const DT = switch (native_os) {
    .linux => linux.DT,
    .netbsd, .freebsd, .macos, .ios, .tvos, .watchos, .visionos => struct {

UNKNOWN

        pub const UNKNOWN = 0;

FIFO

        pub const FIFO = 1;

CHR

        pub const CHR = 2;

DIR

        pub const DIR = 4;

BLK

        pub const BLK = 6;

REG

        pub const REG = 8;

LNK

        pub const LNK = 10;

SOCK

        pub const SOCK = 12;

WHT

        pub const WHT = 14;
    },
    .dragonfly => struct {

UNKNOWN

        pub const UNKNOWN = 0;

FIFO

        pub const FIFO = 1;

CHR

        pub const CHR = 2;

DIR

        pub const DIR = 4;

BLK

        pub const BLK = 6;

REG

        pub const REG = 8;

LNK

        pub const LNK = 10;

SOCK

        pub const SOCK = 12;

WHT

        pub const WHT = 14;

DBF

        pub const DBF = 15;
    },
    .openbsd => struct {

UNKNOWN

        pub const UNKNOWN = 0;

FIFO

        pub const FIFO = 1;

CHR

        pub const CHR = 2;

DIR

        pub const DIR = 4;

BLK

        pub const BLK = 6;

REG

        pub const REG = 8;

LNK

        pub const LNK = 10;

SOCK

        pub const SOCK = 12;

WHT

        pub const WHT = 14; // XXX
    },
    else => void,

DIR

};
pub const MSG = switch (native_os) {
    .linux => linux.MSG,
    .emscripten => emscripten.MSG,
    .windows => ws2_32.MSG,
    .haiku => struct {

OOB

        pub const OOB = 0x0001;

PEEK

        pub const PEEK = 0x0002;

DONTROUTE

        pub const DONTROUTE = 0x0004;

EOR

        pub const EOR = 0x0008;

TRUNC

        pub const TRUNC = 0x0010;

CTRUNC

        pub const CTRUNC = 0x0020;

WAITALL

        pub const WAITALL = 0x0040;

DONTWAIT

        pub const DONTWAIT = 0x0080;

BCAST

        pub const BCAST = 0x0100;

MCAST

        pub const MCAST = 0x0200;

EOF

        pub const EOF = 0x0400;

NOSIGNAL

        pub const NOSIGNAL = 0x0800;
    },
    else => void,

DIR

};
pub const SOCK = switch (native_os) {
    .linux => linux.SOCK,
    .emscripten => emscripten.SOCK,
    .windows => ws2_32.SOCK,
    .macos, .ios, .tvos, .watchos, .visionos => struct {

STREAM

        pub const STREAM = 1;

DGRAM

        pub const DGRAM = 2;

RAW

        pub const RAW = 3;

RDM

        pub const RDM = 4;

SEQPACKET

        pub const SEQPACKET = 5;

MAXADDRLEN

        pub const MAXADDRLEN = 255;

CLOEXEC


        /// 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.

NONBLOCK

        pub const NONBLOCK = 1 << 16;
    },
    .freebsd => struct {

STREAM

        pub const STREAM = 1;

DGRAM

        pub const DGRAM = 2;

RAW

        pub const RAW = 3;

RDM

        pub const RDM = 4;

SEQPACKET

        pub const SEQPACKET = 5;

CLOEXEC


CLOEXEC

        pub const CLOEXEC = 0x10000000;

NONBLOCK

        pub const NONBLOCK = 0x20000000;
    },
    .solaris, .illumos => struct {
        /// Datagram.
        pub const DGRAM = 1;
        /// STREAM.

STREAM

        pub const STREAM = 2;
        /// Raw-protocol interface.

RAW

        pub const RAW = 4;
        /// Reliably-delivered message.

RDM

        pub const RDM = 5;
        /// Sequenced packed stream.

SEQPACKET

        pub const SEQPACKET = 6;

NONBLOCK


        pub const NONBLOCK = 0x100000;

NDELAY

        pub const NDELAY = 0x200000;

CLOEXEC

        pub const CLOEXEC = 0x080000;
    },
    .netbsd => struct {

STREAM

        pub const STREAM = 1;

DGRAM

        pub const DGRAM = 2;

RAW

        pub const RAW = 3;

RDM

        pub const RDM = 4;

SEQPACKET

        pub const SEQPACKET = 5;

CONN_DGRAM

        pub const CONN_DGRAM = 6;

DCCP

        pub const DCCP = CONN_DGRAM;

CLOEXEC


CLOEXEC

        pub const CLOEXEC = 0x10000000;

NONBLOCK

        pub const NONBLOCK = 0x20000000;
        pub const NOSIGPIPE = 0x40000000;

FLAGS_MASK

        pub const FLAGS_MASK = 0xf0000000;
    },
    .dragonfly => struct {

STREAM

        pub const STREAM = 1;

DGRAM

        pub const DGRAM = 2;

RAW

        pub const RAW = 3;

RDM

        pub const RDM = 4;

SEQPACKET

        pub const SEQPACKET = 5;

MAXADDRLEN

        pub const MAXADDRLEN = 255;

CLOEXEC

        pub const CLOEXEC = 0x10000000;

NONBLOCK

        pub const NONBLOCK = 0x20000000;
    },
    .haiku => struct {

STREAM

        pub const STREAM = 1;

DGRAM

        pub const DGRAM = 2;

RAW

        pub const RAW = 3;

SEQPACKET

        pub const SEQPACKET = 5;

MISC

        pub const MISC = 255;
    },
    .openbsd => struct {

STREAM

        pub const STREAM = 1;

DGRAM

        pub const DGRAM = 2;

RAW

        pub const RAW = 3;

RDM

        pub const RDM = 4;

SEQPACKET

        pub const SEQPACKET = 5;

CLOEXEC


        pub const CLOEXEC = 0x8000;

NONBLOCK

        pub const NONBLOCK = 0x4000;
    },
    else => void,

DIR

};
pub const TCP = switch (native_os) {
    .macos => darwin.TCP,
    .linux => linux.TCP,
    .emscripten => emscripten.TCP,
    .windows => ws2_32.TCP,
    else => void,

DIR

};
pub const IPPROTO = switch (native_os) {
    .linux, .emscripten => linux.IPPROTO,
    .windows => ws2_32.IPPROTO,
    .macos, .ios, .tvos, .watchos, .visionos => struct {

ICMP

        pub const ICMP = 1;

ICMPV6

        pub const ICMPV6 = 58;

TCP

        pub const TCP = 6;

UDP

        pub const UDP = 17;

IP

        pub const IP = 0;

IPV6

        pub const IPV6 = 41;
    },
    .freebsd => struct {
        /// dummy for IP

IP

        pub const IP = 0;
        /// control message protocol

ICMP

        pub const ICMP = 1;
        /// tcp

TCP

        pub const TCP = 6;
        /// user datagram protocol

UDP

        pub const UDP = 17;
        /// IP6 header

IPV6

        pub const IPV6 = 41;
        /// raw IP packet

RAW

        pub const RAW = 255;
        /// IP6 hop-by-hop options

HOPOPTS

        pub const HOPOPTS = 0;
        /// group mgmt protocol

IGMP

        pub const IGMP = 2;
        /// gateway^2 (deprecated)

GGP

        pub const GGP = 3;
        /// IPv4 encapsulation

IPV4

        pub const IPV4 = 4;
        /// for compatibility

IPIP

        pub const IPIP = IPV4;
        /// Stream protocol II

ST

        pub const ST = 7;
        /// exterior gateway protocol

EGP

        pub const EGP = 8;
        /// private interior gateway

PIGP

        pub const PIGP = 9;
        /// BBN RCC Monitoring

RCCMON

        pub const RCCMON = 10;
        /// network voice protocol

NVPII

        pub const NVPII = 11;
        /// pup

PUP

        pub const PUP = 12;
        /// Argus

ARGUS

        pub const ARGUS = 13;
        /// EMCON

EMCON

        pub const EMCON = 14;
        /// Cross Net Debugger

XNET

        pub const XNET = 15;
        /// Chaos

CHAOS

        pub const CHAOS = 16;
        /// Multiplexing

MUX

        pub const MUX = 18;
        /// DCN Measurement Subsystems

MEAS

        pub const MEAS = 19;
        /// Host Monitoring

HMP

        pub const HMP = 20;
        /// Packet Radio Measurement

PRM

        pub const PRM = 21;
        /// xns idp

IDP

        pub const IDP = 22;
        /// Trunk-1

TRUNK1

        pub const TRUNK1 = 23;
        /// Trunk-2

TRUNK2

        pub const TRUNK2 = 24;
        /// Leaf-1

LEAF1

        pub const LEAF1 = 25;
        /// Leaf-2

LEAF2

        pub const LEAF2 = 26;
        /// Reliable Data

RDP

        pub const RDP = 27;
        /// Reliable Transaction

IRTP

        pub const IRTP = 28;
        /// tp-4 w/ class negotiation

TP

        pub const TP = 29;
        /// Bulk Data Transfer

BLT

        pub const BLT = 30;
        /// Network Services

NSP

        pub const NSP = 31;
        /// Merit Internodal

INP

        pub const INP = 32;
        /// Datagram Congestion Control Protocol

DCCP

        pub const DCCP = 33;
        /// Third Party Connect

@"3PC"

        pub const @"3PC" = 34;
        /// InterDomain Policy Routing

IDPR

        pub const IDPR = 35;
        /// XTP

XTP

        pub const XTP = 36;
        /// Datagram Delivery

DDP

        pub const DDP = 37;
        /// Control Message Transport

CMTP

        pub const CMTP = 38;
        /// TP++ Transport

TPXX

        pub const TPXX = 39;
        /// IL transport protocol

IL

        pub const IL = 40;
        /// Source Demand Routing

SDRP

        pub const SDRP = 42;
        /// IP6 routing header

ROUTING

        pub const ROUTING = 43;
        /// IP6 fragmentation header

FRAGMENT

        pub const FRAGMENT = 44;
        /// InterDomain Routing

IDRP

        pub const IDRP = 45;
        /// resource reservation

RSVP

        pub const RSVP = 46;
        /// General Routing Encap.

GRE

        pub const GRE = 47;
        /// Mobile Host Routing

MHRP

        pub const MHRP = 48;
        /// BHA

BHA

        pub const BHA = 49;
        /// IP6 Encap Sec. Payload

ESP

        pub const ESP = 50;
        /// IP6 Auth Header

AH

        pub const AH = 51;
        /// Integ. Net Layer Security

INLSP

        pub const INLSP = 52;
        /// IP with encryption

SWIPE

        pub const SWIPE = 53;
        /// Next Hop Resolution

NHRP

        pub const NHRP = 54;
        /// IP Mobility

MOBILE

        pub const MOBILE = 55;
        /// Transport Layer Security

TLSP

        pub const TLSP = 56;
        /// SKIP

SKIP

        pub const SKIP = 57;
        /// ICMP6

ICMPV6

        pub const ICMPV6 = 58;
        /// IP6 no next header

NONE

        pub const NONE = 59;
        /// IP6 destination option

DSTOPTS

        pub const DSTOPTS = 60;
        /// any host internal protocol

AHIP

        pub const AHIP = 61;
        /// CFTP

CFTP

        pub const CFTP = 62;
        /// "hello" routing protocol

HELLO

        pub const HELLO = 63;
        /// SATNET/Backroom EXPAK

SATEXPAK

        pub const SATEXPAK = 64;
        /// Kryptolan

KRYPTOLAN

        pub const KRYPTOLAN = 65;
        /// Remote Virtual Disk

RVD

        pub const RVD = 66;
        /// Pluribus Packet Core

IPPC

        pub const IPPC = 67;
        /// Any distributed FS

ADFS

        pub const ADFS = 68;
        /// Satnet Monitoring

SATMON

        pub const SATMON = 69;
        /// VISA Protocol

VISA

        pub const VISA = 70;
        /// Packet Core Utility

IPCV

        pub const IPCV = 71;
        /// Comp. Prot. Net. Executive

CPNX

        pub const CPNX = 72;
        /// Comp. Prot. HeartBeat

CPHB

        pub const CPHB = 73;
        /// Wang Span Network

WSN

        pub const WSN = 74;
        /// Packet Video Protocol

PVP

        pub const PVP = 75;
        /// BackRoom SATNET Monitoring

BRSATMON

        pub const BRSATMON = 76;
        /// Sun net disk proto (temp.)

ND

        pub const ND = 77;
        /// WIDEBAND Monitoring

WBMON

        pub const WBMON = 78;
        /// WIDEBAND EXPAK

WBEXPAK

        pub const WBEXPAK = 79;
        /// ISO cnlp

EON

        pub const EON = 80;
        /// VMTP

VMTP

        pub const VMTP = 81;
        /// Secure VMTP

SVMTP

        pub const SVMTP = 82;
        /// Banyon VINES

VINES

        pub const VINES = 83;
        /// TTP

TTP

        pub const TTP = 84;
        /// NSFNET-IGP

IGP

        pub const IGP = 85;
        /// dissimilar gateway prot.

DGP

        pub const DGP = 86;
        /// TCF

TCF

        pub const TCF = 87;
        /// Cisco/GXS IGRP

IGRP

        pub const IGRP = 88;
        /// OSPFIGP

OSPFIGP

        pub const OSPFIGP = 89;
        /// Strite RPC protocol

SRPC

        pub const SRPC = 90;
        /// Locus Address Resoloution

LARP

        pub const LARP = 91;
        /// Multicast Transport

MTP

        pub const MTP = 92;
        /// AX.25 Frames

AX25

        pub const AX25 = 93;
        /// IP encapsulated in IP

IPEIP

        pub const IPEIP = 94;
        /// Mobile Int.ing control

MICP

        pub const MICP = 95;
        /// Semaphore Comm. security

SCCSP

        pub const SCCSP = 96;
        /// Ethernet IP encapsulation

ETHERIP

        pub const ETHERIP = 97;
        /// encapsulation header

ENCAP

        pub const ENCAP = 98;
        /// any private encr. scheme

APES

        pub const APES = 99;
        /// GMTP

GMTP

        pub const GMTP = 100;
        /// payload compression (IPComp)

IPCOMP

        pub const IPCOMP = 108;
        /// SCTP

SCTP

        pub const SCTP = 132;
        /// IPv6 Mobility Header

MH

        pub const MH = 135;
        /// UDP-Lite

UDPLITE

        pub const UDPLITE = 136;
        /// IP6 Host Identity Protocol

HIP

        pub const HIP = 139;
        /// IP6 Shim6 Protocol

SHIM6

        pub const SHIM6 = 140;
        /// Protocol Independent Mcast

PIM

        pub const PIM = 103;
        /// CARP

CARP

        pub const CARP = 112;
        /// PGM

PGM

        pub const PGM = 113;
        /// MPLS-in-IP

MPLS

        pub const MPLS = 137;
        /// PFSYNC

PFSYNC

        pub const PFSYNC = 240;
        /// Reserved

RESERVED_253

        pub const RESERVED_253 = 253;
        /// Reserved

RESERVED_254

        pub const RESERVED_254 = 254;
    },
    .solaris, .illumos => struct {
        /// dummy for IP

IP

        pub const IP = 0;
        /// Hop by hop header for IPv6

HOPOPTS

        pub const HOPOPTS = 0;
        /// control message protocol

ICMP

        pub const ICMP = 1;
        /// group control protocol

IGMP

        pub const IGMP = 2;
        /// gateway^2 (deprecated)

GGP

        pub const GGP = 3;
        /// IP in IP encapsulation

ENCAP

        pub const ENCAP = 4;
        /// tcp

TCP

        pub const TCP = 6;
        /// exterior gateway protocol

EGP

        pub const EGP = 8;
        /// pup

PUP

        pub const PUP = 12;
        /// user datagram protocol

UDP

        pub const UDP = 17;
        /// xns idp

IDP

        pub const IDP = 22;
        /// IPv6 encapsulated in IP

IPV6

        pub const IPV6 = 41;
        /// Routing header for IPv6

ROUTING

        pub const ROUTING = 43;
        /// Fragment header for IPv6

FRAGMENT

        pub const FRAGMENT = 44;
        /// rsvp

RSVP

        pub const RSVP = 46;
        /// IPsec Encap. Sec. Payload

ESP

        pub const ESP = 50;
        /// IPsec Authentication Hdr.

AH

        pub const AH = 51;
        /// ICMP for IPv6

ICMPV6

        pub const ICMPV6 = 58;
        /// No next header for IPv6

NONE

        pub const NONE = 59;
        /// Destination options

DSTOPTS

        pub const DSTOPTS = 60;
        /// "hello" routing protocol

HELLO

        pub const HELLO = 63;
        /// UNOFFICIAL net disk proto

ND

        pub const ND = 77;
        /// ISO clnp

EON

        pub const EON = 80;
        /// OSPF

OSPF

        pub const OSPF = 89;
        /// PIM routing protocol

PIM

        pub const PIM = 103;
        /// Stream Control

SCTP

        pub const SCTP = 132;
        /// raw IP packet

RAW

        pub const RAW = 255;
        /// Sockets Direct Protocol

PROTO_SDP

        pub const PROTO_SDP = 257;
    },
    .netbsd => struct {
        /// dummy for IP

IP

        pub const IP = 0;
        /// IP6 hop-by-hop options

HOPOPTS

        pub const HOPOPTS = 0;
        /// control message protocol

ICMP

        pub const ICMP = 1;
        /// group mgmt protocol

IGMP

        pub const IGMP = 2;
        /// gateway^2 (deprecated)

GGP

        pub const GGP = 3;
        /// IP header

IPV4

        pub const IPV4 = 4;
        /// IP inside IP

IPIP

        pub const IPIP = 4;
        /// tcp

TCP

        pub const TCP = 6;
        /// exterior gateway protocol

EGP

        pub const EGP = 8;
        /// pup

PUP

        pub const PUP = 12;
        /// user datagram protocol

UDP

        pub const UDP = 17;
        /// xns idp

IDP

        pub const IDP = 22;
        /// tp-4 w/ class negotiation

TP

        pub const TP = 29;
        /// DCCP

DCCP

        pub const DCCP = 33;
        /// IP6 header

IPV6

        pub const IPV6 = 41;
        /// IP6 routing header

ROUTING

        pub const ROUTING = 43;
        /// IP6 fragmentation header

FRAGMENT

        pub const FRAGMENT = 44;
        /// resource reservation

RSVP

        pub const RSVP = 46;
        /// GRE encaps RFC 1701

GRE

        pub const GRE = 47;
        /// encap. security payload

ESP

        pub const ESP = 50;
        /// authentication header

AH

        pub const AH = 51;
        /// IP Mobility RFC 2004

MOBILE

        pub const MOBILE = 55;
        /// IPv6 ICMP

IPV6_ICMP

        pub const IPV6_ICMP = 58;
        /// ICMP6

ICMPV6

        pub const ICMPV6 = 58;
        /// IP6 no next header

NONE

        pub const NONE = 59;
        /// IP6 destination option

DSTOPTS

        pub const DSTOPTS = 60;
        /// ISO cnlp

EON

        pub const EON = 80;
        /// Ethernet-in-IP

ETHERIP

        pub const ETHERIP = 97;
        /// encapsulation header

ENCAP

        pub const ENCAP = 98;
        /// Protocol indep. multicast

PIM

        pub const PIM = 103;
        /// IP Payload Comp. Protocol

IPCOMP

        pub const IPCOMP = 108;
        /// VRRP RFC 2338

VRRP

        pub const VRRP = 112;
        /// Common Address Resolution Protocol

CARP

        pub const CARP = 112;
        /// L2TPv3

L2TP

        pub const L2TP = 115;
        /// SCTP

SCTP

        pub const SCTP = 132;
        /// PFSYNC

PFSYNC

        pub const PFSYNC = 240;
        /// raw IP packet

RAW

        pub const RAW = 255;
    },
    .dragonfly => struct {

IP

        pub const IP = 0;

ICMP

        pub const ICMP = 1;

TCP

        pub const TCP = 6;

UDP

        pub const UDP = 17;

IPV6

        pub const IPV6 = 41;

RAW

        pub const RAW = 255;

HOPOPTS

        pub const HOPOPTS = 0;

IGMP

        pub const IGMP = 2;

GGP

        pub const GGP = 3;

IPV4

        pub const IPV4 = 4;

IPIP

        pub const IPIP = IPV4;

ST

        pub const ST = 7;

EGP

        pub const EGP = 8;

PIGP

        pub const PIGP = 9;

RCCMON

        pub const RCCMON = 10;

NVPII

        pub const NVPII = 11;

PUP

        pub const PUP = 12;

ARGUS

        pub const ARGUS = 13;

EMCON

        pub const EMCON = 14;

XNET

        pub const XNET = 15;

CHAOS

        pub const CHAOS = 16;

MUX

        pub const MUX = 18;

MEAS

        pub const MEAS = 19;

HMP

        pub const HMP = 20;

PRM

        pub const PRM = 21;

IDP

        pub const IDP = 22;

TRUNK1

        pub const TRUNK1 = 23;

TRUNK2

        pub const TRUNK2 = 24;

LEAF1

        pub const LEAF1 = 25;

LEAF2

        pub const LEAF2 = 26;

RDP

        pub const RDP = 27;

IRTP

        pub const IRTP = 28;

TP

        pub const TP = 29;

BLT

        pub const BLT = 30;

NSP

        pub const NSP = 31;

INP

        pub const INP = 32;

SEP

        pub const SEP = 33;

@"3PC"

        pub const @"3PC" = 34;

IDPR

        pub const IDPR = 35;

XTP

        pub const XTP = 36;

DDP

        pub const DDP = 37;

CMTP

        pub const CMTP = 38;

TPXX

        pub const TPXX = 39;

IL

        pub const IL = 40;

SDRP

        pub const SDRP = 42;

ROUTING

        pub const ROUTING = 43;

FRAGMENT

        pub const FRAGMENT = 44;

IDRP

        pub const IDRP = 45;

RSVP

        pub const RSVP = 46;

GRE

        pub const GRE = 47;

MHRP

        pub const MHRP = 48;

BHA

        pub const BHA = 49;

ESP

        pub const ESP = 50;

AH

        pub const AH = 51;

INLSP

        pub const INLSP = 52;

SWIPE

        pub const SWIPE = 53;

NHRP

        pub const NHRP = 54;

MOBILE

        pub const MOBILE = 55;

TLSP

        pub const TLSP = 56;

SKIP

        pub const SKIP = 57;

ICMPV6

        pub const ICMPV6 = 58;

NONE

        pub const NONE = 59;

DSTOPTS

        pub const DSTOPTS = 60;

AHIP

        pub const AHIP = 61;

CFTP

        pub const CFTP = 62;

HELLO

        pub const HELLO = 63;

SATEXPAK

        pub const SATEXPAK = 64;

KRYPTOLAN

        pub const KRYPTOLAN = 65;

RVD

        pub const RVD = 66;

IPPC

        pub const IPPC = 67;

ADFS

        pub const ADFS = 68;

SATMON

        pub const SATMON = 69;

VISA

        pub const VISA = 70;

IPCV

        pub const IPCV = 71;

CPNX

        pub const CPNX = 72;

CPHB

        pub const CPHB = 73;

WSN

        pub const WSN = 74;

PVP

        pub const PVP = 75;

BRSATMON

        pub const BRSATMON = 76;

ND

        pub const ND = 77;

WBMON

        pub const WBMON = 78;

WBEXPAK

        pub const WBEXPAK = 79;

EON

        pub const EON = 80;

VMTP

        pub const VMTP = 81;

SVMTP

        pub const SVMTP = 82;

VINES

        pub const VINES = 83;

TTP

        pub const TTP = 84;

IGP

        pub const IGP = 85;

DGP

        pub const DGP = 86;

TCF

        pub const TCF = 87;

IGRP

        pub const IGRP = 88;

OSPFIGP

        pub const OSPFIGP = 89;

SRPC

        pub const SRPC = 90;

LARP

        pub const LARP = 91;

MTP

        pub const MTP = 92;

AX25

        pub const AX25 = 93;

IPEIP

        pub const IPEIP = 94;

MICP

        pub const MICP = 95;

SCCSP

        pub const SCCSP = 96;

ETHERIP

        pub const ETHERIP = 97;

ENCAP

        pub const ENCAP = 98;

APES

        pub const APES = 99;

GMTP

        pub const GMTP = 100;

IPCOMP

        pub const IPCOMP = 108;

PIM

        pub const PIM = 103;

CARP

        pub const CARP = 112;

PGM

        pub const PGM = 113;

PFSYNC

        pub const PFSYNC = 240;

DIVERT

        pub const DIVERT = 254;

MAX

        pub const MAX = 256;

DONE

        pub const DONE = 257;

UNKNOWN

        pub const UNKNOWN = 258;
    },
    .haiku => struct {

IP

        pub const IP = 0;

HOPOPTS

        pub const HOPOPTS = 0;

ICMP

        pub const ICMP = 1;

IGMP

        pub const IGMP = 2;

TCP

        pub const TCP = 6;

UDP

        pub const UDP = 17;

IPV6

        pub const IPV6 = 41;

ROUTING

        pub const ROUTING = 43;

FRAGMENT

        pub const FRAGMENT = 44;

ESP

        pub const ESP = 50;

AH

        pub const AH = 51;

ICMPV6

        pub const ICMPV6 = 58;

NONE

        pub const NONE = 59;

DSTOPTS

        pub const DSTOPTS = 60;

ETHERIP

        pub const ETHERIP = 97;

RAW

        pub const RAW = 255;

MAX

        pub const MAX = 256;
    },
    .openbsd => struct {
        /// dummy for IP

IP

        pub const IP = 0;
        /// IP6 hop-by-hop options

HOPOPTS

        pub const HOPOPTS = IP;
        /// control message protocol

ICMP

        pub const ICMP = 1;
        /// group mgmt protocol

IGMP

        pub const IGMP = 2;
        /// gateway^2 (deprecated)

GGP

        pub const GGP = 3;
        /// IP header

IPV4

        pub const IPV4 = IPIP;
        /// IP inside IP

IPIP

        pub const IPIP = 4;
        /// tcp

TCP

        pub const TCP = 6;
        /// exterior gateway protocol

EGP

        pub const EGP = 8;
        /// pup

PUP

        pub const PUP = 12;
        /// user datagram protocol

UDP

        pub const UDP = 17;
        /// xns idp

IDP

        pub const IDP = 22;
        /// tp-4 w/ class negotiation

TP

        pub const TP = 29;
        /// IP6 header

IPV6

        pub const IPV6 = 41;
        /// IP6 routing header

ROUTING

        pub const ROUTING = 43;
        /// IP6 fragmentation header

FRAGMENT

        pub const FRAGMENT = 44;
        /// resource reservation

RSVP

        pub const RSVP = 46;
        /// GRE encaps RFC 1701

GRE

        pub const GRE = 47;
        /// encap. security payload

ESP

        pub const ESP = 50;
        /// authentication header

AH

        pub const AH = 51;
        /// IP Mobility RFC 2004

MOBILE

        pub const MOBILE = 55;
        /// IPv6 ICMP

IPV6_ICMP

        pub const IPV6_ICMP = 58;
        /// ICMP6

ICMPV6

        pub const ICMPV6 = 58;
        /// IP6 no next header

NONE

        pub const NONE = 59;
        /// IP6 destination option

DSTOPTS

        pub const DSTOPTS = 60;
        /// ISO cnlp

EON

        pub const EON = 80;
        /// Ethernet-in-IP

ETHERIP

        pub const ETHERIP = 97;
        /// encapsulation header

ENCAP

        pub const ENCAP = 98;
        /// Protocol indep. multicast

PIM

        pub const PIM = 103;
        /// IP Payload Comp. Protocol

IPCOMP

        pub const IPCOMP = 108;
        /// VRRP RFC 2338

VRRP

        pub const VRRP = 112;
        /// Common Address Resolution Protocol

CARP

        pub const CARP = 112;
        /// PFSYNC

PFSYNC

        pub const PFSYNC = 240;
        /// raw IP packet

RAW

        pub const RAW = 255;
    },
    else => void,

DIR

};
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 {

SOCKET

        pub const SOCKET = 0xffff;
    },
    .solaris, .illumos => struct {

SOCKET

        pub const SOCKET = 0xffff;

ROUTE

        pub const ROUTE = 0xfffe;

PACKET

        pub const PACKET = 0xfffd;

FILTER

        pub const FILTER = 0xfffc;
    },
    else => void,

DIR

};
pub const SO = switch (native_os) {
    .linux => linux.SO,
    .emscripten => emscripten.SO,
    .windows => ws2_32.SO,
    .macos, .ios, .tvos, .watchos, .visionos => struct {

DEBUG

        pub const DEBUG = 0x0001;

ACCEPTCONN

        pub const ACCEPTCONN = 0x0002;

REUSEADDR

        pub const REUSEADDR = 0x0004;

KEEPALIVE

        pub const KEEPALIVE = 0x0008;

DONTROUTE

        pub const DONTROUTE = 0x0010;

BROADCAST

        pub const BROADCAST = 0x0020;

USELOOPBACK

        pub const USELOOPBACK = 0x0040;

LINGER

        pub const LINGER = 0x1080;

OOBINLINE

        pub const OOBINLINE = 0x0100;

REUSEPORT

        pub const REUSEPORT = 0x0200;

ACCEPTFILTER

        pub const ACCEPTFILTER = 0x1000;

SNDBUF

        pub const SNDBUF = 0x1001;

RCVBUF

        pub const RCVBUF = 0x1002;

SNDLOWAT

        pub const SNDLOWAT = 0x1003;

RCVLOWAT

        pub const RCVLOWAT = 0x1004;

SNDTIMEO

        pub const SNDTIMEO = 0x1005;

RCVTIMEO

        pub const RCVTIMEO = 0x1006;

ERROR

        pub const ERROR = 0x1007;

TYPE

        pub const TYPE = 0x1008;

NREAD


        pub const NREAD = 0x1020;

NKE

        pub const NKE = 0x1021;

NOSIGPIPE

        pub const NOSIGPIPE = 0x1022;

NOADDRERR

        pub const NOADDRERR = 0x1023;

NWRITE

        pub const NWRITE = 0x1024;

REUSESHAREUID

        pub const REUSESHAREUID = 0x1025;
    },
    .freebsd => struct {

DEBUG

        pub const DEBUG = 0x00000001;

ACCEPTCONN

        pub const ACCEPTCONN = 0x00000002;

REUSEADDR

        pub const REUSEADDR = 0x00000004;

KEEPALIVE

        pub const KEEPALIVE = 0x00000008;

DONTROUTE

        pub const DONTROUTE = 0x00000010;

BROADCAST

        pub const BROADCAST = 0x00000020;

USELOOPBACK

        pub const USELOOPBACK = 0x00000040;

LINGER

        pub const LINGER = 0x00000080;

OOBINLINE

        pub const OOBINLINE = 0x00000100;

REUSEPORT

        pub const REUSEPORT = 0x00000200;

TIMESTAMP

        pub const TIMESTAMP = 0x00000400;

NOSIGPIPE

        pub const NOSIGPIPE = 0x00000800;

ACCEPTFILTER

        pub const ACCEPTFILTER = 0x00001000;

BINTIME

        pub const BINTIME = 0x00002000;

NO_OFFLOAD

        pub const NO_OFFLOAD = 0x00004000;

NO_DDP

        pub const NO_DDP = 0x00008000;

REUSEPORT_LB

        pub const REUSEPORT_LB = 0x00010000;

SNDBUF


SNDBUF

        pub const SNDBUF = 0x1001;

RCVBUF

        pub const RCVBUF = 0x1002;

SNDLOWAT

        pub const SNDLOWAT = 0x1003;

RCVLOWAT

        pub const RCVLOWAT = 0x1004;

SNDTIMEO

        pub const SNDTIMEO = 0x1005;

RCVTIMEO

        pub const RCVTIMEO = 0x1006;

ERROR

        pub const ERROR = 0x1007;

TYPE

        pub const TYPE = 0x1008;
        pub const LABEL = 0x1009;

PEERLABEL

        pub const PEERLABEL = 0x1010;

LISTENQLIMIT

        pub const LISTENQLIMIT = 0x1011;

LISTENQLEN

        pub const LISTENQLEN = 0x1012;

LISTENINCQLEN

        pub const LISTENINCQLEN = 0x1013;

SETFIB

        pub const SETFIB = 0x1014;

USER_COOKIE

        pub const USER_COOKIE = 0x1015;

PROTOCOL

        pub const PROTOCOL = 0x1016;

PROTOTYPE

        pub const PROTOTYPE = PROTOCOL;

TS_CLOCK

        pub const TS_CLOCK = 0x1017;

MAX_PACING_RATE

        pub const MAX_PACING_RATE = 0x1018;

DOMAIN

        pub const DOMAIN = 0x1019;
    },
    .solaris, .illumos => struct {

DEBUG

        pub const DEBUG = 0x0001;

ACCEPTCONN

        pub const ACCEPTCONN = 0x0002;

REUSEADDR

        pub const REUSEADDR = 0x0004;

KEEPALIVE

        pub const KEEPALIVE = 0x0008;

DONTROUTE

        pub const DONTROUTE = 0x0010;

BROADCAST

        pub const BROADCAST = 0x0020;

USELOOPBACK

        pub const USELOOPBACK = 0x0040;

LINGER

        pub const LINGER = 0x0080;

OOBINLINE

        pub const OOBINLINE = 0x0100;

DGRAM_ERRIND

        pub const DGRAM_ERRIND = 0x0200;

RECVUCRED

        pub const RECVUCRED = 0x0400;

SNDBUF


SNDBUF

        pub const SNDBUF = 0x1001;

RCVBUF

        pub const RCVBUF = 0x1002;

SNDLOWAT

        pub const SNDLOWAT = 0x1003;

RCVLOWAT

        pub const RCVLOWAT = 0x1004;

SNDTIMEO

        pub const SNDTIMEO = 0x1005;

RCVTIMEO

        pub const RCVTIMEO = 0x1006;

ERROR

        pub const ERROR = 0x1007;

TYPE

        pub const TYPE = 0x1008;
        pub const PROTOTYPE = 0x1009;

ANON_MLP

        pub const ANON_MLP = 0x100a;

MAC_EXEMPT

        pub const MAC_EXEMPT = 0x100b;

DOMAIN

        pub const DOMAIN = 0x100c;

RCVPSH

        pub const RCVPSH = 0x100d;

SECATTR


        pub const SECATTR = 0x1011;

TIMESTAMP

        pub const TIMESTAMP = 0x1013;

ALLZONES

        pub const ALLZONES = 0x1014;

EXCLBIND

        pub const EXCLBIND = 0x1015;

MAC_IMPLICIT

        pub const MAC_IMPLICIT = 0x1016;

VRRP

        pub const VRRP = 0x1017;
    },
    .netbsd => struct {

DEBUG

        pub const DEBUG = 0x0001;

ACCEPTCONN

        pub const ACCEPTCONN = 0x0002;

REUSEADDR

        pub const REUSEADDR = 0x0004;

KEEPALIVE

        pub const KEEPALIVE = 0x0008;

DONTROUTE

        pub const DONTROUTE = 0x0010;

BROADCAST

        pub const BROADCAST = 0x0020;

USELOOPBACK

        pub const USELOOPBACK = 0x0040;

LINGER

        pub const LINGER = 0x0080;

OOBINLINE

        pub const OOBINLINE = 0x0100;

REUSEPORT

        pub const REUSEPORT = 0x0200;

NOSIGPIPE

        pub const NOSIGPIPE = 0x0800;

ACCEPTFILTER

        pub const ACCEPTFILTER = 0x1000;

TIMESTAMP

        pub const TIMESTAMP = 0x2000;

RERROR

        pub const RERROR = 0x4000;

SNDBUF


SNDBUF

        pub const SNDBUF = 0x1001;

RCVBUF

        pub const RCVBUF = 0x1002;

SNDLOWAT

        pub const SNDLOWAT = 0x1003;

RCVLOWAT

        pub const RCVLOWAT = 0x1004;

ERROR

        pub const ERROR = 0x1007;

TYPE

        pub const TYPE = 0x1008;
        pub const OVERFLOWED = 0x1009;

NOHEADER


        pub const NOHEADER = 0x100a;

SNDTIMEO

        pub const SNDTIMEO = 0x100b;

RCVTIMEO

        pub const RCVTIMEO = 0x100c;
    },
    .dragonfly => struct {

DEBUG

        pub const DEBUG = 0x0001;

ACCEPTCONN

        pub const ACCEPTCONN = 0x0002;

REUSEADDR

        pub const REUSEADDR = 0x0004;

KEEPALIVE

        pub const KEEPALIVE = 0x0008;

DONTROUTE

        pub const DONTROUTE = 0x0010;

BROADCAST

        pub const BROADCAST = 0x0020;

USELOOPBACK

        pub const USELOOPBACK = 0x0040;

LINGER

        pub const LINGER = 0x0080;

OOBINLINE

        pub const OOBINLINE = 0x0100;

REUSEPORT

        pub const REUSEPORT = 0x0200;

TIMESTAMP

        pub const TIMESTAMP = 0x0400;

NOSIGPIPE

        pub const NOSIGPIPE = 0x0800;

ACCEPTFILTER

        pub const ACCEPTFILTER = 0x1000;

RERROR

        pub const RERROR = 0x2000;

PASSCRED

        pub const PASSCRED = 0x4000;

SNDBUF


SNDBUF

        pub const SNDBUF = 0x1001;

RCVBUF

        pub const RCVBUF = 0x1002;

SNDLOWAT

        pub const SNDLOWAT = 0x1003;

RCVLOWAT

        pub const RCVLOWAT = 0x1004;

SNDTIMEO

        pub const SNDTIMEO = 0x1005;

RCVTIMEO

        pub const RCVTIMEO = 0x1006;

ERROR

        pub const ERROR = 0x1007;

TYPE

        pub const TYPE = 0x1008;
        pub const SNDSPACE = 0x100a;

CPUHINT

        pub const CPUHINT = 0x1030;
    },
    .haiku => struct {

ACCEPTCONN

        pub const ACCEPTCONN = 0x00000001;

BROADCAST

        pub const BROADCAST = 0x00000002;

DEBUG

        pub const DEBUG = 0x00000004;

DONTROUTE

        pub const DONTROUTE = 0x00000008;

KEEPALIVE

        pub const KEEPALIVE = 0x00000010;

OOBINLINE

        pub const OOBINLINE = 0x00000020;

REUSEADDR

        pub const REUSEADDR = 0x00000040;

REUSEPORT

        pub const REUSEPORT = 0x00000080;

USELOOPBACK

        pub const USELOOPBACK = 0x00000100;

LINGER

        pub const LINGER = 0x00000200;

SNDBUF


        pub const SNDBUF = 0x40000001;

SNDLOWAT

        pub const SNDLOWAT = 0x40000002;

SNDTIMEO

        pub const SNDTIMEO = 0x40000003;

RCVBUF

        pub const RCVBUF = 0x40000004;

RCVLOWAT

        pub const RCVLOWAT = 0x40000005;

RCVTIMEO

        pub const RCVTIMEO = 0x40000006;

ERROR

        pub const ERROR = 0x40000007;

TYPE

        pub const TYPE = 0x40000008;

NONBLOCK

        pub const NONBLOCK = 0x40000009;

BINDTODEVICE

        pub const BINDTODEVICE = 0x4000000a;

PEERCRED

        pub const PEERCRED = 0x4000000b;
    },
    .openbsd => struct {

DEBUG

        pub const DEBUG = 0x0001;

ACCEPTCONN

        pub const ACCEPTCONN = 0x0002;

REUSEADDR

        pub const REUSEADDR = 0x0004;

KEEPALIVE

        pub const KEEPALIVE = 0x0008;

DONTROUTE

        pub const DONTROUTE = 0x0010;

BROADCAST

        pub const BROADCAST = 0x0020;

USELOOPBACK

        pub const USELOOPBACK = 0x0040;

LINGER

        pub const LINGER = 0x0080;

OOBINLINE

        pub const OOBINLINE = 0x0100;

REUSEPORT

        pub const REUSEPORT = 0x0200;

TIMESTAMP

        pub const TIMESTAMP = 0x0800;

BINDANY

        pub const BINDANY = 0x1000;

ZEROIZE

        pub const ZEROIZE = 0x2000;

SNDBUF

        pub const SNDBUF = 0x1001;

RCVBUF

        pub const RCVBUF = 0x1002;

SNDLOWAT

        pub const SNDLOWAT = 0x1003;

RCVLOWAT

        pub const RCVLOWAT = 0x1004;

SNDTIMEO

        pub const SNDTIMEO = 0x1005;

RCVTIMEO

        pub const RCVTIMEO = 0x1006;

ERROR

        pub const ERROR = 0x1007;

TYPE

        pub const TYPE = 0x1008;

NETPROC

        pub const NETPROC = 0x1020;

RTABLE

        pub const RTABLE = 0x1021;

PEERCRED

        pub const PEERCRED = 0x1022;

SPLICE

        pub const SPLICE = 0x1023;

DOMAIN

        pub const DOMAIN = 0x1024;

PROTOCOL

        pub const PROTOCOL = 0x1025;
    },
    else => void,

DIR

};
pub const SOMAXCONN = switch (native_os) {
    .linux => linux.SOMAXCONN,
    .windows => ws2_32.SOMAXCONN,
    .solaris, .illumos => 128,
    .openbsd => 28,
    else => void,

DIR

};
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,

DIR

};

time_t


pub const stack_t = switch (native_os) {
    .linux => linux.stack_t,
    .emscripten => emscripten.stack_t,
    .freebsd, .openbsd => 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,
    },

DIR

};
pub const time_t = switch (native_os) {
    .linux => linux.time_t,
    .emscripten => emscripten.time_t,
    .haiku, .dragonfly => isize,
    else => i64,

DIR

};
pub const suseconds_t = switch (native_os) {
    .solaris, .illumos => i64,
    .freebsd, .dragonfly => c_long,
    .netbsd => c_int,
    .haiku => i32,
    else => void,

DIR

};

ucontext_t


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,

DIR

};
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,

DIR

};

utsname


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, .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,

DIR

};
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,

DIR

};

RTLD


pub const user_desc = switch (native_os) {
    .linux => linux.user_desc,
    else => void,

DIR

};
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,
    },
    .macos => extern struct {
        sysname: [256:0]u8,
        nodename: [256:0]u8,
        release: [256:0]u8,
        version: [256:0]u8,
        machine: [256:0]u8,
    },
    else => void,

DIR

};
pub const PR = switch (native_os) {
    .linux => linux.PR,
    else => void,

DIR

};
pub const _errno = switch (native_os) {
    .linux => switch (native_abi) {
        .android, .androideabi => 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 => {},

DIR

};

AI


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,

DIR

};

EAI


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,

dl_iterate_phdr_callback


        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,

DIR

};
pub const MAXNAMLEN = switch (native_os) {
    .netbsd, .solaris, .illumos => 511,
    .haiku => NAME_MAX,
    .openbsd => 255,
    else => {},

DIR

};
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,

DIR

};

ctime()


pub const AI = if (builtin.abi.isAndroid()) 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,
} else 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: u5 = 0,
        ALL: bool = false,
        V4MAPPED_CFG: bool = false,
        ADDRCONFIG: bool = false,
        V4MAPPED: bool = false,
        NUMERICSERV: bool = false,
        _: u19 = 0,
    },
    .windows => ws2_32.AI,
    else => void,

DIR

};

mtime()


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,

DIR

};

atime()


pub const EAI = if (builtin.abi.isAndroid()) 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,

mtime()


    MAX = 15,

ctime()


    _,
} else 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,

atime()


        NODATA = -5,
        ADDRFAMILY = -9,
        INPROGRESS = -100,
        CANCELED = -101,
        NOTCANCELED = -102,
        ALLDONE = -103,
        INTR = -104,
        IDN_ENCODE = -105,

mtime()


        _,
    },
    .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,

ctime()


        _,
    },
    .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,

DIR

};

mtime()


pub const dl_iterate_phdr_callback = *const fn (info: *dl_phdr_info, size: usize, data: ?*anyopaque) callconv(.c) c_int;

ctime()


pub const Stat = switch (native_os) {
    .linux => switch (native_arch) {
        .sparc64 => extern struct {
            dev: u64,
            __pad1: u16,
            ino: ino_t,
            mode: u32,
            nlink: u32,

atime()


            uid: u32,
            gid: u32,
            rdev: u64,
            __pad2: u16,

mtime()


            size: off_t,
            blksize: isize,
            blocks: i64,

ctime()


            atim: timespec,
            mtim: timespec,
            ctim: timespec,
            __reserved: [2]usize,

fromFilestat()


            pub fn atime(self: @This()) timespec {
                return self.atim;
            }

atime()


            pub fn mtime(self: @This()) timespec {
                return self.mtim;
            }

mtime()


            pub fn ctime(self: @This()) timespec {
                return self.ctim;
            }
        },
        .mips, .mipsel => if (builtin.target.abi.isMusl()) extern struct {
            dev: dev_t,
            __pad0: [2]i32,
            ino: ino_t,
            mode: mode_t,
            nlink: nlink_t,
            uid: uid_t,
            gid: gid_t,
            rdev: dev_t,
            __pad1: [2]i32,
            size: off_t,
            atim: timespec,
            mtim: timespec,
            ctim: timespec,
            blksize: blksize_t,
            __pad3: i32,
            blocks: blkcnt_t,
            __pad4: [14]i32,

ctime()


            pub fn atime(self: @This()) timespec {
                return self.atim;
            }

birthtime()


            pub fn mtime(self: @This()) timespec {
                return self.mtim;
            }

atime()


            pub fn ctime(self: @This()) timespec {
                return self.ctim;
            }
        } else extern struct {
            dev: u32,
            __pad0: [3]u32,
            ino: ino_t,
            mode: mode_t,
            nlink: nlink_t,
            uid: uid_t,
            gid: gid_t,
            rdev: u32,
            __pad1: [3]u32,
            size: off_t,
            atim: timespec,
            mtim: timespec,
            ctim: timespec,
            blksize: blksize_t,
            __pad3: u32,
            blocks: blkcnt_t,
            __pad4: [14]u32,

mtime()


            pub fn atime(self: @This()) timespec {
                return self.atim;
            }

ctime()


            pub fn mtime(self: @This()) timespec {
                return self.mtim;
            }

atime()


            pub fn ctime(self: @This()) timespec {
                return self.ctim;
            }
        },
        .mips64, .mips64el => if (builtin.target.abi.isMusl()) extern struct {
            dev: dev_t,
            __pad0: [3]i32,
            ino: ino_t,
            mode: mode_t,
            nlink: nlink_t,
            uid: uid_t,
            gid: gid_t,
            rdev: dev_t,
            __pad1: [2]u32,
            size: off_t,
            __pad2: i32,
            atim: timespec,
            mtim: timespec,
            ctim: timespec,
            blksize: blksize_t,
            __pad3: u32,
            blocks: blkcnt_t,
            __pad4: [14]i32,

mtime()


            pub fn atime(self: @This()) timespec {
                return self.atim;
            }

ctime()


            pub fn mtime(self: @This()) timespec {
                return self.mtim;
            }

birthtime()


            pub fn ctime(self: @This()) timespec {
                return self.ctim;
            }
        } else extern struct {
            dev: dev_t,
            __pad0: [3]u32,
            ino: ino_t,
            mode: mode_t,
            nlink: nlink_t,
            uid: uid_t,
            gid: gid_t,
            rdev: dev_t,
            __pad1: [3]u32,
            size: off_t,
            atim: timespec,
            mtim: timespec,
            ctim: timespec,
            blksize: blksize_t,
            __pad3: u32,
            blocks: blkcnt_t,
            __pad4: [14]i32,

atime()


            pub fn atime(self: @This()) timespec {
                return self.atim;
            }

mtime()


            pub fn mtime(self: @This()) timespec {
                return self.mtim;
            }

ctime()


            pub fn ctime(self: @This()) timespec {
                return self.ctim;
            }
        },

atime()


        else => std.os.linux.Stat, // libc stat is the same as kernel stat.
    },
    .emscripten => emscripten.Stat,
    .wasi => extern struct {
        // Match wasi-libc's `struct stat` in lib/libc/include/wasm-wasi-musl/__struct_stat.h
        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 },

mtime()


atime()

        pub fn atime(self: @This()) timespec {
            return self.atim;
        }

birthtime()


mtime()

        pub fn mtime(self: @This()) timespec {
            return self.mtim;
        }

mtime()


ctime()

        pub fn ctime(self: @This()) timespec {
            return self.ctim;
        }

birthtime()


        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),

pthread_mutex_t


                .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,

pthread_cond_t


        pub fn atime(self: @This()) timespec {
            return self.atimespec;
        }

pthread_rwlock_t


        pub fn mtime(self: @This()) timespec {
            return self.mtimespec;
        }

pthread_attr_t


        pub fn ctime(self: @This()) timespec {
            return self.ctimespec;
        }

pthread_key_t


        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,

padded_pthread_spin_t


        pub fn atime(self: @This()) timespec {
            return self.atim;
        }

pthread_spin_t


        pub fn mtime(self: @This()) timespec {
            return self.mtim;
        }

sem_t


        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,

Kevent


        pub fn atime(self: @This()) timespec {
            return self.atim;
        }

port_t


        pub fn mtime(self: @This()) timespec {
            return self.mtim;
        }

port_event


        pub fn ctime(self: @This()) timespec {
            return self.ctim;
        }

AT


        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;
        }

REMOVEDIR


        pub fn mtime(self: @This()) timespec {
            return self.mtim;
        }

FDCWD


        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,

EACCESS


        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,

SYMLINK_NOFOLLOW


        pub fn atime(self: @This()) timespec {
            return self.atim;
        }

SYMLINK_FOLLOW


        pub fn mtime(self: @This()) timespec {
            return self.mtim;
        }

REMOVEDIR


        pub fn ctime(self: @This()) timespec {
            return self.ctim;
        }

FDCWD


        pub fn birthtime(self: @This()) timespec {
            return self.birthtim;
        }
    },
    else => void,

DIR

};

SYMLINK_NOFOLLOW


pub const pthread_mutex_t = switch (native_os) {
    .linux => extern struct {
        data: [data_len]u8 align(@alignOf(usize)) = [_]u8{0} ** data_len,

SYMLINK_FOLLOW


        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) 32 else 40,
                .mips64, .powerpc64, .powerpc64le, .sparc64 => 40,
                else => if (@sizeOf(usize) == 8) 40 else 24,
            },
            .android, .androideabi => 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,

REMOVEDIR


        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,

DIR

};

FDCWD


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, .emscripten => extern struct {
        data: [48]u8 align(@alignOf(usize)) = [_]u8{0} ** 48,
    },
    else => void,

DIR

};

SYMLINK_NOFOLLOW


pub const pthread_rwlock_t = switch (native_os) {
    .linux => switch (native_abi) {
        .android, .androideabi => 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,

DIR

};

REMOVEDIR


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,

DIR

};

SYMLINK_NOFOLLOW


pub const pthread_key_t = switch (native_os) {
    .linux, .emscripten => c_uint,
    .macos, .ios, .tvos, .watchos, .visionos => c_ulong,
    .openbsd, .solaris, .illumos => c_int,
    else => void,

DIR

};

EACCESS


pub const padded_pthread_spin_t = switch (native_os) {
    .netbsd => switch (builtin.cpu.arch) {
        .x86, .x86_64 => u32,
        .sparc, .sparc64 => u32,
        else => pthread_spin_t,
    },
    else => void,

DIR

};

FDCWD


pub const pthread_spin_t = switch (native_os) {
    .netbsd => switch (builtin.cpu.arch) {
        .aarch64, .aarch64_be => u8,
        .mips, .mipsel, .mips64, .mips64el => u32,
        .powerpc, .powerpc64, .powerpc64le => i32,
        .x86, .x86_64 => u8,
        .arm, .armeb, .thumb, .thumbeb => i32,
        .sparc, .sparc64 => u8,
        .riscv32, .riscv64 => u32,
        else => @compileError("undefined pthread_spin_t for this arch"),
    },
    else => void,

DIR

};

SYMLINK_NOFOLLOW


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,

DIR

};

REMOVEDIR


/// 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,

FDCWD


        // 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,

DIR

};

SYMLINK_FOLLOW


pub const port_t = switch (native_os) {
    .solaris, .illumos => c_int,
    else => void,

DIR

};

EACCESS


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,

DIR

};

SYMLINK_NOFOLLOW


pub const AT = switch (native_os) {
    .linux => linux.AT,
    .windows => struct {
        /// Remove directory instead of unlinking file

REMOVEDIR

        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.

FDCWD

        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.

FDCWD

        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.

FDCWD

        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 {

FDCWD

        pub const FDCWD = -100;

SYMLINK_NOFOLLOW

        pub const SYMLINK_NOFOLLOW = 0x100;

REMOVEDIR

        pub const REMOVEDIR = 0x200;

SYMLINK_FOLLOW

        pub const SYMLINK_FOLLOW = 0x400;

NO_AUTOMOUNT

        pub const NO_AUTOMOUNT = 0x800;

EMPTY_PATH

        pub const EMPTY_PATH = 0x1000;

STATX_SYNC_TYPE

        pub const STATX_SYNC_TYPE = 0x6000;

STATX_SYNC_AS_STAT

        pub const STATX_SYNC_AS_STAT = 0x0000;

STATX_FORCE_SYNC

        pub const STATX_FORCE_SYNC = 0x2000;

STATX_DONT_SYNC

        pub const STATX_DONT_SYNC = 0x4000;

RECURSIVE

        pub const RECURSIVE = 0x8000;
    },
    .wasi => struct {
        // Match `AT_*` constants in lib/libc/include/wasm-wasi-musl/__header_fcntl.h

EACCESS

        pub const EACCESS = 0x0;

SYMLINK_NOFOLLOW

        pub const SYMLINK_NOFOLLOW = 0x1;

SYMLINK_FOLLOW

        pub const SYMLINK_FOLLOW = 0x2;

REMOVEDIR

        pub const REMOVEDIR = 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.

FDCWD:

        pub const FDCWD: fd_t = if (builtin.link_libc) -2 else 3;
    },
    else => void,

DIR

};

MAP


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) {
        // Match `O_*` bits from lib/libc/include/wasm-wasi-musl/__header_fcntl.h
        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,
        // O_CLOEXEC, O_TTY_ININT, O_NOCTTY are 0 in wasi-musl, so they're silently
        // ignored in C code.  Thus no mapping in Zig.
        _: 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,

DIR

};

MAP_FAILED:


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,
        JIT: bool = false,
        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,

DIR

};

V


pub const MREMAP = switch (native_os) {
    .linux => linux.MREMAP,
    else => void,

DIR

};

termios


/// Used by libc to communicate failure. Not actually part of the underlying syscall.
pub const MAP_FAILED: *anyopaque = @ptrFromInt(maxInt(usize));

tc_iflag_t


pub const cc_t = u8;

tc_oflag_t


/// 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,

DIR

};

tc_cflag_t


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,

DIR

};

speed_t


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,

DIR

};

sig_atomic_t


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,

DIR

};

MINSIGSTKSZ


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,

DIR

};

SS


pub const CSIZE = switch (native_os) {
    .linux => linux.CSIZE,
    .haiku => enum(u1) { CS7, CS8 },
    else => enum(u2) { CS5, CS6, CS7, CS8 },

DIR

};

DISABLE


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,

DIR

};

DISABLE


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,

DIR

};

ADD


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,

DELETE


        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,

DIR

};

DISABLE


pub const whence_t = if (native_os == .wasi) std.os.wasi.whence_t else c_int;

ONESHOT


pub const sig_atomic_t = c_int;

CLEAR


/// 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 => {},

DIR

};

DISPATCH


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 => {},

DIR

};
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 => {},

DIR

};
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,

DIR

};

SYSFLAGS


pub const EV = switch (native_os) {
    .macos, .ios, .tvos, .watchos, .visionos => struct {
        /// add event to kq (implies enable)

ADD

        pub const ADD = 0x0001;
        /// delete event from kq

DELETE

        pub const DELETE = 0x0002;
        /// enable event

ENABLE

        pub const ENABLE = 0x0004;
        /// disable event (not reported)

DISABLE

        pub const DISABLE = 0x0008;
        /// only report one occurrence

ONESHOT

        pub const ONESHOT = 0x0010;
        /// clear event state after reporting

CLEAR

        pub const CLEAR = 0x0020;
        /// force immediate event output
        /// ... with or without ERROR
        /// ... use KEVENT_FLAG_ERROR_EVENTS
        ///     on syscalls supporting flags

RECEIPT

        pub const RECEIPT = 0x0040;
        /// disable event after reporting

DISPATCH

        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

FLAG1

        pub const FLAG1 = 0x2000;
        /// EOF detected

EOF

        pub const EOF = 0x8000;
        /// error, data contains errno

ERROR

        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;

CLEAR

        pub const CLEAR = 32;

RECEIPT

        pub const RECEIPT = 64;

DISPATCH

        pub const DISPATCH = 128;

NODATA

        pub const NODATA = 4096;

FLAG1

        pub const FLAG1 = 8192;

ERROR

        pub const ERROR = 16384;

EOF

        pub const EOF = 32768;

SYSFLAGS

        pub const SYSFLAGS = 61440;
    },
    .netbsd => struct {
        /// add event to kq (implies enable)

ADD

        pub const ADD = 0x0001;
        /// delete event from kq

DELETE

        pub const DELETE = 0x0002;
        /// enable event

ENABLE

        pub const ENABLE = 0x0004;
        /// disable event (not reported)

DISABLE

        pub const DISABLE = 0x0008;
        /// only report one occurrence

ONESHOT

        pub const ONESHOT = 0x0010;
        /// clear event state after reporting

CLEAR

        pub const CLEAR = 0x0020;
        /// force immediate event output
        /// ... with or without ERROR
        /// ... use KEVENT_FLAG_ERROR_EVENTS
        ///     on syscalls supporting flags

RECEIPT

        pub const RECEIPT = 0x0040;
        /// disable event after reporting

DISPATCH

        pub const DISPATCH = 0x0080;
    },
    .freebsd => struct {
        /// add event to kq (implies enable)

ADD

        pub const ADD = 0x0001;
        /// delete event from kq

DELETE

        pub const DELETE = 0x0002;
        /// enable event

ENABLE

        pub const ENABLE = 0x0004;
        /// disable event (not reported)

DISABLE

        pub const DISABLE = 0x0008;
        /// only report one occurrence

ONESHOT

        pub const ONESHOT = 0x0010;
        /// clear event state after reporting

CLEAR

        pub const CLEAR = 0x0020;
        /// error, event data contains errno

ERROR

        pub const ERROR = 0x4000;
        /// force immediate event output
        /// ... with or without ERROR
        /// ... use KEVENT_FLAG_ERROR_EVENTS
        ///     on syscalls supporting flags

RECEIPT

        pub const RECEIPT = 0x0040;
        /// disable event after reporting

DISPATCH

        pub const DISPATCH = 0x0080;
    },
    .openbsd => struct {

ADD

        pub const ADD = 0x0001;

DELETE

        pub const DELETE = 0x0002;

ENABLE

        pub const ENABLE = 0x0004;

DISABLE

        pub const DISABLE = 0x0008;

ONESHOT

        pub const ONESHOT = 0x0010;

CLEAR

        pub const CLEAR = 0x0020;

RECEIPT

        pub const RECEIPT = 0x0040;

DISPATCH

        pub const DISPATCH = 0x0080;

FLAG1

        pub const FLAG1 = 0x2000;

ERROR

        pub const ERROR = 0x4000;

EOF

        pub const EOF = 0x8000;
    },
    .haiku => struct {
        /// add event to kq (implies enable)

ADD

        pub const ADD = 0x0001;
        /// delete event from kq

DELETE

        pub const DELETE = 0x0002;
        /// enable event

ENABLE

        pub const ENABLE = 0x0004;
        /// disable event (not reported)

DISABLE

        pub const DISABLE = 0x0008;
        /// only report one occurrence

ONESHOT

        pub const ONESHOT = 0x0010;
        /// clear event state after reporting

CLEAR

        pub const CLEAR = 0x0020;
        /// force immediate event output
        /// ... with or without ERROR
        /// ... use KEVENT_FLAG_ERROR_EVENTS
        ///     on syscalls supporting flags

RECEIPT

        pub const RECEIPT = 0x0040;
        /// disable event after reporting

DISPATCH

        pub const DISPATCH = 0x0080;
    },
    else => void,

DIR

};

READ


pub const EVFILT = switch (native_os) {
    .macos, .ios, .tvos, .watchos, .visionos => struct {

READ

        pub const READ = -1;

WRITE

        pub const WRITE = -2;
        /// attached to aio requests

AIO

        pub const AIO = -3;
        /// attached to vnodes

VNODE

        pub const VNODE = -4;
        /// attached to struct proc

PROC

        pub const PROC = -5;
        /// attached to struct proc

SIGNAL

        pub const SIGNAL = -6;
        /// timers

TIMER

        pub const TIMER = -7;
        /// Mach portsets
        pub const MACHPORT = -8;
        /// Filesystem events

FS

        pub const FS = -9;
        /// User events

USER

        pub const USER = -10;
        /// Virtual memory events

VM

        pub const VM = -12;
        /// Exception events

EXCEPT

        pub const EXCEPT = -15;

SYSCOUNT

        pub const SYSCOUNT = 17;
    },
    .haiku => struct {

READ

        pub const READ = -1;

WRITE

        pub const WRITE = -2;
        /// attached to aio requests

AIO

        pub const AIO = -3;
        /// attached to vnodes

VNODE

        pub const VNODE = -4;
        /// attached to struct proc

PROC

        pub const PROC = -5;
        /// attached to struct proc

SIGNAL

        pub const SIGNAL = -6;
        /// timers

TIMER

        pub const TIMER = -7;
        /// Process descriptors

PROCDESC

        pub const PROCDESC = -8;
        /// Filesystem events

FS

        pub const FS = -9;

LIO

        pub const LIO = -10;
        /// User events

USER

        pub const USER = -11;
        /// Sendfile events

SENDFILE

        pub const SENDFILE = -12;

EMPTY

        pub const EMPTY = -13;
    },
    .dragonfly => struct {

FS

        pub const FS = -10;

USER

        pub const USER = -9;

EXCEPT

        pub const EXCEPT = -8;

TIMER

        pub const TIMER = -7;

SIGNAL

        pub const SIGNAL = -6;

PROC

        pub const PROC = -5;

VNODE

        pub const VNODE = -4;

AIO

        pub const AIO = -3;

WRITE

        pub const WRITE = -2;

READ

        pub const READ = -1;

SYSCOUNT

        pub const SYSCOUNT = 10;

MARKER

        pub const MARKER = 15;
    },
    .netbsd => struct {

READ

        pub const READ = 0;

WRITE

        pub const WRITE = 1;
        /// attached to aio requests

AIO

        pub const AIO = 2;
        /// attached to vnodes

VNODE

        pub const VNODE = 3;
        /// attached to struct proc

PROC

        pub const PROC = 4;
        /// attached to struct proc

SIGNAL

        pub const SIGNAL = 5;
        /// timers

TIMER

        pub const TIMER = 6;
        /// Filesystem events

FS

        pub const FS = 7;
        /// User events

USER

        pub const USER = 1;
    },
    .freebsd => struct {

READ

        pub const READ = -1;

WRITE

        pub const WRITE = -2;
        /// attached to aio requests

AIO

        pub const AIO = -3;
        /// attached to vnodes

VNODE

        pub const VNODE = -4;
        /// attached to struct proc

PROC

        pub const PROC = -5;
        /// attached to struct proc

SIGNAL

        pub const SIGNAL = -6;
        /// timers

TIMER

        pub const TIMER = -7;
        /// Process descriptors

PROCDESC

        pub const PROCDESC = -8;
        /// Filesystem events

FS

        pub const FS = -9;

LIO

        pub const LIO = -10;
        /// User events

USER

        pub const USER = -11;
        /// Sendfile events

SENDFILE

        pub const SENDFILE = -12;

EMPTY

        pub const EMPTY = -13;
    },
    .openbsd => struct {

READ

        pub const READ = -1;

WRITE

        pub const WRITE = -2;

AIO

        pub const AIO = -3;

VNODE

        pub const VNODE = -4;

PROC

        pub const PROC = -5;

SIGNAL

        pub const SIGNAL = -6;

TIMER

        pub const TIMER = -7;

EXCEPT

        pub const EXCEPT = -9;
    },
    else => void,

DIR

};

TRIGGER


pub const NOTE = switch (native_os) {
    .macos, .ios, .tvos, .watchos, .visionos => struct {
        /// On input, TRIGGER causes the event to be triggered for output.

TRIGGER

        pub const TRIGGER = 0x01000000;
        /// ignore input fflags

FFNOP

        pub const FFNOP = 0x00000000;
        /// and fflags

FFAND

        pub const FFAND = 0x40000000;
        /// or fflags

FFOR

        pub const FFOR = 0x80000000;
        /// copy fflags

FFCOPY

        pub const FFCOPY = 0xc0000000;
        /// mask for operations

FFCTRLMASK

        pub const FFCTRLMASK = 0xc0000000;

FFLAGSMASK

        pub const FFLAGSMASK = 0x00ffffff;
        /// low water mark

LOWAT

        pub const LOWAT = 0x00000001;
        /// OOB data
        pub const OOB = 0x00000002;
        /// vnode was removed

DELETE

        pub const DELETE = 0x00000001;
        /// data contents changed

WRITE

        pub const WRITE = 0x00000002;
        /// size increased

EXTEND

        pub const EXTEND = 0x00000004;
        /// attributes changed

ATTRIB

        pub const ATTRIB = 0x00000008;
        /// link count changed

LINK

        pub const LINK = 0x00000010;
        /// vnode was renamed

RENAME

        pub const RENAME = 0x00000020;
        /// vnode access was revoked

REVOKE

        pub const REVOKE = 0x00000040;
        /// No specific vnode event: to test for EVFILT_READ      activation

NONE

        pub const NONE = 0x00000080;
        /// vnode was unlocked by flock(2)

FUNLOCK

        pub const FUNLOCK = 0x00000100;
        /// process exited

EXIT

        pub const EXIT = 0x80000000;
        /// process forked

FORK

        pub const FORK = 0x40000000;
        /// process exec'd

EXEC

        pub const EXEC = 0x20000000;
        /// shared with EVFILT_SIGNAL

SIGNAL

        pub const SIGNAL = 0x08000000;
        /// exit status to be returned, valid for child       process only

EXITSTATUS

        pub const EXITSTATUS = 0x04000000;
        /// provide details on reasons for exit

EXIT_DETAIL

        pub const EXIT_DETAIL = 0x02000000;
        /// mask for signal & exit status

PDATAMASK

        pub const PDATAMASK = 0x000fffff;

PCTRLMASK

        pub const PCTRLMASK = 0xf0000000;

EXIT_DETAIL_MASK

        pub const EXIT_DETAIL_MASK = 0x00070000;

EXIT_DECRYPTFAIL

        pub const EXIT_DECRYPTFAIL = 0x00010000;

EXIT_MEMORY

        pub const EXIT_MEMORY = 0x00020000;

EXIT_CSERROR

        pub const EXIT_CSERROR = 0x00040000;
        /// will react on memory          pressure

VM_PRESSURE

        pub const VM_PRESSURE = 0x80000000;
        /// will quit on memory       pressure, possibly after cleaning up dirty state

VM_PRESSURE_TERMINATE

        pub const VM_PRESSURE_TERMINATE = 0x40000000;
        /// will quit immediately on      memory pressure

VM_PRESSURE_SUDDEN_TERMINATE

        pub const VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000;
        /// there was an error

VM_ERROR

        pub const VM_ERROR = 0x10000000;
        /// data is seconds

SECONDS

        pub const SECONDS = 0x00000001;
        /// data is microseconds

USECONDS

        pub const USECONDS = 0x00000002;
        /// data is nanoseconds

NSECONDS

        pub const NSECONDS = 0x00000004;
        /// absolute timeout

ABSOLUTE

        pub const ABSOLUTE = 0x00000008;
        /// ext[1] holds leeway for power aware timers

LEEWAY

        pub const LEEWAY = 0x00000010;
        /// system does minimal timer coalescing

CRITICAL

        pub const CRITICAL = 0x00000020;
        /// system does maximum timer coalescing

BACKGROUND

        pub const BACKGROUND = 0x00000040;

MACH_CONTINUOUS_TIME

        pub const MACH_CONTINUOUS_TIME = 0x00000080;
        /// data is mach absolute time units

MACHTIME

        pub const MACHTIME = 0x00000100;
    },
    .dragonfly => struct {

FFNOP

        pub const FFNOP = 0;

TRACK

        pub const TRACK = 1;

DELETE

        pub const DELETE = 1;

LOWAT

        pub const LOWAT = 1;

TRACKERR

        pub const TRACKERR = 2;

OOB

        pub const OOB = 2;

WRITE

        pub const WRITE = 2;

EXTEND

        pub const EXTEND = 4;

CHILD

        pub const CHILD = 4;

ATTRIB

        pub const ATTRIB = 8;

LINK

        pub const LINK = 16;

RENAME

        pub const RENAME = 32;

REVOKE

        pub const REVOKE = 64;

PDATAMASK

        pub const PDATAMASK = 1048575;

FFLAGSMASK

        pub const FFLAGSMASK = 16777215;

TRIGGER

        pub const TRIGGER = 16777216;

EXEC

        pub const EXEC = 536870912;

FFAND

        pub const FFAND = 1073741824;

FORK

        pub const FORK = 1073741824;

EXIT

        pub const EXIT = 2147483648;

FFOR

        pub const FFOR = 2147483648;

FFCTRLMASK

        pub const FFCTRLMASK = 3221225472;

FFCOPY

        pub const FFCOPY = 3221225472;

PCTRLMASK

        pub const PCTRLMASK = 4026531840;
    },
    .netbsd => struct {
        /// On input, TRIGGER causes the event to be triggered for output.

TRIGGER

        pub const TRIGGER = 0x08000000;
        /// low water mark

LOWAT

        pub const LOWAT = 0x00000001;
        /// vnode was removed

DELETE

        pub const DELETE = 0x00000001;
        /// data contents changed

WRITE

        pub const WRITE = 0x00000002;
        /// size increased

EXTEND

        pub const EXTEND = 0x00000004;
        /// attributes changed

ATTRIB

        pub const ATTRIB = 0x00000008;
        /// link count changed

LINK

        pub const LINK = 0x00000010;
        /// vnode was renamed

RENAME

        pub const RENAME = 0x00000020;
        /// vnode access was revoked

REVOKE

        pub const REVOKE = 0x00000040;
        /// process exited

EXIT

        pub const EXIT = 0x80000000;
        /// process forked

FORK

        pub const FORK = 0x40000000;
        /// process exec'd

EXEC

        pub const EXEC = 0x20000000;
        /// mask for signal & exit status

PDATAMASK

        pub const PDATAMASK = 0x000fffff;

PCTRLMASK

        pub const PCTRLMASK = 0xf0000000;
    },
    .freebsd => struct {
        /// On input, TRIGGER causes the event to be triggered for output.

TRIGGER

        pub const TRIGGER = 0x01000000;
        /// ignore input fflags

FFNOP

        pub const FFNOP = 0x00000000;
        /// and fflags

FFAND

        pub const FFAND = 0x40000000;
        /// or fflags

FFOR

        pub const FFOR = 0x80000000;
        /// copy fflags

FFCOPY

        pub const FFCOPY = 0xc0000000;
        /// mask for operations

FFCTRLMASK

        pub const FFCTRLMASK = 0xc0000000;

FFLAGSMASK

        pub const FFLAGSMASK = 0x00ffffff;
        /// low water mark

LOWAT

        pub const LOWAT = 0x00000001;
        /// behave like poll()

FILE_POLL

        pub const FILE_POLL = 0x00000002;
        /// vnode was removed

DELETE

        pub const DELETE = 0x00000001;
        /// data contents changed

WRITE

        pub const WRITE = 0x00000002;
        /// size increased

EXTEND

        pub const EXTEND = 0x00000004;
        /// attributes changed

ATTRIB

        pub const ATTRIB = 0x00000008;
        /// link count changed

LINK

        pub const LINK = 0x00000010;
        /// vnode was renamed

RENAME

        pub const RENAME = 0x00000020;
        /// vnode access was revoked

REVOKE

        pub const REVOKE = 0x00000040;
        /// vnode was opened

OPEN

        pub const OPEN = 0x00000080;
        /// file closed, fd did not allow write

CLOSE

        pub const CLOSE = 0x00000100;
        /// file closed, fd did allow write

CLOSE_WRITE

        pub const CLOSE_WRITE = 0x00000200;
        /// file was read

READ

        pub const READ = 0x00000400;
        /// process exited

EXIT

        pub const EXIT = 0x80000000;
        /// process forked

FORK

        pub const FORK = 0x40000000;
        /// process exec'd

EXEC

        pub const EXEC = 0x20000000;
        /// mask for signal & exit status

PDATAMASK

        pub const PDATAMASK = 0x000fffff;

PCTRLMASK

        pub const PCTRLMASK = 0xf0000000;
        /// data is seconds

SECONDS

        pub const SECONDS = 0x00000001;
        /// data is milliseconds

MSECONDS

        pub const MSECONDS = 0x00000002;
        /// data is microseconds

USECONDS

        pub const USECONDS = 0x00000004;
        /// data is nanoseconds

NSECONDS

        pub const NSECONDS = 0x00000008;
        /// timeout is absolute

ABSTIME

        pub const ABSTIME = 0x00000010;
    },
    .openbsd => struct {
        // data/hint flags for EVFILT.{READ|WRITE}

LOWAT

        pub const LOWAT = 0x0001;

EOF

        pub const EOF = 0x0002;
        // data/hint flags for EVFILT.EXCEPT and EVFILT.{READ|WRITE}

OOB

        pub const OOB = 0x0004;
        // data/hint flags for EVFILT.VNODE

DELETE

        pub const DELETE = 0x0001;

WRITE

        pub const WRITE = 0x0002;

EXTEND

        pub const EXTEND = 0x0004;

ATTRIB

        pub const ATTRIB = 0x0008;

LINK

        pub const LINK = 0x0010;

RENAME

        pub const RENAME = 0x0020;

REVOKE

        pub const REVOKE = 0x0040;

TRUNCATE

        pub const TRUNCATE = 0x0080;
        // data/hint flags for EVFILT.PROC

EXIT

        pub const EXIT = 0x80000000;

FORK

        pub const FORK = 0x40000000;

EXEC

        pub const EXEC = 0x20000000;

PDATAMASK

        pub const PDATAMASK = 0x000fffff;

PCTRLMASK

        pub const PCTRLMASK = 0xf0000000;

TRACK

        pub const TRACK = 0x00000001;

TRACKERR

        pub const TRACKERR = 0x00000002;

CHILD

        pub const CHILD = 0x00000004;
        // data/hint flags for EVFILT.DEVICE

CHANGE

        pub const CHANGE = 0x00000001;
    },
    else => void,

DIR

};

close


// 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;

clock_getres


pub extern "c" fn sigwait(set: ?*sigset_t, sig: ?*c_int) c_int;

clock_gettime


pub extern "c" fn alarm(seconds: c_uint) c_uint;

fstat


pub const close = switch (native_os) {
    .macos, .ios, .tvos, .watchos, .visionos => darwin.@"close$NOCANCEL",
    else => private.close,

PTHREAD_MUTEX_INITIALIZER

};

arc4random_buf


pub const clock_getres = switch (native_os) {
    .netbsd => private.__clock_getres50,
    else => private.clock_getres,

PTHREAD_MUTEX_INITIALIZER

};

getrandom


pub const clock_gettime = switch (native_os) {
    .netbsd => private.__clock_gettime50,
    else => private.clock_gettime,

PTHREAD_MUTEX_INITIALIZER

};

sigaltstack


pub const fstat = switch (native_os) {
    .macos => switch (native_arch) {
        .x86_64 => private.@"fstat$INODE64",
        else => private.fstat,
    },
    .netbsd => private.__fstat50,
    else => private.fstat,

PTHREAD_MUTEX_INITIALIZER

};

copy_file_range


pub const fstatat = switch (native_os) {
    .macos => switch (native_arch) {
        .x86_64 => private.@"fstatat$INODE64",
        else => private.fstatat,
    },
    else => private.fstatat,

PTHREAD_MUTEX_INITIALIZER

};

getdents


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(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;

getrusage


pub const arc4random_buf = switch (native_os) {
    .dragonfly, .netbsd, .freebsd, .solaris, .openbsd, .macos, .ios, .tvos, .watchos, .visionos => private.arc4random_buf,
    .linux => if (builtin.abi.isAndroid()) private.arc4random_buf else {},
    else => {},

PTHREAD_MUTEX_INITIALIZER

};
pub const getentropy = switch (native_os) {
    .linux => if (builtin.abi.isAndroid() and versionCheck(.{ .major = 28, .minor = 0, .patch = 0 })) private.getentropy else {},
    .emscripten => private.getentropy,
    else => {},

PTHREAD_MUTEX_INITIALIZER

};
pub const getrandom = switch (native_os) {
    .freebsd => private.getrandom,
    .linux => if (builtin.abi.isMusl() or
        (builtin.abi.isGnu() and versionCheck(.{ .major = 2, .minor = 25, .patch = 0 })) or
        (builtin.abi.isAndroid() and versionCheck(.{ .major = 28, .minor = 0, .patch = 0 })))
        private.getrandom
    else {},
    else => {},

PTHREAD_MUTEX_INITIALIZER

};

readdir


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;

realpath


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;

sched_yield


pub extern "c" fn timerfd_create(clockid: timerfd_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;

sigaction


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;

sigfillset


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 => {},

PTHREAD_MUTEX_INITIALIZER

};
/// See std.elf for constants for this
pub extern "c" fn getauxval(__type: c_ulong) c_ulong;

socket


pub extern "c" fn dl_iterate_phdr(callback: dl_iterate_phdr_callback, data: ?*anyopaque) c_int;

stat


pub const sigaltstack = switch (native_os) {
    .netbsd => private.__sigaltstack14,
    else => private.sigaltstack,

PTHREAD_MUTEX_INITIALIZER

};

malloc_size


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 => {},

PTHREAD_MUTEX_INITIALIZER

};
pub const copy_file_range = switch (native_os) {
    .linux => private.copy_file_range,
    .freebsd => freebsd.copy_file_range,
    else => {},

PTHREAD_MUTEX_INITIALIZER

};

sysconf


pub extern "c" fn signalfd(fd: fd_t, mask: *const sigset_t, flags: u32) c_int;

sf_hdtr


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(page_size) anyopaque,
    length: usize,
    vec: [*]u8,
) c_int;

flock


pub extern "c" fn madvise(
    addr: *align(page_size) anyopaque,
    length: usize,
    advice: u32,
) c_int;

fork


pub const getdirentries = switch (native_os) {
    .macos, .ios, .tvos, .watchos, .visionos => private.__getdirentries64,
    else => private.getdirentries,

PTHREAD_MUTEX_INITIALIZER

};

pthread_threadid_np


pub const getdents = switch (native_os) {
    .netbsd => private.__getdents30,
    else => private.getdents,

PTHREAD_MUTEX_INITIALIZER

};

PTHREAD_COND_INITIALIZER


pub const getrusage = switch (native_os) {
    .netbsd => private.__getrusage50,
    else => private.getrusage,

pthread_t

};

FILE


pub const gettimeofday = switch (native_os) {
    .netbsd => private.__gettimeofday50,
    else => private.gettimeofday,
};

LC


pub const msync = switch (native_os) {
    .netbsd => private.__msync13,
    else => private.msync,
};

getcontext


pub const nanosleep = switch (native_os) {
    .netbsd => private.__nanosleep50,
    else => private.nanosleep,
};

max_align_t


pub const readdir = switch (native_os) {
    .macos => switch (native_arch) {
        .x86_64 => private.@"readdir$INODE64",
        else => private.readdir,
    },
    .windows => {},
    else => private.readdir,
};

AF_SUN


pub const realpath = switch (native_os) {
    .macos, .ios, .tvos, .watchos, .visionos => private.@"realpath$DARWIN_EXTSN",
    else => private.realpath,
};

AT_SUN


pub const sched_yield = switch (native_os) {
    .netbsd => private.__libc_thr_yield,
    else => private.sched_yield,
};

FILE_EVENT


pub const sigaction = switch (native_os) {
    .netbsd => private.__sigaction14,
    else => private.sigaction,
};

GETCONTEXT


pub const sigfillset = switch (native_os) {
    .netbsd => private.__sigfillset14,
    else => private.sigfillset,
};

GETUSTACK


pub const sigprocmask = switch (native_os) {
    .netbsd => private.__sigprocmask14,
    else => private.sigprocmask,
};

PORT_ALERT


pub const socket = switch (native_os) {
    .netbsd => private.__socket30,
    else => private.socket,
};

PORT_SOURCE


pub const stat = switch (native_os) {
    .macos => switch (native_arch) {
        .x86_64 => private.@"stat$INODE64",
        else => private.stat,
    },
    else => private.stat,
};

POSIX_FADV


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 sysconf = switch (native_os) {
    .solaris => solaris.sysconf,
    else => private.sysconf,
};

SCM


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,
};

SETCONTEXT


pub const flock = switch (native_os) {
    .windows, .wasi => {},
    else => private.flock,
};

SETUSTACK


pub extern "c" var environ: [*:null]?[*:0]u8;

SFD


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;

cmsghdr


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 mremap(addr: ?*align(page_size) const anyopaque, old_len: usize, new_len: usize, flags: MREMAP, ...) *anyopaque;
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) 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: mode_t) c_int;
pub extern "c" fn mkdirat(dirfd: fd_t, path: [*:0]const u8, mode: mode_t) 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;

ctid_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;

file_obj


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;

fpregset_t


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;

id_t


pub extern "c" fn kill(pid: pid_t, sig: c_int) c_int;

lif_ifinfo_req


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 setpgid(pid: pid_t, pgid: pid_t) c_int;

lif_nd_req


pub extern "c" fn malloc(usize) ?*anyopaque;
pub extern "c" fn calloc(usize, usize) ?*anyopaque;
pub extern "c" fn realloc(?*anyopaque, usize) ?*anyopaque;
pub extern "c" fn free(?*anyopaque) void;

lifreq


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;

major_t


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;

minor_t


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,
};

poolid_t


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 => {},
};

port_notify


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;

priority


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;

procfs


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;

projid_t


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;

signalfd_siginfo


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;

taskid_t


pub extern "c" fn freeaddrinfo(res: *addrinfo) void;

zoneid_t


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: NI,
) EAI;

DirEnt


pub extern "c" fn gai_strerror(errcode: EAI) [*:0]const u8;

_get_next_area_info


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;

_get_next_image_info


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;

_get_team_info


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;

_kern_get_current_team


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;

_kern_open_dir


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;

_kern_read_dir


pub const pthread_t = *opaque {};
pub const FILE = opaque {};

_kern_read_stat


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;

_kern_rewind_dir


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;

area_id


pub extern "c" fn prctl(option: c_int, ...) c_int;

area_info


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;

directory_which


pub extern "c" fn fmemopen(noalias buf: ?*anyopaque, size: usize, noalias mode: [*:0]const u8) ?*FILE;

find_directory


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;

find_thread


pub extern "c" fn if_nametoindex([*:0]const u8) c_int;

get_system_info


pub extern "c" fn getpid() pid_t;
pub extern "c" fn getppid() pid_t;

image_info


/// 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,
    _,
};

port_id


pub extern "c" fn setlocale(category: LC, locale: ?[*:0]const u8) ?[*:0]const u8;

sem_id


pub const getcontext = if (builtin.target.abi.isAndroid() or builtin.target.os.tag == .openbsd)
{} // android bionic and openbsd libc does not implement getcontext
    else if (native_os == .linux and builtin.target.abi.isMusl())
        linux.getcontext
    else
        private.getcontext;

status_t


pub const max_align_t = if (native_abi == .msvc or native_abi == .itanium)
    f64
else if (native_os.isDarwin())
    c_longdouble
else
    extern struct {
        a: c_longlong,
        b: c_longdouble,
    };

system_info


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;

team_id


// OS-specific bits. These are protected from being used on the wrong OS by
// comptime assertions inside each OS-specific file.

team_info


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 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 taskid_t = solaris.taskid_t;
pub const zoneid_t = solaris.zoneid_t;

thread_id


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;

AUTH


pub const AUTH = openbsd.AUTH;

BI

pub const BI = openbsd.BI;

FUTEX

pub const FUTEX = openbsd.FUTEX;

HW

pub const HW = openbsd.HW;

PTHREAD_STACK_MIN

pub const PTHREAD_STACK_MIN = openbsd.PTHREAD_STACK_MIN;

TCFLUSH

pub const TCFLUSH = openbsd.TCFLUSH;

TCIO

pub const TCIO = openbsd.TCIO;

auth_approval

pub const auth_approval = openbsd.auth_approval;

auth_call

pub const auth_call = openbsd.auth_call;

auth_cat

pub const auth_cat = openbsd.auth_cat;

auth_challenge

pub const auth_challenge = openbsd.auth_challenge;

auth_check_change

pub const auth_check_change = openbsd.auth_check_change;

auth_check_expire

pub const auth_check_expire = openbsd.auth_check_expire;

auth_checknologin

pub const auth_checknologin = openbsd.auth_checknologin;

auth_clean

pub const auth_clean = openbsd.auth_clean;

auth_close

pub const auth_close = openbsd.auth_close;

auth_clrenv

pub const auth_clrenv = openbsd.auth_clrenv;

auth_clroption

pub const auth_clroption = openbsd.auth_clroption;

auth_clroptions

pub const auth_clroptions = openbsd.auth_clroptions;

auth_getitem

pub const auth_getitem = openbsd.auth_getitem;

auth_getpwd

pub const auth_getpwd = openbsd.auth_getpwd;

auth_getstate

pub const auth_getstate = openbsd.auth_getstate;

auth_getvalue

pub const auth_getvalue = openbsd.auth_getvalue;

auth_item_t

pub const auth_item_t = openbsd.auth_item_t;

auth_mkvalue

pub const auth_mkvalue = openbsd.auth_mkvalue;

auth_open

pub const auth_open = openbsd.auth_open;

auth_session_t

pub const auth_session_t = openbsd.auth_session_t;

auth_setdata

pub const auth_setdata = openbsd.auth_setdata;

auth_setenv

pub const auth_setenv = openbsd.auth_setenv;

auth_setitem

pub const auth_setitem = openbsd.auth_setitem;

auth_setoption

pub const auth_setoption = openbsd.auth_setoption;

auth_setpwd

pub const auth_setpwd = openbsd.auth_setpwd;

auth_setstate

pub const auth_setstate = openbsd.auth_setstate;

auth_userchallenge

pub const auth_userchallenge = openbsd.auth_userchallenge;

auth_usercheck

pub const auth_usercheck = openbsd.auth_usercheck;

auth_userokay

pub const auth_userokay = openbsd.auth_userokay;

auth_userresponse

pub const auth_userresponse = openbsd.auth_userresponse;

auth_verify

pub const auth_verify = openbsd.auth_verify;

bcrypt

pub const bcrypt = openbsd.bcrypt;

bcrypt_checkpass

pub const bcrypt_checkpass = openbsd.bcrypt_checkpass;

bcrypt_gensalt

pub const bcrypt_gensalt = openbsd.bcrypt_gensalt;

bcrypt_newhash

pub const bcrypt_newhash = openbsd.bcrypt_newhash;

endpwent

pub const endpwent = openbsd.endpwent;

futex

pub const futex = openbsd.futex;

getpwent

pub const getpwent = openbsd.getpwent;

getpwnam_r

pub const getpwnam_r = openbsd.getpwnam_r;

getpwnam_shadow

pub const getpwnam_shadow = openbsd.getpwnam_shadow;

getpwuid_r

pub const getpwuid_r = openbsd.getpwuid_r;

getpwuid_shadow

pub const getpwuid_shadow = openbsd.getpwuid_shadow;

getthrid

pub const getthrid = openbsd.getthrid;

login_cap_t

pub const login_cap_t = openbsd.login_cap_t;

login_close

pub const login_close = openbsd.login_close;

login_getcapbool

pub const login_getcapbool = openbsd.login_getcapbool;

login_getcapnum

pub const login_getcapnum = openbsd.login_getcapnum;

login_getcapsize

pub const login_getcapsize = openbsd.login_getcapsize;

login_getcapstr

pub const login_getcapstr = openbsd.login_getcapstr;

login_getcaptime

pub const login_getcaptime = openbsd.login_getcaptime;

login_getclass

pub const login_getclass = openbsd.login_getclass;

login_getstyle

pub const login_getstyle = openbsd.login_getstyle;

pledge

pub const pledge = openbsd.pledge;

pthread_spinlock_t

pub const pthread_spinlock_t = openbsd.pthread_spinlock_t;

pw_dup

pub const pw_dup = openbsd.pw_dup;

setclasscontext

pub const setclasscontext = openbsd.setclasscontext;

setpassent

pub const setpassent = openbsd.setpassent;

setpwent

pub const setpwent = openbsd.setpwent;

setusercontext

pub const setusercontext = openbsd.setusercontext;

uid_from_user

pub const uid_from_user = openbsd.uid_from_user;

unveil

pub const unveil = openbsd.unveil;

user_from_uid

pub const user_from_uid = openbsd.user_from_uid;

CAP_RIGHTS_VERSION


pub const CAP_RIGHTS_VERSION = freebsd.CAP_RIGHTS_VERSION;

KINFO_FILE_SIZE

pub const KINFO_FILE_SIZE = freebsd.KINFO_FILE_SIZE;

MFD

pub const MFD = freebsd.MFD;

UMTX_ABSTIME

pub const UMTX_ABSTIME = freebsd.UMTX_ABSTIME;

UMTX_OP

pub const UMTX_OP = freebsd.UMTX_OP;

_umtx_op

pub const _umtx_op = freebsd._umtx_op;

_umtx_time

pub const _umtx_time = freebsd._umtx_time;

cap_rights

pub const cap_rights = freebsd.cap_rights;

fflags_t

pub const fflags_t = freebsd.fflags_t;

fsblkcnt_t

pub const fsblkcnt_t = freebsd.fsblkcnt_t;

fsfilcnt_t

pub const fsfilcnt_t = freebsd.fsfilcnt_t;

kinfo_file

pub const kinfo_file = freebsd.kinfo_file;

kinfo_getfile

pub const kinfo_getfile = freebsd.kinfo_getfile;

COPYFILE


pub const COPYFILE = darwin.COPYFILE;

CPUFAMILY

pub const CPUFAMILY = darwin.CPUFAMILY;

DB_RECORDTYPE

pub const DB_RECORDTYPE = darwin.DB_RECORDTYPE;

EXC

pub const EXC = darwin.EXC;

EXCEPTION

pub const EXCEPTION = darwin.EXCEPTION;

MACH_MSG_TYPE

pub const MACH_MSG_TYPE = darwin.MACH_MSG_TYPE;

MACH_PORT_RIGHT

pub const MACH_PORT_RIGHT = darwin.MACH_PORT_RIGHT;

MACH_TASK_BASIC_INFO

pub const MACH_TASK_BASIC_INFO = darwin.MACH_TASK_BASIC_INFO;

MACH_TASK_BASIC_INFO_COUNT

pub const MACH_TASK_BASIC_INFO_COUNT = darwin.MACH_TASK_BASIC_INFO_COUNT;

MATTR

pub const MATTR = darwin.MATTR;

NSVersionOfRunTimeLibrary

pub const NSVersionOfRunTimeLibrary = darwin.NSVersionOfRunTimeLibrary;

OPEN_MAX

pub const OPEN_MAX = darwin.OPEN_MAX;

POSIX_SPAWN

pub const POSIX_SPAWN = darwin.POSIX_SPAWN;

TASK_NULL

pub const TASK_NULL = darwin.TASK_NULL;

TASK_VM_INFO

pub const TASK_VM_INFO = darwin.TASK_VM_INFO;

TASK_VM_INFO_COUNT

pub const TASK_VM_INFO_COUNT = darwin.TASK_VM_INFO_COUNT;

THREAD_BASIC_INFO

pub const THREAD_BASIC_INFO = darwin.THREAD_BASIC_INFO;

THREAD_BASIC_INFO_COUNT

pub const THREAD_BASIC_INFO_COUNT = darwin.THREAD_BASIC_INFO_COUNT;

THREAD_IDENTIFIER_INFO_COUNT

pub const THREAD_IDENTIFIER_INFO_COUNT = darwin.THREAD_IDENTIFIER_INFO_COUNT;

THREAD_NULL

pub const THREAD_NULL = darwin.THREAD_NULL;

THREAD_STATE_NONE

pub const THREAD_STATE_NONE = darwin.THREAD_STATE_NONE;

UL

pub const UL = darwin.UL;

VM

pub const VM = darwin.VM;

_NSGetExecutablePath

pub const _NSGetExecutablePath = darwin._NSGetExecutablePath;

__getdirentries64

pub const __getdirentries64 = darwin.__getdirentries64;

__ulock_wait

pub const __ulock_wait = darwin.__ulock_wait;

__ulock_wait2

pub const __ulock_wait2 = darwin.__ulock_wait2;

__ulock_wake

pub const __ulock_wake = darwin.__ulock_wake;

_dyld_get_image_header

pub const _dyld_get_image_header = darwin._dyld_get_image_header;

_dyld_get_image_name

pub const _dyld_get_image_name = darwin._dyld_get_image_name;

_dyld_get_image_vmaddr_slide

pub const _dyld_get_image_vmaddr_slide = darwin._dyld_get_image_vmaddr_slide;

_dyld_image_count

pub const _dyld_image_count = darwin._dyld_image_count;

_host_page_size

pub const _host_page_size = darwin._host_page_size;

clock_get_time

pub const clock_get_time = darwin.clock_get_time;

@"close$NOCANCEL"

pub const @"close$NOCANCEL" = darwin.@"close$NOCANCEL";

dispatch_release

pub const dispatch_release = darwin.dispatch_release;

dispatch_semaphore_create

pub const dispatch_semaphore_create = darwin.dispatch_semaphore_create;

dispatch_semaphore_signal

pub const dispatch_semaphore_signal = darwin.dispatch_semaphore_signal;

dispatch_semaphore_wait

pub const dispatch_semaphore_wait = darwin.dispatch_semaphore_wait;

dispatch_time

pub const dispatch_time = darwin.dispatch_time;

fcopyfile

pub const fcopyfile = darwin.fcopyfile;

host_t

pub const host_t = darwin.host_t;

ipc_space_t

pub const ipc_space_t = darwin.ipc_space_t;

ipc_space_port_t

pub const ipc_space_port_t = darwin.ipc_space_port_t;

kern_return_t

pub const kern_return_t = darwin.kern_return_t;

vm_size_t

pub const vm_size_t = darwin.vm_size_t;

kevent64

pub const kevent64 = darwin.kevent64;

kevent64_s

pub const kevent64_s = darwin.kevent64_s;

mach_absolute_time

pub const mach_absolute_time = darwin.mach_absolute_time;

mach_continuous_time

pub const mach_continuous_time = darwin.mach_continuous_time;

mach_hdr

pub const mach_hdr = darwin.mach_hdr;

mach_host_self

pub const mach_host_self = darwin.mach_host_self;

mach_msg

pub const mach_msg = darwin.mach_msg;

mach_msg_type_number_t

pub const mach_msg_type_number_t = darwin.mach_msg_type_number_t;

mach_port_allocate

pub const mach_port_allocate = darwin.mach_port_allocate;

mach_port_array_t

pub const mach_port_array_t = darwin.mach_port_array_t;

mach_port_deallocate

pub const mach_port_deallocate = darwin.mach_port_deallocate;

mach_port_insert_right

pub const mach_port_insert_right = darwin.mach_port_insert_right;

mach_port_name_t

pub const mach_port_name_t = darwin.mach_port_name_t;

mach_port_t

pub const mach_port_t = darwin.mach_port_t;

mach_task_basic_info

pub const mach_task_basic_info = darwin.mach_task_basic_info;

mach_task_self

pub const mach_task_self = darwin.mach_task_self;

mach_timebase_info

pub const mach_timebase_info = darwin.mach_timebase_info;

mach_timebase_info_data

pub const mach_timebase_info_data = darwin.mach_timebase_info_data;

mach_vm_address_t

pub const mach_vm_address_t = darwin.mach_vm_address_t;

mach_vm_protect

pub const mach_vm_protect = darwin.mach_vm_protect;

mach_vm_read

pub const mach_vm_read = darwin.mach_vm_read;

mach_vm_region

pub const mach_vm_region = darwin.mach_vm_region;

mach_vm_region_recurse

pub const mach_vm_region_recurse = darwin.mach_vm_region_recurse;

mach_vm_size_t

pub const mach_vm_size_t = darwin.mach_vm_size_t;

mach_vm_write

pub const mach_vm_write = darwin.mach_vm_write;

natural_t

pub const natural_t = darwin.natural_t;

os_log_create

pub const os_log_create = darwin.os_log_create;

os_log_type_enabled

pub const os_log_type_enabled = darwin.os_log_type_enabled;

os_signpost_enabled

pub const os_signpost_enabled = darwin.os_signpost_enabled;

os_signpost_id_generate

pub const os_signpost_id_generate = darwin.os_signpost_id_generate;

os_signpost_id_make_with_pointer

pub const os_signpost_id_make_with_pointer = darwin.os_signpost_id_make_with_pointer;

os_signpost_interval_begin

pub const os_signpost_interval_begin = darwin.os_signpost_interval_begin;

os_signpost_interval_end

pub const os_signpost_interval_end = darwin.os_signpost_interval_end;

os_unfair_lock

pub const os_unfair_lock = darwin.os_unfair_lock;

os_unfair_lock_assert_not_owner

pub const os_unfair_lock_assert_not_owner = darwin.os_unfair_lock_assert_not_owner;

os_unfair_lock_assert_owner

pub const os_unfair_lock_assert_owner = darwin.os_unfair_lock_assert_owner;

os_unfair_lock_lock

pub const os_unfair_lock_lock = darwin.os_unfair_lock_lock;

os_unfair_lock_trylock

pub const os_unfair_lock_trylock = darwin.os_unfair_lock_trylock;

os_unfair_lock_unlock

pub const os_unfair_lock_unlock = darwin.os_unfair_lock_unlock;

pid_for_task

pub const pid_for_task = darwin.pid_for_task;

posix_spawn

pub const posix_spawn = darwin.posix_spawn;

posix_spawn_file_actions_addchdir_np

pub const posix_spawn_file_actions_addchdir_np = darwin.posix_spawn_file_actions_addchdir_np;

posix_spawn_file_actions_addclose

pub const posix_spawn_file_actions_addclose = darwin.posix_spawn_file_actions_addclose;

posix_spawn_file_actions_adddup2

pub const posix_spawn_file_actions_adddup2 = darwin.posix_spawn_file_actions_adddup2;

posix_spawn_file_actions_addfchdir_np

pub const posix_spawn_file_actions_addfchdir_np = darwin.posix_spawn_file_actions_addfchdir_np;

posix_spawn_file_actions_addinherit_np

pub const posix_spawn_file_actions_addinherit_np = darwin.posix_spawn_file_actions_addinherit_np;

posix_spawn_file_actions_addopen

pub const posix_spawn_file_actions_addopen = darwin.posix_spawn_file_actions_addopen;

posix_spawn_file_actions_destroy

pub const posix_spawn_file_actions_destroy = darwin.posix_spawn_file_actions_destroy;

posix_spawn_file_actions_init

pub const posix_spawn_file_actions_init = darwin.posix_spawn_file_actions_init;

posix_spawn_file_actions_t

pub const posix_spawn_file_actions_t = darwin.posix_spawn_file_actions_t;

posix_spawnattr_destroy

pub const posix_spawnattr_destroy = darwin.posix_spawnattr_destroy;

posix_spawnattr_getflags

pub const posix_spawnattr_getflags = darwin.posix_spawnattr_getflags;

posix_spawnattr_init

pub const posix_spawnattr_init = darwin.posix_spawnattr_init;

posix_spawnattr_setflags

pub const posix_spawnattr_setflags = darwin.posix_spawnattr_setflags;

posix_spawnattr_t

pub const posix_spawnattr_t = darwin.posix_spawnattr_t;

posix_spawnp

pub const posix_spawnp = darwin.posix_spawnp;

pthread_attr_get_qos_class_np

pub const pthread_attr_get_qos_class_np = darwin.pthread_attr_get_qos_class_np;

pthread_attr_set_qos_class_np

pub const pthread_attr_set_qos_class_np = darwin.pthread_attr_set_qos_class_np;

pthread_get_qos_class_np

pub const pthread_get_qos_class_np = darwin.pthread_get_qos_class_np;

pthread_set_qos_class_self_np

pub const pthread_set_qos_class_self_np = darwin.pthread_set_qos_class_self_np;

ptrace

pub const ptrace = darwin.ptrace;

sigaddset

pub const sigaddset = darwin.sigaddset;

task_for_pid

pub const task_for_pid = darwin.task_for_pid;

task_get_exception_ports

pub const task_get_exception_ports = darwin.task_get_exception_ports;

task_info

pub const task_info = darwin.task_info;

task_info_t

pub const task_info_t = darwin.task_info_t;

task_resume

pub const task_resume = darwin.task_resume;

task_set_exception_ports

pub const task_set_exception_ports = darwin.task_set_exception_ports;

task_suspend

pub const task_suspend = darwin.task_suspend;

task_threads

pub const task_threads = darwin.task_threads;

task_vm_info_data_t

pub const task_vm_info_data_t = darwin.task_vm_info_data_t;

thread_basic_info

pub const thread_basic_info = darwin.thread_basic_info;

thread_get_state

pub const thread_get_state = darwin.thread_get_state;

thread_identifier_info

pub const thread_identifier_info = darwin.thread_identifier_info;

thread_info

pub const thread_info = darwin.thread_info;

thread_info_t

pub const thread_info_t = darwin.thread_info_t;

thread_resume

pub const thread_resume = darwin.thread_resume;

thread_set_state

pub const thread_set_state = darwin.thread_set_state;

vm_deallocate

pub const vm_deallocate = darwin.vm_deallocate;

vm_machine_attribute

pub const vm_machine_attribute = darwin.vm_machine_attribute;

vm_machine_attribute_val_t

pub const vm_machine_attribute_val_t = darwin.vm_machine_attribute_val_t;

vm_map_t

pub const vm_map_t = darwin.vm_map_t;

vm_offset_t

pub const vm_offset_t = darwin.vm_offset_t;

vm_prot_t

pub const vm_prot_t = darwin.vm_prot_t;

vm_region_basic_info_64

pub const vm_region_basic_info_64 = darwin.vm_region_basic_info_64;

vm_region_extended_info

pub const vm_region_extended_info = darwin.vm_region_extended_info;

vm_region_info_t

pub const vm_region_info_t = darwin.vm_region_info_t;

vm_region_recurse_info_t

pub const vm_region_recurse_info_t = darwin.vm_region_recurse_info_t;

vm_region_submap_info_64

pub const vm_region_submap_info_64 = darwin.vm_region_submap_info_64;

vm_region_submap_short_info_64

pub const vm_region_submap_short_info_64 = darwin.vm_region_submap_short_info_64;

vm_region_top_info

pub const vm_region_top_info = darwin.vm_region_top_info;

caddr_t


pub const caddr_t = darwin.caddr_t;

exception_behavior_array_t

pub const exception_behavior_array_t = darwin.exception_behavior_array_t;

exception_behavior_t

pub const exception_behavior_t = darwin.exception_behavior_t;

exception_data_t

pub const exception_data_t = darwin.exception_data_t;

exception_data_type_t

pub const exception_data_type_t = darwin.exception_data_type_t;

exception_flavor_array_t

pub const exception_flavor_array_t = darwin.exception_flavor_array_t;

exception_handler_array_t

pub const exception_handler_array_t = darwin.exception_handler_array_t;

exception_handler_t

pub const exception_handler_t = darwin.exception_handler_t;

exception_mask_array_t

pub const exception_mask_array_t = darwin.exception_mask_array_t;

exception_mask_t

pub const exception_mask_t = darwin.exception_mask_t;

exception_port_array_t

pub const exception_port_array_t = darwin.exception_port_array_t;

exception_port_t

pub const exception_port_t = darwin.exception_port_t;

mach_exception_data_t

pub const mach_exception_data_t = darwin.mach_exception_data_t;

mach_exception_data_type_t

pub const mach_exception_data_type_t = darwin.mach_exception_data_type_t;

mach_msg_bits_t

pub const mach_msg_bits_t = darwin.mach_msg_bits_t;

mach_msg_id_t

pub const mach_msg_id_t = darwin.mach_msg_id_t;

mach_msg_option_t

pub const mach_msg_option_t = darwin.mach_msg_option_t;

mach_msg_size_t

pub const mach_msg_size_t = darwin.mach_msg_size_t;

mach_msg_timeout_t

pub const mach_msg_timeout_t = darwin.mach_msg_timeout_t;

mach_msg_type_name_t

pub const mach_msg_type_name_t = darwin.mach_msg_type_name_t;

mach_port_right_t

pub const mach_port_right_t = darwin.mach_port_right_t;

memory_object_offset_t

pub const memory_object_offset_t = darwin.memory_object_offset_t;

policy_t

pub const policy_t = darwin.policy_t;

task_policy_flavor_t

pub const task_policy_flavor_t = darwin.task_policy_flavor_t;

task_policy_t

pub const task_policy_t = darwin.task_policy_t;

task_t

pub const task_t = darwin.task_t;

thread_act_t

pub const thread_act_t = darwin.thread_act_t;

thread_flavor_t

pub const thread_flavor_t = darwin.thread_flavor_t;

thread_port_t

pub const thread_port_t = darwin.thread_port_t;

thread_state_flavor_t

pub const thread_state_flavor_t = darwin.thread_state_flavor_t;

thread_state_t

pub const thread_state_t = darwin.thread_state_t;

thread_t

pub const thread_t = darwin.thread_t;

time_value_t

pub const time_value_t = darwin.time_value_t;

vm32_object_id_t

pub const vm32_object_id_t = darwin.vm32_object_id_t;

vm_behavior_t

pub const vm_behavior_t = darwin.vm_behavior_t;

vm_inherit_t

pub const vm_inherit_t = darwin.vm_inherit_t;

vm_map_read_t

pub const vm_map_read_t = darwin.vm_map_read_t;

vm_object_id_t

pub const vm_object_id_t = darwin.vm_object_id_t;

vm_region_flavor_t

pub const vm_region_flavor_t = darwin.vm_region_flavor_t;

_ksiginfo


pub const _ksiginfo = netbsd._ksiginfo;

_lwp_self

pub const _lwp_self = netbsd._lwp_self;

lwpid_t

pub const lwpid_t = netbsd.lwpid_t;

lwp_gettid


pub const lwp_gettid = dragonfly.lwp_gettid;

umtx_sleep

pub const umtx_sleep = dragonfly.umtx_sleep;

umtx_wakeup

pub const umtx_wakeup = dragonfly.umtx_wakeup;

/// 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 sysconf(sc: c_int) c_long;

    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(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;
    }
};