aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2021-08-24 17:21:53 -0700
committerAndrew Kelley <andrew@ziglang.org>2021-09-01 17:54:06 -0700
commit1bbfcb95abc471374e5f8d74e04f0a002cc85c95 (patch)
tree76cb0df86a8a5f55e1f7f3bb0fd7dd4422581487 /lib
parent3deda15e21ea3a8138d5b628f2649bbbfe7fa910 (diff)
downloadzig-1bbfcb95abc471374e5f8d74e04f0a002cc85c95.tar.gz
zig-1bbfcb95abc471374e5f8d74e04f0a002cc85c95.zip
std: reorganize std.c to eliminate `usingnamespace`
Behavior tests pass on x86_64-linux with -lc
Diffstat (limited to 'lib')
-rw-r--r--lib/std/c.zig196
-rw-r--r--lib/std/c/darwin.zig1822
-rw-r--r--lib/std/c/dragonfly.zig1032
-rw-r--r--lib/std/c/freebsd.zig1539
-rw-r--r--lib/std/c/generic.zig22
-rw-r--r--lib/std/c/haiku.zig1376
-rw-r--r--lib/std/c/linux.zig191
-rw-r--r--lib/std/c/netbsd.zig1347
-rw-r--r--lib/std/c/openbsd.zig1330
-rw-r--r--lib/std/c/wasi.zig27
-rw-r--r--lib/std/c/windows.zig340
-rw-r--r--lib/std/fs.zig2
-rw-r--r--lib/std/os.zig143
-rw-r--r--lib/std/os/bits/darwin.zig1783
-rw-r--r--lib/std/os/bits/dragonfly.zig1031
-rw-r--r--lib/std/os/bits/freebsd.zig1540
-rw-r--r--lib/std/os/bits/haiku.zig1373
-rw-r--r--lib/std/os/bits/linux/arm-eabi.zig5
-rw-r--r--lib/std/os/bits/linux/arm64.zig5
-rw-r--r--lib/std/os/bits/linux/i386.zig5
-rw-r--r--lib/std/os/bits/linux/mips.zig34
-rw-r--r--lib/std/os/bits/linux/powerpc.zig5
-rw-r--r--lib/std/os/bits/linux/powerpc64.zig5
-rw-r--r--lib/std/os/bits/linux/riscv64.zig5
-rw-r--r--lib/std/os/bits/linux/sparc64.zig36
-rw-r--r--lib/std/os/bits/netbsd.zig1326
-rw-r--r--lib/std/os/bits/openbsd.zig1328
-rw-r--r--lib/std/os/bits/wasi.zig491
-rw-r--r--lib/std/os/bits/windows.zig324
-rw-r--r--lib/std/os/linux.zig50
-rw-r--r--lib/std/os/linux/test.zig2
-rw-r--r--lib/std/os/linux/x86_64.zig8
-rw-r--r--lib/std/os/wasi.zig470
-rw-r--r--lib/std/os/windows/ws2_32.zig1
34 files changed, 9658 insertions, 9536 deletions
diff --git a/lib/std/c.zig b/lib/std/c.zig
index f84e76cfb5..e7c46b6a88 100644
--- a/lib/std/c.zig
+++ b/lib/std/c.zig
@@ -10,7 +10,8 @@ test {
_ = tokenizer;
}
-pub usingnamespace switch (std.Target.current.os.tag) {
+const generic = @import("c/generic.zig");
+const system = switch (builtin.os.tag) {
.linux => @import("c/linux.zig"),
.windows => @import("c/windows.zig"),
.macos, .ios, .tvos, .watchos => @import("c/darwin.zig"),
@@ -27,6 +28,109 @@ pub usingnamespace switch (std.Target.current.os.tag) {
.wasi => @import("c/wasi.zig"),
else => struct {},
};
+pub const E = system.E;
+pub const _errno = system._errno;
+pub const MAP_FAILED = system.MAP_FAILED;
+pub const AI = system.AI;
+pub const NI = system.NI;
+pub const EAI = system.EAI;
+pub const timespec = system.timespec;
+pub const Sigaction = system.Sigaction;
+pub const fallocate64 = system.fallocate64;
+pub const fopen64 = system.fopen64;
+pub const fstat64 = system.fstat64;
+pub const fstatat64 = system.fstatat64;
+pub const ftruncate64 = system.ftruncate64;
+pub const getrlimit64 = system.getrlimit64;
+pub const lseek64 = system.lseek64;
+pub const mmap64 = system.mmap64;
+pub const open64 = system.open64;
+pub const openat64 = system.openat64;
+pub const pread64 = system.pread64;
+pub const preadv64 = system.preadv64;
+pub const pwrite64 = system.pwrite64;
+pub const pwritev64 = system.pwritev64;
+pub const sendfile64 = system.sendfile64;
+pub const setrlimit64 = system.setrlimit64;
+
+pub const AT = system.AT;
+pub const CLOCK = system.CLOCK;
+pub const IOV_MAX = system.IOV_MAX;
+pub const NAME_MAX = system.NAME_MAX;
+pub const PATH_MAX = system.PATH_MAX;
+pub const PROT = system.PROT;
+pub const RTLD = system.RTLD;
+pub const S = system.S;
+pub const SA = system.SA;
+pub const SIG = system.SIG;
+pub const STDERR_FILENO = system.STDIN_FILENO;
+pub const STDIN_FILENO = system.STDIN_FILENO;
+pub const STDOUT_FILENO = system.STDIN_FILENO;
+pub const Stat = system.Stat;
+pub const copy_file_range = system.copy_file_range;
+pub const dl_iterate_phdr_callback = system.dl_iterate_phdr_callback;
+pub const dl_phdr_info = system.dl_phdr_info;
+pub const empty_sigset = system.empty_sigset;
+pub const epoll_create1 = system.epoll_create1;
+pub const epoll_ctl = system.epoll_ctl;
+pub const epoll_pwait = system.epoll_pwait;
+pub const epoll_wait = system.epoll_wait;
+pub const eventfd = system.eventfd;
+pub const fallocate = system.fallocate;
+pub const fd_t = system.fd_t;
+pub const getauxval = system.getauxval;
+pub const getdents = system.getdents;
+pub const getrandom = system.getrandom;
+pub const inotify_add_watch = system.inotify_add_watch;
+pub const inotify_init1 = system.inotify_init1;
+pub const inotify_rm_watch = system.inotify_rm_watch;
+pub const madvise = system.madvise;
+pub const malloc_usable_size = system.malloc_usable_size;
+pub const memfd_create = system.memfd_create;
+pub const pipe2 = system.pipe2;
+pub const pollfd = system.pollfd;
+pub const posix_memalign = system.posix_memalign;
+pub const prlimit = system.prlimit;
+pub const pthread_attr_t = system.pthread_attr_t;
+pub const pthread_cond_t = system.pthread_cond_t;
+pub const pthread_getname_np = system.pthread_getname_np;
+pub const pthread_mutex_t = system.pthread_mutex_t;
+pub const pthread_rwlock_t = system.pthread_rwlock_t;
+pub const pthread_setname_np = system.pthread_setname_np;
+pub const rlimit = system.rlimit;
+pub const rlimit_resource = system.rlimit_resource;
+pub const sched_getaffinity = system.sched_getaffinity;
+pub const sem_t = system.sem_t;
+pub const sendfile = system.sendfile;
+pub const sigaltstack = system.sigaltstack;
+pub const siginfo_t = system.siginfo_t;
+pub const signalfd = system.signalfd;
+pub const sigset_t = system.sigset_t;
+pub const MAP = system.MAP;
+pub const LOCK = system.LOCK;
+pub const REG = system.REG;
+pub const dl_iterate_phdr = system.dl_iterate_phdr;
+pub const ino_t = system.ino_t;
+pub const mode_t = system.mode_t;
+pub const ucontext_t = system.ucontext_t;
+pub const O = system.O;
+
+pub const alarm = if (@hasDecl(system, "alarm")) system.alarm else generic.alarm;
+pub const clock_getres = if (@hasDecl(system, "clock_getres")) system.clock_getres else generic.clock_getres;
+pub const clock_gettime = if (@hasDecl(system, "clock_gettime")) system.clock_gettime else generic.clock_gettime;
+pub const fstat = if (@hasDecl(system, "fstat")) system.fstat else generic.fstat;
+pub const fstatat = if (@hasDecl(system, "fstatat")) system.fstatat else generic.fstatat;
+pub const getrusage = if (@hasDecl(system, "getrusage")) system.getrusage else generic.getrusage;
+pub const gettimeofday = if (@hasDecl(system, "gettimeofday")) system.gettimeofday else generic.gettimeofday;
+pub const nanosleep = if (@hasDecl(system, "nanosleep")) system.nanosleep else generic.nanosleep;
+pub const realpath = if (@hasDecl(system, "realpath")) system.realpath else generic.realpath;
+pub const sched_yield = if (@hasDecl(system, "sched_yield")) system.sched_yield else generic.sched_yield;
+pub const sigaction = if (@hasDecl(system, "sigaction")) system.sigaction else generic.sigaction;
+pub const sigfillset = if (@hasDecl(system, "sigfillset")) system.sigfillset else generic.sigfillset;
+pub const sigprocmask = if (@hasDecl(system, "sigprocmask")) system.sigprocmask else generic.sigprocmask;
+pub const sigwait = if (@hasDecl(system, "sigwait")) system.sigwait else generic.sigwait;
+pub const socket = if (@hasDecl(system, "socket")) system.socket else generic.socket;
+pub const stat = if (@hasDecl(system, "stat")) system.stat else generic.stat;
pub fn getErrno(rc: anytype) E {
if (rc == -1) {
@@ -47,9 +151,9 @@ pub fn versionCheck(glibc_version: builtin.Version) type {
return struct {
pub const ok = blk: {
if (!builtin.link_libc) break :blk false;
- if (std.Target.current.abi.isMusl()) break :blk true;
- if (std.Target.current.isGnuLibC()) {
- const ver = std.Target.current.os.version_range.linux.glibc;
+ if (builtin.abi.isMusl()) break :blk true;
+ if (builtin.target.isGnuLibC()) {
+ const ver = builtin.os.version_range.linux.glibc;
const order = ver.order(glibc_version);
break :blk switch (order) {
.gt, .eq => true,
@@ -115,17 +219,6 @@ pub extern "c" fn dup2(old_fd: fd_t, new_fd: fd_t) 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 usingnamespace switch (builtin.os.tag) {
- .macos, .ios, .watchos, .tvos => struct {
- pub const realpath = @"realpath$DARWIN_EXTSN";
- pub const fstatat = _fstatat;
- },
- else => struct {
- pub extern "c" fn realpath(noalias file_name: [*:0]const u8, noalias resolved_name: [*]u8) ?[*:0]u8;
- pub extern "c" fn fstatat(dirfd: fd_t, path: [*:0]const u8, stat_buf: *libc_stat, flags: u32) c_int;
- },
-};
-
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: ?*c_void, oldlenp: ?*usize, newp: ?*c_void, newlen: usize) c_int;
@@ -172,75 +265,6 @@ pub extern "c" fn recvfrom(
) isize;
pub extern "c" fn recvmsg(sockfd: fd_t, msg: *std.x.os.Socket.Message, flags: c_int) isize;
-pub usingnamespace switch (builtin.os.tag) {
- .netbsd => struct {
- pub const clock_getres = __clock_getres50;
- pub const clock_gettime = __clock_gettime50;
- pub const fstat = __fstat50;
- pub const getdents = __getdents30;
- pub const getrusage = __getrusage50;
- pub const gettimeofday = __gettimeofday50;
- pub const nanosleep = __nanosleep50;
- pub const sched_yield = __libc_thr_yield;
- pub const sigaction = __sigaction14;
- pub const sigaltstack = __sigaltstack14;
- pub const sigprocmask = __sigprocmask14;
- pub const socket = __socket30;
- pub const stat = __stat50;
- },
- .macos, .ios, .watchos, .tvos => struct {
- // XXX: close -> close$NOCANCEL
- // XXX: getdirentries -> _getdirentries64
- pub extern "c" fn clock_getres(clk_id: c_int, tp: *timespec) c_int;
- pub extern "c" fn clock_gettime(clk_id: c_int, tp: *timespec) c_int;
- pub const fstat = _fstat;
- pub extern "c" fn getrusage(who: c_int, usage: *rusage) c_int;
- pub extern "c" fn gettimeofday(noalias tv: ?*timeval, noalias tz: ?*timezone) c_int;
- pub extern "c" fn nanosleep(rqtp: *const timespec, rmtp: ?*timespec) c_int;
- pub extern "c" fn sched_yield() c_int;
- pub extern "c" fn sigaction(sig: c_int, noalias act: ?*const Sigaction, noalias oact: ?*Sigaction) c_int;
- pub extern "c" fn sigprocmask(how: c_int, noalias set: ?*const sigset_t, noalias oset: ?*sigset_t) c_int;
- pub extern "c" fn socket(domain: c_uint, sock_type: c_uint, protocol: c_uint) c_int;
- pub extern "c" fn stat(noalias path: [*:0]const u8, noalias buf: *libc_stat) c_int;
- pub extern "c" fn sigfillset(set: ?*sigset_t) void;
- pub extern "c" fn alarm(seconds: c_uint) c_uint;
- pub extern "c" fn sigwait(set: ?*sigset_t, sig: ?*c_int) c_int;
- },
- .windows => struct {
- // TODO: copied the else case and removed the socket function (because its in ws2_32)
- // need to verify which of these is actually supported on windows
- pub extern "c" fn clock_getres(clk_id: c_int, tp: *timespec) c_int;
- pub extern "c" fn clock_gettime(clk_id: c_int, tp: *timespec) c_int;
- pub extern "c" fn fstat(fd: fd_t, buf: *libc_stat) c_int;
- pub extern "c" fn getrusage(who: c_int, usage: *rusage) c_int;
- pub extern "c" fn gettimeofday(noalias tv: ?*timeval, noalias tz: ?*timezone) c_int;
- pub extern "c" fn nanosleep(rqtp: *const timespec, rmtp: ?*timespec) c_int;
- pub extern "c" fn sched_yield() c_int;
- pub extern "c" fn sigaction(sig: c_int, noalias act: ?*const Sigaction, noalias oact: ?*Sigaction) c_int;
- pub extern "c" fn sigprocmask(how: c_int, noalias set: ?*const sigset_t, noalias oset: ?*sigset_t) c_int;
- pub extern "c" fn stat(noalias path: [*:0]const u8, noalias buf: *libc_stat) c_int;
- pub extern "c" fn sigfillset(set: ?*sigset_t) void;
- pub extern "c" fn alarm(seconds: c_uint) c_uint;
- pub extern "c" fn sigwait(set: ?*sigset_t, sig: ?*c_int) c_int;
- },
- else => struct {
- pub extern "c" fn clock_getres(clk_id: c_int, tp: *timespec) c_int;
- pub extern "c" fn clock_gettime(clk_id: c_int, tp: *timespec) c_int;
- pub extern "c" fn fstat(fd: fd_t, buf: *libc_stat) c_int;
- pub extern "c" fn getrusage(who: c_int, usage: *rusage) c_int;
- pub extern "c" fn gettimeofday(noalias tv: ?*timeval, noalias tz: ?*timezone) c_int;
- pub extern "c" fn nanosleep(rqtp: *const timespec, rmtp: ?*timespec) c_int;
- pub extern "c" fn sched_yield() c_int;
- pub extern "c" fn sigaction(sig: c_int, noalias act: ?*const Sigaction, noalias oact: ?*Sigaction) c_int;
- pub extern "c" fn sigprocmask(how: c_int, noalias set: ?*const sigset_t, noalias oset: ?*sigset_t) c_int;
- pub extern "c" fn socket(domain: c_uint, sock_type: c_uint, protocol: c_uint) c_int;
- pub extern "c" fn stat(noalias path: [*:0]const u8, noalias buf: *libc_stat) c_int;
- pub extern "c" fn sigfillset(set: ?*sigset_t) void;
- pub extern "c" fn alarm(seconds: c_uint) c_uint;
- pub extern "c" fn sigwait(set: ?*sigset_t, sig: ?*c_int) c_int;
- },
-};
-
pub extern "c" fn kill(pid: pid_t, sig: c_int) c_int;
pub extern "c" fn getdirentries(fd: fd_t, buf_ptr: [*]u8, nbytes: usize, basep: *i64) isize;
@@ -375,9 +399,9 @@ pub extern "c" fn openlog(ident: [*:0]const u8, logopt: c_int, facility: c_int)
pub extern "c" fn closelog() void;
pub extern "c" fn setlogmask(maskpri: c_int) c_int;
-pub const max_align_t = if (std.Target.current.abi == .msvc)
+pub const max_align_t = if (builtin.abi == .msvc)
f64
-else if (std.Target.current.isDarwin())
+else if (builtin.target.isDarwin())
c_longdouble
else
extern struct {
diff --git a/lib/std/c/darwin.zig b/lib/std/c/darwin.zig
index fe074554f4..e661a3fe39 100644
--- a/lib/std/c/darwin.zig
+++ b/lib/std/c/darwin.zig
@@ -3,6 +3,7 @@ const assert = std.debug.assert;
const builtin = @import("builtin");
const macho = std.macho;
const native_arch = builtin.target.cpu.arch;
+const maxInt = std.math.maxInt;
extern "c" fn __error() *c_int;
pub extern "c" fn NSVersionOfRunTimeLibrary(library_name: [*:0]const u8) u32;
@@ -21,20 +22,25 @@ pub const copyfile_state_t = *opaque {};
pub extern "c" fn fcopyfile(from: fd_t, to: fd_t, state: ?copyfile_state_t, flags: u32) c_int;
pub extern "c" fn @"realpath$DARWIN_EXTSN"(noalias file_name: [*:0]const u8, noalias resolved_name: [*]u8) ?[*:0]u8;
+pub const realpath = @"realpath$DARWIN_EXTSN";
pub extern "c" fn __getdirentries64(fd: c_int, buf_ptr: [*]u8, buf_len: usize, basep: *i64) isize;
-extern "c" fn fstat(fd: fd_t, buf: *libc_stat) c_int;
-/// On x86_64 Darwin, fstat has to be manully linked with $INODE64 suffix to force 64bit version.
-/// Note that this is fixed on aarch64 and no longer necessary.
-extern "c" fn @"fstat$INODE64"(fd: fd_t, buf: *libc_stat) c_int;
-pub const _fstat = if (native_arch == .aarch64) fstat else @"fstat$INODE64";
+const private = struct {
+ extern "c" fn fstat(fd: fd_t, buf: *Stat) c_int;
+ /// On x86_64 Darwin, fstat has to be manully linked with $INODE64 suffix to
+ /// force 64bit version.
+ /// Note that this is fixed on aarch64 and no longer necessary.
+ extern "c" fn @"fstat$INODE64"(fd: fd_t, buf: *Stat) c_int;
-extern "c" fn fstatat(dirfd: fd_t, path: [*:0]const u8, stat_buf: *libc_stat, flags: u32) c_int;
-/// On x86_64 Darwin, fstatat has to be manully linked with $INODE64 suffix to force 64bit version.
-/// Note that this is fixed on aarch64 and no longer necessary.
-extern "c" fn @"fstatat$INODE64"(dirfd: fd_t, path_name: [*:0]const u8, buf: *libc_stat, flags: u32) c_int;
-pub const _fstatat = if (native_arch == .aarch64) fstatat else @"fstatat$INODE64";
+ extern "c" fn fstatat(dirfd: fd_t, path: [*:0]const u8, stat_buf: *Stat, flags: u32) c_int;
+ /// On x86_64 Darwin, fstatat has to be manully linked with $INODE64 suffix to
+ /// force 64bit version.
+ /// Note that this is fixed on aarch64 and no longer necessary.
+ extern "c" fn @"fstatat$INODE64"(dirfd: fd_t, path_name: [*:0]const u8, buf: *Stat, flags: u32) c_int;
+};
+pub const fstat = if (native_arch == .aarch64) private.fstat else private.@"fstat$INODE64";
+pub const fstatat = if (native_arch == .aarch64) private.fstatat else private.@"fstatat$INODE64";
pub extern "c" fn mach_absolute_time() u64;
pub extern "c" fn mach_timebase_info(tinfo: ?*mach_timebase_info_data) void;
@@ -254,3 +260,1799 @@ pub extern "c" fn os_unfair_lock_unlock(o: os_unfair_lock_t) void;
pub extern "c" fn os_unfair_lock_trylock(o: os_unfair_lock_t) bool;
pub extern "c" fn os_unfair_lock_assert_owner(o: os_unfair_lock_t) void;
pub extern "c" fn os_unfair_lock_assert_not_owner(o: os_unfair_lock_t) void;
+
+// XXX: close -> close$NOCANCEL
+// XXX: getdirentries -> _getdirentries64
+pub extern "c" fn clock_getres(clk_id: c_int, tp: *timespec) c_int;
+pub extern "c" fn clock_gettime(clk_id: c_int, tp: *timespec) c_int;
+pub extern "c" fn getrusage(who: c_int, usage: *rusage) c_int;
+pub extern "c" fn gettimeofday(noalias tv: ?*timeval, noalias tz: ?*timezone) c_int;
+pub extern "c" fn nanosleep(rqtp: *const timespec, rmtp: ?*timespec) c_int;
+pub extern "c" fn sched_yield() c_int;
+pub extern "c" fn sigaction(sig: c_int, noalias act: ?*const Sigaction, noalias oact: ?*Sigaction) c_int;
+pub extern "c" fn sigprocmask(how: c_int, noalias set: ?*const sigset_t, noalias oset: ?*sigset_t) c_int;
+pub extern "c" fn socket(domain: c_uint, sock_type: c_uint, protocol: c_uint) c_int;
+pub extern "c" fn stat(noalias path: [*:0]const u8, noalias buf: *Stat) c_int;
+pub extern "c" fn sigfillset(set: ?*sigset_t) void;
+pub extern "c" fn alarm(seconds: c_uint) c_uint;
+pub extern "c" fn sigwait(set: ?*sigset_t, sig: ?*c_int) c_int;
+
+// See: https://opensource.apple.com/source/xnu/xnu-6153.141.1/bsd/sys/_types.h.auto.html
+// TODO: audit mode_t/pid_t, should likely be u16/i32
+pub const fd_t = c_int;
+pub const pid_t = c_int;
+pub const mode_t = c_uint;
+pub const uid_t = u32;
+pub const gid_t = u32;
+
+pub const in_port_t = u16;
+pub const sa_family_t = u8;
+pub const socklen_t = u32;
+pub const sockaddr = extern struct {
+ len: u8,
+ family: sa_family_t,
+ data: [14]u8,
+};
+pub const sockaddr_storage = std.x.os.Socket.Address.Native.Storage;
+pub const sockaddr_in = extern struct {
+ len: u8 = @sizeOf(sockaddr_in),
+ family: sa_family_t = AF_INET,
+ port: in_port_t,
+ addr: u32,
+ zero: [8]u8 = [8]u8{ 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+pub const sockaddr_in6 = extern struct {
+ len: u8 = @sizeOf(sockaddr_in6),
+ family: sa_family_t = AF_INET6,
+ port: in_port_t,
+ flowinfo: u32,
+ addr: [16]u8,
+ scope_id: u32,
+};
+
+/// UNIX domain socket
+pub const sockaddr_un = extern struct {
+ len: u8 = @sizeOf(sockaddr_un),
+ family: sa_family_t = AF_UNIX,
+ path: [104]u8,
+};
+
+pub const timeval = extern struct {
+ tv_sec: c_long,
+ tv_usec: i32,
+};
+
+pub const timezone = extern struct {
+ tz_minuteswest: i32,
+ tz_dsttime: i32,
+};
+
+pub const mach_timebase_info_data = extern struct {
+ numer: u32,
+ denom: u32,
+};
+
+pub const off_t = i64;
+pub const ino_t = u64;
+
+pub const Flock = extern struct {
+ l_start: off_t,
+ l_len: off_t,
+ l_pid: pid_t,
+ l_type: i16,
+ l_whence: i16,
+};
+
+pub const Stat = extern struct {
+ dev: i32,
+ mode: u16,
+ nlink: u16,
+ ino: ino_t,
+ uid: uid_t,
+ gid: gid_t,
+ rdev: i32,
+ atimesec: isize,
+ atimensec: isize,
+ mtimesec: isize,
+ mtimensec: isize,
+ ctimesec: isize,
+ ctimensec: isize,
+ birthtimesec: isize,
+ birthtimensec: isize,
+ size: off_t,
+ blocks: i64,
+ blksize: i32,
+ flags: u32,
+ gen: u32,
+ lspare: i32,
+ qspare: [2]i64,
+
+ pub fn atime(self: @This()) timespec {
+ return timespec{
+ .tv_sec = self.atimesec,
+ .tv_nsec = self.atimensec,
+ };
+ }
+
+ pub fn mtime(self: @This()) timespec {
+ return timespec{
+ .tv_sec = self.mtimesec,
+ .tv_nsec = self.mtimensec,
+ };
+ }
+
+ pub fn ctime(self: @This()) timespec {
+ return timespec{
+ .tv_sec = self.ctimesec,
+ .tv_nsec = self.ctimensec,
+ };
+ }
+};
+
+pub const timespec = extern struct {
+ tv_sec: isize,
+ tv_nsec: isize,
+};
+
+pub const sigset_t = u32;
+pub const empty_sigset: sigset_t = 0;
+
+pub const SIG_ERR = @intToPtr(?Sigaction.sigaction_fn, maxInt(usize));
+pub const SIG_DFL = @intToPtr(?Sigaction.sigaction_fn, 0);
+pub const SIG_IGN = @intToPtr(?Sigaction.sigaction_fn, 1);
+pub const SIG_HOLD = @intToPtr(?Sigaction.sigaction_fn, 5);
+
+pub const siginfo_t = extern struct {
+ signo: c_int,
+ errno: c_int,
+ code: c_int,
+ pid: pid_t,
+ uid: uid_t,
+ status: c_int,
+ addr: *c_void,
+ value: extern union {
+ int: c_int,
+ ptr: *c_void,
+ },
+ si_band: c_long,
+ _pad: [7]c_ulong,
+};
+
+/// Renamed from `sigaction` to `Sigaction` to avoid conflict with function name.
+pub const Sigaction = extern struct {
+ pub const handler_fn = fn (c_int) callconv(.C) void;
+ pub const sigaction_fn = fn (c_int, *const siginfo_t, ?*const c_void) callconv(.C) void;
+
+ handler: extern union {
+ handler: ?handler_fn,
+ sigaction: ?sigaction_fn,
+ },
+ mask: sigset_t,
+ flags: c_uint,
+};
+
+pub const dirent = extern struct {
+ d_ino: usize,
+ d_seekoff: usize,
+ d_reclen: u16,
+ d_namlen: u16,
+ d_type: u8,
+ d_name: u8, // field address is address of first byte of name
+
+ pub fn reclen(self: dirent) u16 {
+ return self.d_reclen;
+ }
+};
+
+/// Renamed from `kevent` to `Kevent` to avoid conflict with function name.
+pub const Kevent = extern struct {
+ ident: usize,
+ filter: i16,
+ flags: u16,
+ fflags: u32,
+ data: isize,
+ udata: usize,
+};
+
+// sys/types.h on macos uses #pragma pack(4) so these checks are
+// to make sure the struct is laid out the same. These values were
+// produced from C code using the offsetof macro.
+comptime {
+ assert(@offsetOf(Kevent, "ident") == 0);
+ assert(@offsetOf(Kevent, "filter") == 8);
+ assert(@offsetOf(Kevent, "flags") == 10);
+ assert(@offsetOf(Kevent, "fflags") == 12);
+ assert(@offsetOf(Kevent, "data") == 16);
+ assert(@offsetOf(Kevent, "udata") == 24);
+}
+
+pub const kevent64_s = extern struct {
+ ident: u64,
+ filter: i16,
+ flags: u16,
+ fflags: u32,
+ data: i64,
+ udata: u64,
+ ext: [2]u64,
+};
+
+// sys/types.h on macos uses #pragma pack() 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(kevent64_s, "ident") == 0);
+ assert(@offsetOf(kevent64_s, "filter") == 8);
+ assert(@offsetOf(kevent64_s, "flags") == 10);
+ assert(@offsetOf(kevent64_s, "fflags") == 12);
+ assert(@offsetOf(kevent64_s, "data") == 16);
+ assert(@offsetOf(kevent64_s, "udata") == 24);
+ assert(@offsetOf(kevent64_s, "ext") == 32);
+}
+
+pub const mach_port_t = c_uint;
+pub const clock_serv_t = mach_port_t;
+pub const clock_res_t = c_int;
+pub const mach_port_name_t = natural_t;
+pub const natural_t = c_uint;
+pub const mach_timespec_t = extern struct {
+ tv_sec: c_uint,
+ tv_nsec: clock_res_t,
+};
+pub const kern_return_t = c_int;
+pub const host_t = mach_port_t;
+pub const CALENDAR_CLOCK = 1;
+
+pub const PATH_MAX = 1024;
+pub const IOV_MAX = 16;
+
+pub const STDIN_FILENO = 0;
+pub const STDOUT_FILENO = 1;
+pub const STDERR_FILENO = 2;
+
+/// [MC2] no permissions
+pub const PROT_NONE = 0x00;
+
+/// [MC2] pages can be read
+pub const PROT_READ = 0x01;
+
+/// [MC2] pages can be written
+pub const PROT_WRITE = 0x02;
+
+/// [MC2] pages can be executed
+pub const PROT_EXEC = 0x04;
+
+/// allocated from memory, swap space
+pub const MAP_ANONYMOUS = 0x1000;
+
+/// map from file (default)
+pub const MAP_FILE = 0x0000;
+
+/// interpret addr exactly
+pub const MAP_FIXED = 0x0010;
+
+/// region may contain semaphores
+pub const MAP_HASSEMAPHORE = 0x0200;
+
+/// changes are private
+pub const MAP_PRIVATE = 0x0002;
+
+/// share changes
+pub const MAP_SHARED = 0x0001;
+
+/// don't cache pages for this mapping
+pub const MAP_NOCACHE = 0x0400;
+
+/// don't reserve needed swap area
+pub const MAP_NORESERVE = 0x0040;
+pub const MAP_FAILED = @intToPtr(*c_void, maxInt(usize));
+
+/// [XSI] no hang in wait/no child to reap
+pub const WNOHANG = 0x00000001;
+
+/// [XSI] notify on stop, untraced child
+pub const WUNTRACED = 0x00000002;
+
+/// take signal on signal stack
+pub const SA_ONSTACK = 0x0001;
+
+/// restart system on signal return
+pub const SA_RESTART = 0x0002;
+
+/// reset to SIG_DFL when taking signal
+pub const SA_RESETHAND = 0x0004;
+
+/// do not generate SIGCHLD on child stop
+pub const SA_NOCLDSTOP = 0x0008;
+
+/// don't mask the signal we're delivering
+pub const SA_NODEFER = 0x0010;
+
+/// don't keep zombies around
+pub const SA_NOCLDWAIT = 0x0020;
+
+/// signal handler with SA_SIGINFO args
+pub const SA_SIGINFO = 0x0040;
+
+/// do not bounce off kernel's sigtramp
+pub const SA_USERTRAMP = 0x0100;
+
+/// signal handler with SA_SIGINFO args with 64bit regs information
+pub const SA_64REGSET = 0x0200;
+
+pub const O_PATH = 0x0000;
+
+pub const F_OK = 0;
+pub const X_OK = 1;
+pub const W_OK = 2;
+pub const R_OK = 4;
+
+/// open for reading only
+pub const O_RDONLY = 0x0000;
+
+/// open for writing only
+pub const O_WRONLY = 0x0001;
+
+/// open for reading and writing
+pub const O_RDWR = 0x0002;
+
+/// do not block on open or for data to become available
+pub const O_NONBLOCK = 0x0004;
+
+/// append on each write
+pub const O_APPEND = 0x0008;
+
+/// create file if it does not exist
+pub const O_CREAT = 0x0200;
+
+/// truncate size to 0
+pub const O_TRUNC = 0x0400;
+
+/// error if O_CREAT and the file exists
+pub const O_EXCL = 0x0800;
+
+/// atomically obtain a shared lock
+pub const O_SHLOCK = 0x0010;
+
+/// atomically obtain an exclusive lock
+pub const O_EXLOCK = 0x0020;
+
+/// do not follow symlinks
+pub const O_NOFOLLOW = 0x0100;
+
+/// allow open of symlinks
+pub const O_SYMLINK = 0x200000;
+
+/// descriptor requested for event notifications only
+pub const O_EVTONLY = 0x8000;
+
+/// mark as close-on-exec
+pub const O_CLOEXEC = 0x1000000;
+
+pub const O_ACCMODE = 3;
+pub const O_ALERT = 536870912;
+pub const O_ASYNC = 64;
+pub const O_DIRECTORY = 1048576;
+pub const O_DP_GETRAWENCRYPTED = 1;
+pub const O_DP_GETRAWUNENCRYPTED = 2;
+pub const O_DSYNC = 4194304;
+pub const O_FSYNC = O_SYNC;
+pub const O_NOCTTY = 131072;
+pub const O_POPUP = 2147483648;
+pub const O_SYNC = 128;
+
+pub const SEEK_SET = 0x0;
+pub const SEEK_CUR = 0x1;
+pub const SEEK_END = 0x2;
+
+pub const DT_UNKNOWN = 0;
+pub const DT_FIFO = 1;
+pub const DT_CHR = 2;
+pub const DT_DIR = 4;
+pub const DT_BLK = 6;
+pub const DT_REG = 8;
+pub const DT_LNK = 10;
+pub const DT_SOCK = 12;
+pub const DT_WHT = 14;
+
+/// block specified signal set
+pub const SIG_BLOCK = 1;
+
+/// unblock specified signal set
+pub const SIG_UNBLOCK = 2;
+
+/// set specified signal set
+pub const SIG_SETMASK = 3;
+
+/// hangup
+pub const SIGHUP = 1;
+
+/// interrupt
+pub const SIGINT = 2;
+
+/// quit
+pub const SIGQUIT = 3;
+
+/// illegal instruction (not reset when caught)
+pub const SIGILL = 4;
+
+/// trace trap (not reset when caught)
+pub const SIGTRAP = 5;
+
+/// abort()
+pub const SIGABRT = 6;
+
+/// pollable event ([XSR] generated, not supported)
+pub const SIGPOLL = 7;
+
+/// compatibility
+pub const SIGIOT = SIGABRT;
+
+/// EMT instruction
+pub const SIGEMT = 7;
+
+/// floating point exception
+pub const SIGFPE = 8;
+
+/// kill (cannot be caught or ignored)
+pub const SIGKILL = 9;
+
+/// bus error
+pub const SIGBUS = 10;
+
+/// segmentation violation
+pub const SIGSEGV = 11;
+
+/// bad argument to system call
+pub const SIGSYS = 12;
+
+/// write on a pipe with no one to read it
+pub const SIGPIPE = 13;
+
+/// alarm clock
+pub const SIGALRM = 14;
+
+/// software termination signal from kill
+pub const SIGTERM = 15;
+
+/// urgent condition on IO channel
+pub const SIGURG = 16;
+
+/// sendable stop signal not from tty
+pub const SIGSTOP = 17;
+
+/// stop signal from tty
+pub const SIGTSTP = 18;
+
+/// continue a stopped process
+pub const SIGCONT = 19;
+
+/// to parent on child stop or exit
+pub const SIGCHLD = 20;
+
+/// to readers pgrp upon background tty read
+pub const SIGTTIN = 21;
+
+/// like TTIN for output if (tp->t_local&LTOSTOP)
+pub const SIGTTOU = 22;
+
+/// input/output possible signal
+pub const SIGIO = 23;
+
+/// exceeded CPU time limit
+pub const SIGXCPU = 24;
+
+/// exceeded file size limit
+pub const SIGXFSZ = 25;
+
+/// virtual time alarm
+pub const SIGVTALRM = 26;
+
+/// profiling time alarm
+pub const SIGPROF = 27;
+
+/// window size changes
+pub const SIGWINCH = 28;
+
+/// information request
+pub const SIGINFO = 29;
+
+/// user defined signal 1
+pub const SIGUSR1 = 30;
+
+/// user defined signal 2
+pub const SIGUSR2 = 31;
+
+/// no flag value
+pub const KEVENT_FLAG_NONE = 0x000;
+
+/// immediate timeout
+pub const KEVENT_FLAG_IMMEDIATE = 0x001;
+
+/// output events only include change
+pub const KEVENT_FLAG_ERROR_EVENTS = 0x002;
+
+/// add event to kq (implies enable)
+pub const EV_ADD = 0x0001;
+
+/// delete event from kq
+pub const EV_DELETE = 0x0002;
+
+/// enable event
+pub const EV_ENABLE = 0x0004;
+
+/// disable event (not reported)
+pub const EV_DISABLE = 0x0008;
+
+/// only report one occurrence
+pub const EV_ONESHOT = 0x0010;
+
+/// clear event state after reporting
+pub const EV_CLEAR = 0x0020;
+
+/// force immediate event output
+/// ... with or without EV_ERROR
+/// ... use KEVENT_FLAG_ERROR_EVENTS
+/// on syscalls supporting flags
+pub const EV_RECEIPT = 0x0040;
+
+/// disable event after reporting
+pub const EV_DISPATCH = 0x0080;
+
+/// unique kevent per udata value
+pub const EV_UDATA_SPECIFIC = 0x0100;
+
+/// ... in combination with EV_DELETE
+/// will defer delete until udata-specific
+/// event enabled. EINPROGRESS will be
+/// returned to indicate the deferral
+pub const EV_DISPATCH2 = EV_DISPATCH | EV_UDATA_SPECIFIC;
+
+/// report that source has vanished
+/// ... only valid with EV_DISPATCH2
+pub const EV_VANISHED = 0x0200;
+
+/// reserved by system
+pub const EV_SYSFLAGS = 0xF000;
+
+/// filter-specific flag
+pub const EV_FLAG0 = 0x1000;
+
+/// filter-specific flag
+pub const EV_FLAG1 = 0x2000;
+
+/// EOF detected
+pub const EV_EOF = 0x8000;
+
+/// error, data contains errno
+pub const EV_ERROR = 0x4000;
+
+pub const EV_POLL = EV_FLAG0;
+pub const EV_OOBAND = EV_FLAG1;
+
+pub const EVFILT_READ = -1;
+pub const EVFILT_WRITE = -2;
+
+/// attached to aio requests
+pub const EVFILT_AIO = -3;
+
+/// attached to vnodes
+pub const EVFILT_VNODE = -4;
+
+/// attached to struct proc
+pub const EVFILT_PROC = -5;
+
+/// attached to struct proc
+pub const EVFILT_SIGNAL = -6;
+
+/// timers
+pub const EVFILT_TIMER = -7;
+
+/// Mach portsets
+pub const EVFILT_MACHPORT = -8;
+
+/// Filesystem events
+pub const EVFILT_FS = -9;
+
+/// User events
+pub const EVFILT_USER = -10;
+
+/// Virtual memory events
+pub const EVFILT_VM = -12;
+
+/// Exception events
+pub const EVFILT_EXCEPT = -15;
+
+pub const EVFILT_SYSCOUNT = 17;
+
+/// On input, NOTE_TRIGGER causes the event to be triggered for output.
+pub const NOTE_TRIGGER = 0x01000000;
+
+/// ignore input fflags
+pub const NOTE_FFNOP = 0x00000000;
+
+/// and fflags
+pub const NOTE_FFAND = 0x40000000;
+
+/// or fflags
+pub const NOTE_FFOR = 0x80000000;
+
+/// copy fflags
+pub const NOTE_FFCOPY = 0xc0000000;
+
+/// mask for operations
+pub const NOTE_FFCTRLMASK = 0xc0000000;
+pub const NOTE_FFLAGSMASK = 0x00ffffff;
+
+/// low water mark
+pub const NOTE_LOWAT = 0x00000001;
+
+/// OOB data
+pub const NOTE_OOB = 0x00000002;
+
+/// vnode was removed
+pub const NOTE_DELETE = 0x00000001;
+
+/// data contents changed
+pub const NOTE_WRITE = 0x00000002;
+
+/// size increased
+pub const NOTE_EXTEND = 0x00000004;
+
+/// attributes changed
+pub const NOTE_ATTRIB = 0x00000008;
+
+/// link count changed
+pub const NOTE_LINK = 0x00000010;
+
+/// vnode was renamed
+pub const NOTE_RENAME = 0x00000020;
+
+/// vnode access was revoked
+pub const NOTE_REVOKE = 0x00000040;
+
+/// No specific vnode event: to test for EVFILT_READ activation
+pub const NOTE_NONE = 0x00000080;
+
+/// vnode was unlocked by flock(2)
+pub const NOTE_FUNLOCK = 0x00000100;
+
+/// process exited
+pub const NOTE_EXIT = 0x80000000;
+
+/// process forked
+pub const NOTE_FORK = 0x40000000;
+
+/// process exec'd
+pub const NOTE_EXEC = 0x20000000;
+
+/// shared with EVFILT_SIGNAL
+pub const NOTE_SIGNAL = 0x08000000;
+
+/// exit status to be returned, valid for child process only
+pub const NOTE_EXITSTATUS = 0x04000000;
+
+/// provide details on reasons for exit
+pub const NOTE_EXIT_DETAIL = 0x02000000;
+
+/// mask for signal & exit status
+pub const NOTE_PDATAMASK = 0x000fffff;
+pub const NOTE_PCTRLMASK = (~NOTE_PDATAMASK);
+
+pub const NOTE_EXIT_DETAIL_MASK = 0x00070000;
+pub const NOTE_EXIT_DECRYPTFAIL = 0x00010000;
+pub const NOTE_EXIT_MEMORY = 0x00020000;
+pub const NOTE_EXIT_CSERROR = 0x00040000;
+
+/// will react on memory pressure
+pub const NOTE_VM_PRESSURE = 0x80000000;
+
+/// will quit on memory pressure, possibly after cleaning up dirty state
+pub const NOTE_VM_PRESSURE_TERMINATE = 0x40000000;
+
+/// will quit immediately on memory pressure
+pub const NOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000;
+
+/// there was an error
+pub const NOTE_VM_ERROR = 0x10000000;
+
+/// data is seconds
+pub const NOTE_SECONDS = 0x00000001;
+
+/// data is microseconds
+pub const NOTE_USECONDS = 0x00000002;
+
+/// data is nanoseconds
+pub const NOTE_NSECONDS = 0x00000004;
+
+/// absolute timeout
+pub const NOTE_ABSOLUTE = 0x00000008;
+
+/// ext[1] holds leeway for power aware timers
+pub const NOTE_LEEWAY = 0x00000010;
+
+/// system does minimal timer coalescing
+pub const NOTE_CRITICAL = 0x00000020;
+
+/// system does maximum timer coalescing
+pub const NOTE_BACKGROUND = 0x00000040;
+pub const NOTE_MACH_CONTINUOUS_TIME = 0x00000080;
+
+/// data is mach absolute time units
+pub const NOTE_MACHTIME = 0x00000100;
+
+pub const AF_UNSPEC = 0;
+pub const AF_LOCAL = 1;
+pub const AF_UNIX = AF_LOCAL;
+pub const AF_INET = 2;
+pub const AF_SYS_CONTROL = 2;
+pub const AF_IMPLINK = 3;
+pub const AF_PUP = 4;
+pub const AF_CHAOS = 5;
+pub const AF_NS = 6;
+pub const AF_ISO = 7;
+pub const AF_OSI = AF_ISO;
+pub const AF_ECMA = 8;
+pub const AF_DATAKIT = 9;
+pub const AF_CCITT = 10;
+pub const AF_SNA = 11;
+pub const AF_DECnet = 12;
+pub const AF_DLI = 13;
+pub const AF_LAT = 14;
+pub const AF_HYLINK = 15;
+pub const AF_APPLETALK = 16;
+pub const AF_ROUTE = 17;
+pub const AF_LINK = 18;
+pub const AF_XTP = 19;
+pub const AF_COIP = 20;
+pub const AF_CNT = 21;
+pub const AF_RTIP = 22;
+pub const AF_IPX = 23;
+pub const AF_SIP = 24;
+pub const AF_PIP = 25;
+pub const AF_ISDN = 28;
+pub const AF_E164 = AF_ISDN;
+pub const AF_KEY = 29;
+pub const AF_INET6 = 30;
+pub const AF_NATM = 31;
+pub const AF_SYSTEM = 32;
+pub const AF_NETBIOS = 33;
+pub const AF_PPP = 34;
+pub const AF_MAX = 40;
+
+pub const PF_UNSPEC = AF_UNSPEC;
+pub const PF_LOCAL = AF_LOCAL;
+pub const PF_UNIX = PF_LOCAL;
+pub const PF_INET = AF_INET;
+pub const PF_IMPLINK = AF_IMPLINK;
+pub const PF_PUP = AF_PUP;
+pub const PF_CHAOS = AF_CHAOS;
+pub const PF_NS = AF_NS;
+pub const PF_ISO = AF_ISO;
+pub const PF_OSI = AF_ISO;
+pub const PF_ECMA = AF_ECMA;
+pub const PF_DATAKIT = AF_DATAKIT;
+pub const PF_CCITT = AF_CCITT;
+pub const PF_SNA = AF_SNA;
+pub const PF_DECnet = AF_DECnet;
+pub const PF_DLI = AF_DLI;
+pub const PF_LAT = AF_LAT;
+pub const PF_HYLINK = AF_HYLINK;
+pub const PF_APPLETALK = AF_APPLETALK;
+pub const PF_ROUTE = AF_ROUTE;
+pub const PF_LINK = AF_LINK;
+pub const PF_XTP = AF_XTP;
+pub const PF_COIP = AF_COIP;
+pub const PF_CNT = AF_CNT;
+pub const PF_SIP = AF_SIP;
+pub const PF_IPX = AF_IPX;
+pub const PF_RTIP = AF_RTIP;
+pub const PF_PIP = AF_PIP;
+pub const PF_ISDN = AF_ISDN;
+pub const PF_KEY = AF_KEY;
+pub const PF_INET6 = AF_INET6;
+pub const PF_NATM = AF_NATM;
+pub const PF_SYSTEM = AF_SYSTEM;
+pub const PF_NETBIOS = AF_NETBIOS;
+pub const PF_PPP = AF_PPP;
+pub const PF_MAX = AF_MAX;
+
+pub const SYSPROTO_EVENT = 1;
+pub const SYSPROTO_CONTROL = 2;
+
+pub const SOCK_STREAM = 1;
+pub const SOCK_DGRAM = 2;
+pub const SOCK_RAW = 3;
+pub const SOCK_RDM = 4;
+pub const SOCK_SEQPACKET = 5;
+pub const SOCK_MAXADDRLEN = 255;
+
+/// Not actually supported by Darwin, but Zig supplies a shim.
+/// This numerical value is not ABI-stable. It need only not conflict
+/// with any other "SOCK_" bits.
+pub const SOCK_CLOEXEC = 1 << 15;
+/// Not actually supported by Darwin, but Zig supplies a shim.
+/// This numerical value is not ABI-stable. It need only not conflict
+/// with any other "SOCK_" bits.
+pub const SOCK_NONBLOCK = 1 << 16;
+
+pub const IPPROTO_ICMP = 1;
+pub const IPPROTO_ICMPV6 = 58;
+pub const IPPROTO_TCP = 6;
+pub const IPPROTO_UDP = 17;
+pub const IPPROTO_IP = 0;
+pub const IPPROTO_IPV6 = 41;
+
+pub const SOL_SOCKET = 0xffff;
+
+pub const SO_DEBUG = 0x0001;
+pub const SO_ACCEPTCONN = 0x0002;
+pub const SO_REUSEADDR = 0x0004;
+pub const SO_KEEPALIVE = 0x0008;
+pub const SO_DONTROUTE = 0x0010;
+pub const SO_BROADCAST = 0x0020;
+pub const SO_USELOOPBACK = 0x0040;
+pub const SO_LINGER = 0x1080;
+pub const SO_OOBINLINE = 0x0100;
+pub const SO_REUSEPORT = 0x0200;
+pub const SO_ACCEPTFILTER = 0x1000;
+pub const SO_SNDBUF = 0x1001;
+pub const SO_RCVBUF = 0x1002;
+pub const SO_SNDLOWAT = 0x1003;
+pub const SO_RCVLOWAT = 0x1004;
+pub const SO_SNDTIMEO = 0x1005;
+pub const SO_RCVTIMEO = 0x1006;
+pub const SO_ERROR = 0x1007;
+pub const SO_TYPE = 0x1008;
+
+pub const SO_NREAD = 0x1020;
+pub const SO_NKE = 0x1021;
+pub const SO_NOSIGPIPE = 0x1022;
+pub const SO_NOADDRERR = 0x1023;
+pub const SO_NWRITE = 0x1024;
+pub const SO_REUSESHAREUID = 0x1025;
+
+fn wstatus(x: u32) u32 {
+ return x & 0o177;
+}
+const wstopped = 0o177;
+pub fn WEXITSTATUS(x: u32) u8 {
+ return @intCast(u8, x >> 8);
+}
+pub fn WTERMSIG(x: u32) u32 {
+ return wstatus(x);
+}
+pub fn WSTOPSIG(x: u32) u32 {
+ return x >> 8;
+}
+pub fn WIFEXITED(x: u32) bool {
+ return wstatus(x) == 0;
+}
+pub fn WIFSTOPPED(x: u32) bool {
+ return wstatus(x) == wstopped and WSTOPSIG(x) != 0x13;
+}
+pub fn WIFSIGNALED(x: u32) bool {
+ return wstatus(x) != wstopped and wstatus(x) != 0;
+}
+
+pub const E = enum(u16) {
+ /// No error occurred.
+ SUCCESS = 0,
+
+ /// Operation not permitted
+ PERM = 1,
+
+ /// No such file or directory
+ NOENT = 2,
+
+ /// No such process
+ SRCH = 3,
+
+ /// Interrupted system call
+ INTR = 4,
+
+ /// Input/output error
+ IO = 5,
+
+ /// Device not configured
+ NXIO = 6,
+
+ /// Argument list too long
+ @"2BIG" = 7,
+
+ /// Exec format error
+ NOEXEC = 8,
+
+ /// Bad file descriptor
+ BADF = 9,
+
+ /// No child processes
+ CHILD = 10,
+
+ /// Resource deadlock avoided
+ DEADLK = 11,
+
+ /// Cannot allocate memory
+ NOMEM = 12,
+
+ /// Permission denied
+ ACCES = 13,
+
+ /// Bad address
+ FAULT = 14,
+
+ /// Block device required
+ NOTBLK = 15,
+
+ /// Device / Resource busy
+ BUSY = 16,
+
+ /// File exists
+ EXIST = 17,
+
+ /// Cross-device link
+ XDEV = 18,
+
+ /// Operation not supported by device
+ NODEV = 19,
+
+ /// Not a directory
+ NOTDIR = 20,
+
+ /// Is a directory
+ ISDIR = 21,
+
+ /// Invalid argument
+ INVAL = 22,
+
+ /// Too many open files in system
+ 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 software
+
+ /// Numerical argument out of domain
+ DOM = 33,
+
+ /// Result too large
+ RANGE = 34,
+
+ // non-blocking and interrupt i/o
+
+ /// Resource temporarily unavailable
+ /// This is the same code used for `WOULDBLOCK`.
+ AGAIN = 35,
+
+ /// Operation now in progress
+ INPROGRESS = 36,
+
+ /// Operation already in progress
+ ALREADY = 37,
+
+ // ipc/network software -- argument errors
+
+ /// Socket operation on non-socket
+ NOTSOCK = 38,
+
+ /// Destination address required
+ DESTADDRREQ = 39,
+
+ /// Message too long
+ MSGSIZE = 40,
+
+ /// Protocol wrong type for socket
+ PROTOTYPE = 41,
+
+ /// Protocol not available
+ NOPROTOOPT = 42,
+
+ /// Protocol not supported
+ PROTONOSUPPORT = 43,
+
+ /// Socket type not supported
+ SOCKTNOSUPPORT = 44,
+
+ /// Operation not supported
+ /// The same code is used for `NOTSUP`.
+ OPNOTSUPP = 45,
+
+ /// Protocol family not supported
+ PFNOSUPPORT = 46,
+
+ /// Address family not supported by protocol family
+ AFNOSUPPORT = 47,
+
+ /// Address already in use
+ ADDRINUSE = 48,
+ /// Can't assign requested address
+
+ // ipc/network software -- operational errors
+ ADDRNOTAVAIL = 49,
+
+ /// Network is down
+ NETDOWN = 50,
+
+ /// Network is unreachable
+ NETUNREACH = 51,
+
+ /// Network dropped connection on reset
+ NETRESET = 52,
+
+ /// Software caused connection abort
+ CONNABORTED = 53,
+
+ /// Connection reset by peer
+ CONNRESET = 54,
+
+ /// No buffer space available
+ NOBUFS = 55,
+
+ /// Socket is already connected
+ ISCONN = 56,
+
+ /// Socket is not connected
+ NOTCONN = 57,
+
+ /// Can't send after socket shutdown
+ SHUTDOWN = 58,
+
+ /// Too many references: can't splice
+ TOOMANYREFS = 59,
+
+ /// Operation timed out
+ TIMEDOUT = 60,
+
+ /// Connection refused
+ CONNREFUSED = 61,
+
+ /// Too many levels of symbolic links
+ LOOP = 62,
+
+ /// File name too long
+ NAMETOOLONG = 63,
+
+ /// Host is down
+ HOSTDOWN = 64,
+
+ /// No route to host
+ HOSTUNREACH = 65,
+ /// Directory not empty
+
+ // quotas & mush
+ NOTEMPTY = 66,
+
+ /// Too many processes
+ PROCLIM = 67,
+
+ /// Too many users
+ USERS = 68,
+ /// Disc quota exceeded
+
+ // Network File System
+ DQUOT = 69,
+
+ /// Stale NFS file handle
+ STALE = 70,
+
+ /// Too many levels of remote in path
+ REMOTE = 71,
+
+ /// RPC struct is bad
+ BADRPC = 72,
+
+ /// RPC version wrong
+ RPCMISMATCH = 73,
+
+ /// RPC prog. not avail
+ PROGUNAVAIL = 74,
+
+ /// Program version wrong
+ PROGMISMATCH = 75,
+
+ /// Bad procedure for program
+ PROCUNAVAIL = 76,
+
+ /// No locks available
+ NOLCK = 77,
+
+ /// Function not implemented
+ NOSYS = 78,
+
+ /// Inappropriate file type or format
+ FTYPE = 79,
+
+ /// Authentication error
+ AUTH = 80,
+
+ /// Need authenticator
+ NEEDAUTH = 81,
+
+ // Intelligent device errors
+
+ /// Device power is off
+ PWROFF = 82,
+
+ /// Device error, e.g. paper out
+ DEVERR = 83,
+
+ /// Value too large to be stored in data type
+ OVERFLOW = 84,
+
+ // Program loading errors
+
+ /// Bad executable
+ BADEXEC = 85,
+
+ /// Bad CPU type in executable
+ BADARCH = 86,
+
+ /// Shared library version mismatch
+ SHLIBVERS = 87,
+
+ /// Malformed Macho file
+ BADMACHO = 88,
+
+ /// Operation canceled
+ CANCELED = 89,
+
+ /// Identifier removed
+ IDRM = 90,
+
+ /// No message of desired type
+ NOMSG = 91,
+
+ /// Illegal byte sequence
+ ILSEQ = 92,
+
+ /// Attribute not found
+ NOATTR = 93,
+
+ /// Bad message
+ BADMSG = 94,
+
+ /// Reserved
+ MULTIHOP = 95,
+
+ /// No message available on STREAM
+ NODATA = 96,
+
+ /// Reserved
+ NOLINK = 97,
+
+ /// No STREAM resources
+ NOSR = 98,
+
+ /// Not a STREAM
+ NOSTR = 99,
+
+ /// Protocol error
+ PROTO = 100,
+
+ /// STREAM ioctl timeout
+ TIME = 101,
+
+ /// No such policy registered
+ NOPOLICY = 103,
+
+ /// State not recoverable
+ NOTRECOVERABLE = 104,
+
+ /// Previous owner died
+ OWNERDEAD = 105,
+
+ /// Interface output queue is full
+ QFULL = 106,
+
+ _,
+};
+
+pub const SIGSTKSZ = 131072;
+pub const MINSIGSTKSZ = 32768;
+
+pub const SS_ONSTACK = 1;
+pub const SS_DISABLE = 4;
+
+pub const stack_t = extern struct {
+ ss_sp: [*]u8,
+ ss_size: isize,
+ ss_flags: i32,
+};
+
+pub const S_IFMT = 0o170000;
+
+pub const S_IFIFO = 0o010000;
+pub const S_IFCHR = 0o020000;
+pub const S_IFDIR = 0o040000;
+pub const S_IFBLK = 0o060000;
+pub const S_IFREG = 0o100000;
+pub const S_IFLNK = 0o120000;
+pub const S_IFSOCK = 0o140000;
+pub const S_IFWHT = 0o160000;
+
+pub const S_ISUID = 0o4000;
+pub const S_ISGID = 0o2000;
+pub const S_ISVTX = 0o1000;
+pub const S_IRWXU = 0o700;
+pub const S_IRUSR = 0o400;
+pub const S_IWUSR = 0o200;
+pub const S_IXUSR = 0o100;
+pub const S_IRWXG = 0o070;
+pub const S_IRGRP = 0o040;
+pub const S_IWGRP = 0o020;
+pub const S_IXGRP = 0o010;
+pub const S_IRWXO = 0o007;
+pub const S_IROTH = 0o004;
+pub const S_IWOTH = 0o002;
+pub const S_IXOTH = 0o001;
+
+pub fn S_ISFIFO(m: u32) bool {
+ return m & S_IFMT == S_IFIFO;
+}
+
+pub fn S_ISCHR(m: u32) bool {
+ return m & S_IFMT == S_IFCHR;
+}
+
+pub fn S_ISDIR(m: u32) bool {
+ return m & S_IFMT == S_IFDIR;
+}
+
+pub fn S_ISBLK(m: u32) bool {
+ return m & S_IFMT == S_IFBLK;
+}
+
+pub fn S_ISREG(m: u32) bool {
+ return m & S_IFMT == S_IFREG;
+}
+
+pub fn S_ISLNK(m: u32) bool {
+ return m & S_IFMT == S_IFLNK;
+}
+
+pub fn S_ISSOCK(m: u32) bool {
+ return m & S_IFMT == S_IFSOCK;
+}
+
+pub fn S_IWHT(m: u32) bool {
+ return m & S_IFMT == S_IFWHT;
+}
+
+pub const HOST_NAME_MAX = 72;
+
+pub const AT_FDCWD = -2;
+
+/// Use effective ids in access check
+pub const AT_EACCESS = 0x0010;
+
+/// Act on the symlink itself not the target
+pub const AT_SYMLINK_NOFOLLOW = 0x0020;
+
+/// Act on target of symlink
+pub const AT_SYMLINK_FOLLOW = 0x0040;
+
+/// Path refers to directory
+pub const AT_REMOVEDIR = 0x0080;
+
+pub const addrinfo = extern struct {
+ flags: i32,
+ family: i32,
+ socktype: i32,
+ protocol: i32,
+ addrlen: socklen_t,
+ canonname: ?[*:0]u8,
+ addr: ?*sockaddr,
+ next: ?*addrinfo,
+};
+
+pub const RTLD_LAZY = 0x1;
+pub const RTLD_NOW = 0x2;
+pub const RTLD_LOCAL = 0x4;
+pub const RTLD_GLOBAL = 0x8;
+pub const RTLD_NOLOAD = 0x10;
+pub const RTLD_NODELETE = 0x80;
+pub const RTLD_FIRST = 0x100;
+
+pub const RTLD_NEXT = @intToPtr(*c_void, @bitCast(usize, @as(isize, -1)));
+pub const RTLD_DEFAULT = @intToPtr(*c_void, @bitCast(usize, @as(isize, -2)));
+pub const RTLD_SELF = @intToPtr(*c_void, @bitCast(usize, @as(isize, -3)));
+pub const RTLD_MAIN_ONLY = @intToPtr(*c_void, @bitCast(usize, @as(isize, -5)));
+
+/// duplicate file descriptor
+pub const F_DUPFD = 0;
+
+/// get file descriptor flags
+pub const F_GETFD = 1;
+
+/// set file descriptor flags
+pub const F_SETFD = 2;
+
+/// get file status flags
+pub const F_GETFL = 3;
+
+/// set file status flags
+pub const F_SETFL = 4;
+
+/// get SIGIO/SIGURG proc/pgrp
+pub const F_GETOWN = 5;
+
+/// set SIGIO/SIGURG proc/pgrp
+pub const F_SETOWN = 6;
+
+/// get record locking information
+pub const F_GETLK = 7;
+
+/// set record locking information
+pub const F_SETLK = 8;
+
+/// F_SETLK; wait if blocked
+pub const F_SETLKW = 9;
+
+/// F_SETLK; wait if blocked, return on timeout
+pub const F_SETLKWTIMEOUT = 10;
+pub const F_FLUSH_DATA = 40;
+
+/// Used for regression test
+pub const F_CHKCLEAN = 41;
+
+/// Preallocate storage
+pub const F_PREALLOCATE = 42;
+
+/// Truncate a file without zeroing space
+pub const F_SETSIZE = 43;
+
+/// Issue an advisory read async with no copy to user
+pub const F_RDADVISE = 44;
+
+/// turn read ahead off/on for this fd
+pub const F_RDAHEAD = 45;
+
+/// turn data caching off/on for this fd
+pub const F_NOCACHE = 48;
+
+/// file offset to device offset
+pub const F_LOG2PHYS = 49;
+
+/// return the full path of the fd
+pub const F_GETPATH = 50;
+
+/// fsync + ask the drive to flush to the media
+pub const F_FULLFSYNC = 51;
+
+/// find which component (if any) is a package
+pub const F_PATHPKG_CHECK = 52;
+
+/// "freeze" all fs operations
+pub const F_FREEZE_FS = 53;
+
+/// "thaw" all fs operations
+pub const F_THAW_FS = 54;
+
+/// turn data caching off/on (globally) for this file
+pub const F_GLOBAL_NOCACHE = 55;
+
+/// add detached signatures
+pub const F_ADDSIGS = 59;
+
+/// add signature from same file (used by dyld for shared libs)
+pub const F_ADDFILESIGS = 61;
+
+/// used in conjunction with F_NOCACHE to indicate that DIRECT, synchonous writes
+/// should not be used (i.e. its ok to temporaily create cached pages)
+pub const F_NODIRECT = 62;
+
+///Get the protection class of a file from the EA, returns int
+pub const F_GETPROTECTIONCLASS = 63;
+
+///Set the protection class of a file for the EA, requires int
+pub const F_SETPROTECTIONCLASS = 64;
+
+///file offset to device offset, extended
+pub const F_LOG2PHYS_EXT = 65;
+
+///get record locking information, per-process
+pub const F_GETLKPID = 66;
+
+///Mark the file as being the backing store for another filesystem
+pub const F_SETBACKINGSTORE = 70;
+
+///return the full path of the FD, but error in specific mtmd circumstances
+pub const F_GETPATH_MTMINFO = 71;
+
+///Returns the code directory, with associated hashes, to the caller
+pub const F_GETCODEDIR = 72;
+
+///No SIGPIPE generated on EPIPE
+pub const F_SETNOSIGPIPE = 73;
+
+///Status of SIGPIPE for this fd
+pub const F_GETNOSIGPIPE = 74;
+
+///For some cases, we need to rewrap the key for AKS/MKB
+pub const F_TRANSCODEKEY = 75;
+
+///file being written to a by single writer... if throttling enabled, writes
+///may be broken into smaller chunks with throttling in between
+pub const F_SINGLE_WRITER = 76;
+
+///Get the protection version number for this filesystem
+pub const F_GETPROTECTIONLEVEL = 77;
+
+///Add detached code signatures (used by dyld for shared libs)
+pub const F_FINDSIGS = 78;
+
+///Add signature from same file, only if it is signed by Apple (used by dyld for simulator)
+pub const F_ADDFILESIGS_FOR_DYLD_SIM = 83;
+
+///fsync + issue barrier to drive
+pub const F_BARRIERFSYNC = 85;
+
+///Add signature from same file, return end offset in structure on success
+pub const F_ADDFILESIGS_RETURN = 97;
+
+///Check if Library Validation allows this Mach-O file to be mapped into the calling process
+pub const F_CHECK_LV = 98;
+
+///Deallocate a range of the file
+pub const F_PUNCHHOLE = 99;
+
+///Trim an active file
+pub const F_TRIM_ACTIVE_FILE = 100;
+
+pub const FCNTL_FS_SPECIFIC_BASE = 0x00010000;
+
+///mark the dup with FD_CLOEXEC
+pub const F_DUPFD_CLOEXEC = 67;
+
+///close-on-exec flag
+pub const FD_CLOEXEC = 1;
+
+/// shared or read lock
+pub const F_RDLCK = 1;
+
+/// unlock
+pub const F_UNLCK = 2;
+
+/// exclusive or write lock
+pub const F_WRLCK = 3;
+
+pub const LOCK_SH = 1;
+pub const LOCK_EX = 2;
+pub const LOCK_UN = 8;
+pub const LOCK_NB = 4;
+
+pub const nfds_t = u32;
+pub const pollfd = extern struct {
+ fd: fd_t,
+ events: i16,
+ revents: i16,
+};
+
+pub const POLLIN = 0x001;
+pub const POLLPRI = 0x002;
+pub const POLLOUT = 0x004;
+pub const POLLRDNORM = 0x040;
+pub const POLLWRNORM = POLLOUT;
+pub const POLLRDBAND = 0x080;
+pub const POLLWRBAND = 0x100;
+
+pub const POLLEXTEND = 0x0200;
+pub const POLLATTRIB = 0x0400;
+pub const POLLNLINK = 0x0800;
+pub const POLLWRITE = 0x1000;
+
+pub const POLLERR = 0x008;
+pub const POLLHUP = 0x010;
+pub const POLLNVAL = 0x020;
+
+pub const POLLSTANDARD = POLLIN | POLLPRI | POLLOUT | POLLRDNORM | POLLRDBAND | POLLWRBAND | POLLERR | POLLHUP | POLLNVAL;
+
+pub const CLOCK_REALTIME = 0;
+pub const CLOCK_MONOTONIC = 6;
+pub const CLOCK_MONOTONIC_RAW = 4;
+pub const CLOCK_MONOTONIC_RAW_APPROX = 5;
+pub const CLOCK_UPTIME_RAW = 8;
+pub const CLOCK_UPTIME_RAW_APPROX = 9;
+pub const CLOCK_PROCESS_CPUTIME_ID = 12;
+pub const CLOCK_THREAD_CPUTIME_ID = 16;
+
+/// Max open files per process
+/// https://opensource.apple.com/source/xnu/xnu-4903.221.2/bsd/sys/syslimits.h.auto.html
+pub const OPEN_MAX = 10240;
+pub const RUSAGE_SELF = 0;
+pub const RUSAGE_CHILDREN = -1;
+
+pub const rusage = extern struct {
+ utime: timeval,
+ stime: timeval,
+ maxrss: isize,
+ ixrss: isize,
+ idrss: isize,
+ isrss: isize,
+ minflt: isize,
+ majflt: isize,
+ nswap: isize,
+ inblock: isize,
+ oublock: isize,
+ msgsnd: isize,
+ msgrcv: isize,
+ nsignals: isize,
+ nvcsw: isize,
+ nivcsw: isize,
+};
+
+pub const rlimit_resource = enum(c_int) {
+ CPU = 0,
+ FSIZE = 1,
+ DATA = 2,
+ STACK = 3,
+ CORE = 4,
+ RSS = 5,
+ MEMLOCK = 6,
+ NPROC = 7,
+ NOFILE = 8,
+ _,
+
+ pub const AS: rlimit_resource = .RSS;
+};
+
+pub const rlim_t = u64;
+
+/// No limit
+pub const RLIM_INFINITY: rlim_t = (1 << 63) - 1;
+
+pub const RLIM_SAVED_MAX = RLIM_INFINITY;
+pub const RLIM_SAVED_CUR = RLIM_INFINITY;
+
+pub const rlimit = extern struct {
+ /// Soft limit
+ cur: rlim_t,
+ /// Hard limit
+ max: rlim_t,
+};
+
+pub const SHUT_RD = 0;
+pub const SHUT_WR = 1;
+pub const SHUT_RDWR = 2;
+
+// Term
+pub const VEOF = 0;
+pub const VEOL = 1;
+pub const VEOL2 = 2;
+pub const VERASE = 3;
+pub const VWERASE = 4;
+pub const VKILL = 5;
+pub const VREPRINT = 6;
+pub const VINTR = 8;
+pub const VQUIT = 9;
+pub const VSUSP = 10;
+pub const VDSUSP = 11;
+pub const VSTART = 12;
+pub const VSTOP = 13;
+pub const VLNEXT = 14;
+pub const VDISCARD = 15;
+pub const VMIN = 16;
+pub const VTIME = 17;
+pub const VSTATUS = 18;
+pub const NCCS = 20; // 2 spares (7, 19)
+
+pub const IGNBRK = 0x00000001; // ignore BREAK condition
+pub const BRKINT = 0x00000002; // map BREAK to SIGINTR
+pub const IGNPAR = 0x00000004; // ignore (discard) parity errors
+pub const PARMRK = 0x00000008; // mark parity and framing errors
+pub const INPCK = 0x00000010; // enable checking of parity errors
+pub const ISTRIP = 0x00000020; // strip 8th bit off chars
+pub const INLCR = 0x00000040; // map NL into CR
+pub const IGNCR = 0x00000080; // ignore CR
+pub const ICRNL = 0x00000100; // map CR to NL (ala CRMOD)
+pub const IXON = 0x00000200; // enable output flow control
+pub const IXOFF = 0x00000400; // enable input flow control
+pub const IXANY = 0x00000800; // any char will restart after stop
+pub const IMAXBEL = 0x00002000; // ring bell on input queue full
+pub const IUTF8 = 0x00004000; // maintain state for UTF-8 VERASE
+
+pub const OPOST = 0x00000001; //enable following output processing
+pub const ONLCR = 0x00000002; // map NL to CR-NL (ala CRMOD)
+pub const OXTABS = 0x00000004; // expand tabs to spaces
+pub const ONOEOT = 0x00000008; // discard EOT's (^D) on output)
+
+pub const OCRNL = 0x00000010; // map CR to NL on output
+pub const ONOCR = 0x00000020; // no CR output at column 0
+pub const ONLRET = 0x00000040; // NL performs CR function
+pub const OFILL = 0x00000080; // use fill characters for delay
+pub const NLDLY = 0x00000300; // \n delay
+pub const TABDLY = 0x00000c04; // horizontal tab delay
+pub const CRDLY = 0x00003000; // \r delay
+pub const FFDLY = 0x00004000; // form feed delay
+pub const BSDLY = 0x00008000; // \b delay
+pub const VTDLY = 0x00010000; // vertical tab delay
+pub const OFDEL = 0x00020000; // fill is DEL, else NUL
+
+pub const NL0 = 0x00000000;
+pub const NL1 = 0x00000100;
+pub const NL2 = 0x00000200;
+pub const NL3 = 0x00000300;
+pub const TAB0 = 0x00000000;
+pub const TAB1 = 0x00000400;
+pub const TAB2 = 0x00000800;
+pub const TAB3 = 0x00000004;
+pub const CR0 = 0x00000000;
+pub const CR1 = 0x00001000;
+pub const CR2 = 0x00002000;
+pub const CR3 = 0x00003000;
+pub const FF0 = 0x00000000;
+pub const FF1 = 0x00004000;
+pub const BS0 = 0x00000000;
+pub const BS1 = 0x00008000;
+pub const VT0 = 0x00000000;
+pub const VT1 = 0x00010000;
+
+pub const CIGNORE = 0x00000001; // ignore control flags
+pub const CSIZE = 0x00000300; // character size mask
+pub const CS5 = 0x00000000; // 5 bits (pseudo)
+pub const CS6 = 0x00000100; // 6 bits
+pub const CS7 = 0x00000200; // 7 bits
+pub const CS8 = 0x00000300; // 8 bits
+pub const CSTOPB = 0x0000040; // send 2 stop bits
+pub const CREAD = 0x00000800; // enable receiver
+pub const PARENB = 0x00001000; // parity enable
+pub const PARODD = 0x00002000; // odd parity, else even
+pub const HUPCL = 0x00004000; // hang up on last close
+pub const CLOCAL = 0x00008000; // ignore modem status lines
+pub const CCTS_OFLOW = 0x00010000; // CTS flow control of output
+pub const CRTSCTS = (CCTS_OFLOW | CRTS_IFLOW);
+pub const CRTS_IFLOW = 0x00020000; // RTS flow control of input
+pub const CDTR_IFLOW = 0x00040000; // DTR flow control of input
+pub const CDSR_OFLOW = 0x00080000; // DSR flow control of output
+pub const CCAR_OFLOW = 0x00100000; // DCD flow control of output
+pub const MDMBUF = 0x00100000; // old name for CCAR_OFLOW
+
+pub const ECHOKE = 0x00000001; // visual erase for line kill
+pub const ECHOE = 0x00000002; // visually erase chars
+pub const ECHOK = 0x00000004; // echo NL after line kill
+pub const ECHO = 0x00000008; // enable echoing
+pub const ECHONL = 0x00000010; // echo NL even if ECHO is off
+pub const ECHOPRT = 0x00000020; // visual erase mode for hardcopy
+pub const ECHOCTL = 0x00000040; // echo control chars as ^(Char)
+pub const ISIG = 0x00000080; // enable signals INTR, QUIT, [D]SUSP
+pub const ICANON = 0x00000100; // canonicalize input lines
+pub const ALTWERASE = 0x00000200; // use alternate WERASE algorithm
+pub const IEXTEN = 0x00000400; // enable DISCARD and LNEXT
+pub const EXTPROC = 0x00000800; // external processing
+pub const TOSTOP = 0x00400000; // stop background jobs from output
+pub const FLUSHO = 0x00800000; // output being flushed (state)
+pub const NOKERNINFO = 0x02000000; // no kernel output from VSTATUS
+pub const PENDIN = 0x20000000; // XXX retype pending input (state)
+pub const NOFLSH = 0x80000000; // don't flush after interrupt
+
+pub const TCSANOW = 0; // make change immediate
+pub const TCSADRAIN = 1; // drain output, then change
+pub const TCSAFLUSH = 2; // drain output, flush input
+pub const TCSASOFT = 0x10; // flag - don't alter h.w. state
+pub const TCSA = enum(c_uint) {
+ NOW,
+ DRAIN,
+ FLUSH,
+ _,
+};
+
+pub const B0 = 0;
+pub const B50 = 50;
+pub const B75 = 75;
+pub const B110 = 110;
+pub const B134 = 134;
+pub const B150 = 150;
+pub const B200 = 200;
+pub const B300 = 300;
+pub const B600 = 600;
+pub const B1200 = 1200;
+pub const B1800 = 1800;
+pub const B2400 = 2400;
+pub const B4800 = 4800;
+pub const B9600 = 9600;
+pub const B19200 = 19200;
+pub const B38400 = 38400;
+pub const B7200 = 7200;
+pub const B14400 = 14400;
+pub const B28800 = 28800;
+pub const B57600 = 57600;
+pub const B76800 = 76800;
+pub const B115200 = 115200;
+pub const B230400 = 230400;
+pub const EXTA = 19200;
+pub const EXTB = 38400;
+
+pub const TCIFLUSH = 1;
+pub const TCOFLUSH = 2;
+pub const TCIOFLUSH = 3;
+pub const TCOOFF = 1;
+pub const TCOON = 2;
+pub const TCIOFF = 3;
+pub const TCION = 4;
+
+pub const cc_t = u8;
+pub const speed_t = u64;
+pub const tcflag_t = u64;
+
+pub const termios = extern struct {
+ iflag: tcflag_t, // input flags
+ oflag: tcflag_t, // output flags
+ cflag: tcflag_t, // control flags
+ lflag: tcflag_t, // local flags
+ cc: [NCCS]cc_t, // control chars
+ ispeed: speed_t align(8), // input speed
+ ospeed: speed_t, // output speed
+};
+
+pub const winsize = extern struct {
+ ws_row: u16,
+ ws_col: u16,
+ ws_xpixel: u16,
+ ws_ypixel: u16,
+};
+
+pub const TIOCGWINSZ = ior(0x40000000, 't', 104, @sizeOf(winsize));
+pub const IOCPARM_MASK = 0x1fff;
+
+fn ior(inout: u32, group: usize, num: usize, len: usize) usize {
+ return (inout | ((len & IOCPARM_MASK) << 16) | ((group) << 8) | (num));
+}
+
+// CPU families mapping
+pub const CPUFAMILY = enum(u32) {
+ UNKNOWN = 0,
+ POWERPC_G3 = 0xcee41549,
+ POWERPC_G4 = 0x77c184ae,
+ POWERPC_G5 = 0xed76d8aa,
+ INTEL_6_13 = 0xaa33392b,
+ INTEL_PENRYN = 0x78ea4fbc,
+ INTEL_NEHALEM = 0x6b5a4cd2,
+ INTEL_WESTMERE = 0x573b5eec,
+ INTEL_SANDYBRIDGE = 0x5490b78c,
+ INTEL_IVYBRIDGE = 0x1f65e835,
+ INTEL_HASWELL = 0x10b282dc,
+ INTEL_BROADWELL = 0x582ed09c,
+ INTEL_SKYLAKE = 0x37fc219f,
+ INTEL_KABYLAKE = 0x0f817246,
+ ARM_9 = 0xe73283ae,
+ ARM_11 = 0x8ff620d8,
+ ARM_XSCALE = 0x53b005f5,
+ ARM_12 = 0xbd1b0ae9,
+ ARM_13 = 0x0cc90e64,
+ ARM_14 = 0x96077ef1,
+ ARM_15 = 0xa8511bca,
+ ARM_SWIFT = 0x1e2d6381,
+ ARM_CYCLONE = 0x37a09642,
+ ARM_TYPHOON = 0x2c91a47e,
+ ARM_TWISTER = 0x92fb37c8,
+ ARM_HURRICANE = 0x67ceee93,
+ ARM_MONSOON_MISTRAL = 0xe81e7ef6,
+ ARM_VORTEX_TEMPEST = 0x07d34b9f,
+ ARM_LIGHTNING_THUNDER = 0x462504d2,
+ ARM_FIRESTORM_ICESTORM = 0x1b588bb3,
+ _,
+};
diff --git a/lib/std/c/dragonfly.zig b/lib/std/c/dragonfly.zig
index e5786d2bd4..694fe4b170 100644
--- a/lib/std/c/dragonfly.zig
+++ b/lib/std/c/dragonfly.zig
@@ -1,5 +1,6 @@
const std = @import("../std.zig");
-usingnamespace std.c;
+const maxInt = std.math.maxInt;
+
extern "c" threadlocal var errno: c_int;
pub fn _errno() *c_int {
return &errno;
@@ -30,3 +31,1032 @@ pub const pthread_attr_t = extern struct { // copied from freebsd
};
pub const sem_t = ?*opaque {};
+
+pub fn S_ISCHR(m: u32) bool {
+ return m & S_IFMT == S_IFCHR;
+}
+
+// See:
+// - https://gitweb.dragonflybsd.org/dragonfly.git/blob/HEAD:/include/unistd.h
+// - https://gitweb.dragonflybsd.org/dragonfly.git/blob/HEAD:/sys/sys/types.h
+// TODO: mode_t should probably be changed to a u16, audit pid_t/off_t as well
+pub const fd_t = c_int;
+pub const pid_t = c_int;
+pub const off_t = c_long;
+pub const mode_t = c_uint;
+pub const uid_t = u32;
+pub const gid_t = u32;
+pub const time_t = isize;
+pub const suseconds_t = c_long;
+
+pub const E = enum(u16) {
+ /// No error occurred.
+ SUCCESS = 0,
+
+ PERM = 1,
+ NOENT = 2,
+ SRCH = 3,
+ INTR = 4,
+ IO = 5,
+ NXIO = 6,
+ @"2BIG" = 7,
+ NOEXEC = 8,
+ BADF = 9,
+ CHILD = 10,
+ DEADLK = 11,
+ NOMEM = 12,
+ ACCES = 13,
+ FAULT = 14,
+ NOTBLK = 15,
+ BUSY = 16,
+ EXIST = 17,
+ XDEV = 18,
+ NODEV = 19,
+ NOTDIR = 20,
+ ISDIR = 21,
+ INVAL = 22,
+ NFILE = 23,
+ MFILE = 24,
+ NOTTY = 25,
+ TXTBSY = 26,
+ FBIG = 27,
+ NOSPC = 28,
+ SPIPE = 29,
+ ROFS = 30,
+ MLINK = 31,
+ PIPE = 32,
+ DOM = 33,
+ RANGE = 34,
+ /// This code is also used for `WOULDBLOCK`.
+ AGAIN = 35,
+ INPROGRESS = 36,
+ ALREADY = 37,
+ NOTSOCK = 38,
+ DESTADDRREQ = 39,
+ MSGSIZE = 40,
+ PROTOTYPE = 41,
+ NOPROTOOPT = 42,
+ PROTONOSUPPORT = 43,
+ SOCKTNOSUPPORT = 44,
+ /// This code is also used for `NOTSUP`.
+ OPNOTSUPP = 45,
+ PFNOSUPPORT = 46,
+ AFNOSUPPORT = 47,
+ ADDRINUSE = 48,
+ ADDRNOTAVAIL = 49,
+ NETDOWN = 50,
+ NETUNREACH = 51,
+ NETRESET = 52,
+ CONNABORTED = 53,
+ CONNRESET = 54,
+ NOBUFS = 55,
+ ISCONN = 56,
+ NOTCONN = 57,
+ SHUTDOWN = 58,
+ TOOMANYREFS = 59,
+ TIMEDOUT = 60,
+ CONNREFUSED = 61,
+ LOOP = 62,
+ NAMETOOLONG = 63,
+ HOSTDOWN = 64,
+ HOSTUNREACH = 65,
+ NOTEMPTY = 66,
+ PROCLIM = 67,
+ USERS = 68,
+ DQUOT = 69,
+ STALE = 70,
+ REMOTE = 71,
+ BADRPC = 72,
+ RPCMISMATCH = 73,
+ PROGUNAVAIL = 74,
+ PROGMISMATCH = 75,
+ PROCUNAVAIL = 76,
+ NOLCK = 77,
+ NOSYS = 78,
+ FTYPE = 79,
+ AUTH = 80,
+ NEEDAUTH = 81,
+ IDRM = 82,
+ NOMSG = 83,
+ OVERFLOW = 84,
+ CANCELED = 85,
+ ILSEQ = 86,
+ NOATTR = 87,
+ DOOFUS = 88,
+ BADMSG = 89,
+ MULTIHOP = 90,
+ NOLINK = 91,
+ PROTO = 92,
+ NOMEDIUM = 93,
+ ASYNC = 99,
+ _,
+};
+
+pub const STDIN_FILENO = 0;
+pub const STDOUT_FILENO = 1;
+pub const STDERR_FILENO = 2;
+
+pub const PROT_NONE = 0;
+pub const PROT_READ = 1;
+pub const PROT_WRITE = 2;
+pub const PROT_EXEC = 4;
+
+pub const MAP_FILE = 0;
+pub const MAP_FAILED = @intToPtr(*c_void, maxInt(usize));
+pub const MAP_ANONYMOUS = MAP_ANON;
+pub const MAP_COPY = MAP_PRIVATE;
+pub const MAP_SHARED = 1;
+pub const MAP_PRIVATE = 2;
+pub const MAP_FIXED = 16;
+pub const MAP_RENAME = 32;
+pub const MAP_NORESERVE = 64;
+pub const MAP_INHERIT = 128;
+pub const MAP_NOEXTEND = 256;
+pub const MAP_HASSEMAPHORE = 512;
+pub const MAP_STACK = 1024;
+pub const MAP_NOSYNC = 2048;
+pub const MAP_ANON = 4096;
+pub const MAP_VPAGETABLE = 8192;
+pub const MAP_TRYFIXED = 65536;
+pub const MAP_NOCORE = 131072;
+pub const MAP_SIZEALIGN = 262144;
+
+pub const WNOHANG = 0x0001;
+pub const WUNTRACED = 0x0002;
+pub const WCONTINUED = 0x0004;
+pub const WSTOPPED = WUNTRACED;
+pub const WNOWAIT = 0x0008;
+pub const WEXITED = 0x0010;
+pub const WTRAPPED = 0x0020;
+
+pub const SA_ONSTACK = 0x0001;
+pub const SA_RESTART = 0x0002;
+pub const SA_RESETHAND = 0x0004;
+pub const SA_NODEFER = 0x0010;
+pub const SA_NOCLDWAIT = 0x0020;
+pub const SA_SIGINFO = 0x0040;
+
+pub const PATH_MAX = 1024;
+pub const IOV_MAX = KERN_IOV_MAX;
+
+pub const ino_t = c_ulong;
+
+pub const Stat = extern struct {
+ ino: ino_t,
+ nlink: c_uint,
+ dev: c_uint,
+ mode: c_ushort,
+ padding1: u16,
+ uid: uid_t,
+ gid: gid_t,
+ rdev: c_uint,
+ atim: timespec,
+ mtim: timespec,
+ ctim: timespec,
+ size: c_ulong,
+ blocks: i64,
+ blksize: u32,
+ flags: u32,
+ gen: u32,
+ lspare: i32,
+ qspare1: i64,
+ qspare2: i64,
+ pub fn atime(self: @This()) timespec {
+ return self.atim;
+ }
+
+ pub fn mtime(self: @This()) timespec {
+ return self.mtim;
+ }
+
+ pub fn ctime(self: @This()) timespec {
+ return self.ctim;
+ }
+};
+
+pub const timespec = extern struct {
+ tv_sec: c_long,
+ tv_nsec: c_long,
+};
+
+pub const timeval = extern struct {
+ /// seconds
+ tv_sec: time_t,
+ /// microseconds
+ tv_usec: suseconds_t,
+};
+
+pub const CTL_UNSPEC = 0;
+pub const CTL_KERN = 1;
+pub const CTL_VM = 2;
+pub const CTL_VFS = 3;
+pub const CTL_NET = 4;
+pub const CTL_DEBUG = 5;
+pub const CTL_HW = 6;
+pub const CTL_MACHDEP = 7;
+pub const CTL_USER = 8;
+pub const CTL_LWKT = 10;
+pub const CTL_MAXID = 11;
+pub const CTL_MAXNAME = 12;
+
+pub const KERN_PROC_ALL = 0;
+pub const KERN_OSTYPE = 1;
+pub const KERN_PROC_PID = 1;
+pub const KERN_OSRELEASE = 2;
+pub const KERN_PROC_PGRP = 2;
+pub const KERN_OSREV = 3;
+pub const KERN_PROC_SESSION = 3;
+pub const KERN_VERSION = 4;
+pub const KERN_PROC_TTY = 4;
+pub const KERN_MAXVNODES = 5;
+pub const KERN_PROC_UID = 5;
+pub const KERN_MAXPROC = 6;
+pub const KERN_PROC_RUID = 6;
+pub const KERN_MAXFILES = 7;
+pub const KERN_PROC_ARGS = 7;
+pub const KERN_ARGMAX = 8;
+pub const KERN_PROC_CWD = 8;
+pub const KERN_PROC_PATHNAME = 9;
+pub const KERN_SECURELVL = 9;
+pub const KERN_PROC_SIGTRAMP = 10;
+pub const KERN_HOSTNAME = 10;
+pub const KERN_HOSTID = 11;
+pub const KERN_CLOCKRATE = 12;
+pub const KERN_VNODE = 13;
+pub const KERN_PROC = 14;
+pub const KERN_FILE = 15;
+pub const KERN_PROC_FLAGMASK = 16;
+pub const KERN_PROF = 16;
+pub const KERN_PROC_FLAG_LWP = 16;
+pub const KERN_POSIX1 = 17;
+pub const KERN_NGROUPS = 18;
+pub const KERN_JOB_CONTROL = 19;
+pub const KERN_SAVED_IDS = 20;
+pub const KERN_BOOTTIME = 21;
+pub const KERN_NISDOMAINNAME = 22;
+pub const KERN_UPDATEINTERVAL = 23;
+pub const KERN_OSRELDATE = 24;
+pub const KERN_NTP_PLL = 25;
+pub const KERN_BOOTFILE = 26;
+pub const KERN_MAXFILESPERPROC = 27;
+pub const KERN_MAXPROCPERUID = 28;
+pub const KERN_DUMPDEV = 29;
+pub const KERN_IPC = 30;
+pub const KERN_DUMMY = 31;
+pub const KERN_PS_STRINGS = 32;
+pub const KERN_USRSTACK = 33;
+pub const KERN_LOGSIGEXIT = 34;
+pub const KERN_IOV_MAX = 35;
+pub const KERN_MAXPOSIXLOCKSPERUID = 36;
+pub const KERN_MAXID = 37;
+
+pub const HOST_NAME_MAX = 255;
+
+// access function
+pub const F_OK = 0; // test for existence of file
+pub const X_OK = 1; // test for execute or search permission
+pub const W_OK = 2; // test for write permission
+pub const R_OK = 4; // test for read permission
+
+pub const O_RDONLY = 0;
+pub const O_NDELAY = O_NONBLOCK;
+pub const O_WRONLY = 1;
+pub const O_RDWR = 2;
+pub const O_ACCMODE = 3;
+pub const O_NONBLOCK = 4;
+pub const O_APPEND = 8;
+pub const O_SHLOCK = 16;
+pub const O_EXLOCK = 32;
+pub const O_ASYNC = 64;
+pub const O_FSYNC = 128;
+pub const O_SYNC = 128;
+pub const O_NOFOLLOW = 256;
+pub const O_CREAT = 512;
+pub const O_TRUNC = 1024;
+pub const O_EXCL = 2048;
+pub const O_NOCTTY = 32768;
+pub const O_DIRECT = 65536;
+pub const O_CLOEXEC = 131072;
+pub const O_FBLOCKING = 262144;
+pub const O_FNONBLOCKING = 524288;
+pub const O_FAPPEND = 1048576;
+pub const O_FOFFSET = 2097152;
+pub const O_FSYNCWRITE = 4194304;
+pub const O_FASYNCWRITE = 8388608;
+pub const O_DIRECTORY = 134217728;
+
+pub const SEEK_SET = 0;
+pub const SEEK_CUR = 1;
+pub const SEEK_END = 2;
+pub const SEEK_DATA = 3;
+pub const SEEK_HOLE = 4;
+
+pub const F_ULOCK = 0;
+pub const F_LOCK = 1;
+pub const F_TLOCK = 2;
+pub const F_TEST = 3;
+
+pub const FD_CLOEXEC = 1;
+
+pub const AT_FDCWD = -328243;
+pub const AT_SYMLINK_NOFOLLOW = 1;
+pub const AT_REMOVEDIR = 2;
+pub const AT_EACCESS = 4;
+pub const AT_SYMLINK_FOLLOW = 8;
+
+pub fn WEXITSTATUS(s: u32) u8 {
+ return @intCast(u8, (s & 0xff00) >> 8);
+}
+pub fn WTERMSIG(s: u32) u32 {
+ return s & 0x7f;
+}
+pub fn WSTOPSIG(s: u32) u32 {
+ return WEXITSTATUS(s);
+}
+pub fn WIFEXITED(s: u32) bool {
+ return WTERMSIG(s) == 0;
+}
+pub fn WIFSTOPPED(s: u32) bool {
+ return @intCast(u16, (((s & 0xffff) *% 0x10001) >> 8)) > 0x7f00;
+}
+pub fn WIFSIGNALED(s: u32) bool {
+ return (s & 0xffff) -% 1 < 0xff;
+}
+
+pub const dirent = extern struct {
+ d_fileno: c_ulong,
+ d_namlen: u16,
+ d_type: u8,
+ d_unused1: u8,
+ d_unused2: u32,
+ d_name: [256]u8,
+
+ pub fn reclen(self: dirent) u16 {
+ return (@offsetOf(dirent, "d_name") + self.d_namlen + 1 + 7) & ~@as(u16, 7);
+ }
+};
+
+pub const DT_UNKNOWN = 0;
+pub const DT_FIFO = 1;
+pub const DT_CHR = 2;
+pub const DT_DIR = 4;
+pub const DT_BLK = 6;
+pub const DT_REG = 8;
+pub const DT_LNK = 10;
+pub const DT_SOCK = 12;
+pub const DT_WHT = 14;
+pub const DT_DBF = 15;
+
+pub const CLOCK_REALTIME = 0;
+pub const CLOCK_VIRTUAL = 1;
+pub const CLOCK_PROF = 2;
+pub const CLOCK_MONOTONIC = 4;
+pub const CLOCK_UPTIME = 5;
+pub const CLOCK_UPTIME_PRECISE = 7;
+pub const CLOCK_UPTIME_FAST = 8;
+pub const CLOCK_REALTIME_PRECISE = 9;
+pub const CLOCK_REALTIME_FAST = 10;
+pub const CLOCK_MONOTONIC_PRECISE = 11;
+pub const CLOCK_MONOTONIC_FAST = 12;
+pub const CLOCK_SECOND = 13;
+pub const CLOCK_THREAD_CPUTIME_ID = 14;
+pub const CLOCK_PROCESS_CPUTIME_ID = 15;
+
+pub const sockaddr = extern struct {
+ len: u8,
+ family: u8,
+ data: [14]u8,
+};
+
+pub const sockaddr_storage = std.x.os.Socket.Address.Native.Storage;
+
+pub const Kevent = extern struct {
+ ident: usize,
+ filter: c_short,
+ flags: c_ushort,
+ fflags: c_uint,
+ data: isize,
+ udata: usize,
+};
+
+pub const EVFILT_FS = -10;
+pub const EVFILT_USER = -9;
+pub const EVFILT_EXCEPT = -8;
+pub const EVFILT_TIMER = -7;
+pub const EVFILT_SIGNAL = -6;
+pub const EVFILT_PROC = -5;
+pub const EVFILT_VNODE = -4;
+pub const EVFILT_AIO = -3;
+pub const EVFILT_WRITE = -2;
+pub const EVFILT_READ = -1;
+pub const EVFILT_SYSCOUNT = 10;
+pub const EVFILT_MARKER = 15;
+
+pub const EV_ADD = 1;
+pub const EV_DELETE = 2;
+pub const EV_ENABLE = 4;
+pub const EV_DISABLE = 8;
+pub const EV_ONESHOT = 16;
+pub const EV_CLEAR = 32;
+pub const EV_RECEIPT = 64;
+pub const EV_DISPATCH = 128;
+pub const EV_NODATA = 4096;
+pub const EV_FLAG1 = 8192;
+pub const EV_ERROR = 16384;
+pub const EV_EOF = 32768;
+pub const EV_SYSFLAGS = 61440;
+
+pub const NOTE_FFNOP = 0;
+pub const NOTE_TRACK = 1;
+pub const NOTE_DELETE = 1;
+pub const NOTE_LOWAT = 1;
+pub const NOTE_TRACKERR = 2;
+pub const NOTE_OOB = 2;
+pub const NOTE_WRITE = 2;
+pub const NOTE_EXTEND = 4;
+pub const NOTE_CHILD = 4;
+pub const NOTE_ATTRIB = 8;
+pub const NOTE_LINK = 16;
+pub const NOTE_RENAME = 32;
+pub const NOTE_REVOKE = 64;
+pub const NOTE_PDATAMASK = 1048575;
+pub const NOTE_FFLAGSMASK = 16777215;
+pub const NOTE_TRIGGER = 16777216;
+pub const NOTE_EXEC = 536870912;
+pub const NOTE_FFAND = 1073741824;
+pub const NOTE_FORK = 1073741824;
+pub const NOTE_EXIT = 2147483648;
+pub const NOTE_FFOR = 2147483648;
+pub const NOTE_FFCTRLMASK = 3221225472;
+pub const NOTE_FFCOPY = 3221225472;
+pub const NOTE_PCTRLMASK = 4026531840;
+
+pub const stack_t = extern struct {
+ ss_sp: [*]u8,
+ ss_size: isize,
+ ss_flags: i32,
+};
+
+pub const S_IREAD = S_IRUSR;
+pub const S_IEXEC = S_IXUSR;
+pub const S_IWRITE = S_IWUSR;
+pub const S_IXOTH = 1;
+pub const S_IWOTH = 2;
+pub const S_IROTH = 4;
+pub const S_IRWXO = 7;
+pub const S_IXGRP = 8;
+pub const S_IWGRP = 16;
+pub const S_IRGRP = 32;
+pub const S_IRWXG = 56;
+pub const S_IXUSR = 64;
+pub const S_IWUSR = 128;
+pub const S_IRUSR = 256;
+pub const S_IRWXU = 448;
+pub const S_ISTXT = 512;
+pub const S_BLKSIZE = 512;
+pub const S_ISVTX = 512;
+pub const S_ISGID = 1024;
+pub const S_ISUID = 2048;
+pub const S_IFIFO = 4096;
+pub const S_IFCHR = 8192;
+pub const S_IFDIR = 16384;
+pub const S_IFBLK = 24576;
+pub const S_IFREG = 32768;
+pub const S_IFDB = 36864;
+pub const S_IFLNK = 40960;
+pub const S_IFSOCK = 49152;
+pub const S_IFWHT = 57344;
+pub const S_IFMT = 61440;
+
+pub const SIG_DFL = @intToPtr(?Sigaction.sigaction_fn, 0);
+pub const SIG_IGN = @intToPtr(?Sigaction.sigaction_fn, 1);
+pub const SIG_ERR = @intToPtr(?Sigaction.sigaction_fn, maxInt(usize));
+pub const BADSIG = SIG_ERR;
+
+pub const SIG_BLOCK = 1;
+pub const SIG_UNBLOCK = 2;
+pub const SIG_SETMASK = 3;
+
+pub const SIGIOT = SIGABRT;
+pub const SIGHUP = 1;
+pub const SIGINT = 2;
+pub const SIGQUIT = 3;
+pub const SIGILL = 4;
+pub const SIGTRAP = 5;
+pub const SIGABRT = 6;
+pub const SIGEMT = 7;
+pub const SIGFPE = 8;
+pub const SIGKILL = 9;
+pub const SIGBUS = 10;
+pub const SIGSEGV = 11;
+pub const SIGSYS = 12;
+pub const SIGPIPE = 13;
+pub const SIGALRM = 14;
+pub const SIGTERM = 15;
+pub const SIGURG = 16;
+pub const SIGSTOP = 17;
+pub const SIGTSTP = 18;
+pub const SIGCONT = 19;
+pub const SIGCHLD = 20;
+pub const SIGTTIN = 21;
+pub const SIGTTOU = 22;
+pub const SIGIO = 23;
+pub const SIGXCPU = 24;
+pub const SIGXFSZ = 25;
+pub const SIGVTALRM = 26;
+pub const SIGPROF = 27;
+pub const SIGWINCH = 28;
+pub const SIGINFO = 29;
+pub const SIGUSR1 = 30;
+pub const SIGUSR2 = 31;
+pub const SIGTHR = 32;
+pub const SIGCKPT = 33;
+pub const SIGCKPTEXIT = 34;
+
+pub const siginfo_t = extern struct {
+ signo: c_int,
+ errno: c_int,
+ code: c_int,
+ pid: c_int,
+ uid: uid_t,
+ status: c_int,
+ addr: ?*c_void,
+ value: sigval,
+ band: c_long,
+ __spare__: [7]c_int,
+};
+
+pub const sigval = extern union {
+ sival_int: c_int,
+ sival_ptr: ?*c_void,
+};
+
+pub const _SIG_WORDS = 4;
+
+pub const sigset_t = extern struct {
+ __bits: [_SIG_WORDS]c_uint,
+};
+
+pub const empty_sigset = sigset_t{ .__bits = [_]c_uint{0} ** _SIG_WORDS };
+
+pub const sig_atomic_t = c_int;
+
+pub const Sigaction = extern struct {
+ pub const handler_fn = fn (c_int) callconv(.C) void;
+ pub const sigaction_fn = fn (c_int, *const siginfo_t, ?*const c_void) callconv(.C) void;
+
+ /// signal handler
+ handler: extern union {
+ handler: ?handler_fn,
+ sigaction: ?sigaction_fn,
+ },
+ flags: c_uint,
+ mask: sigset_t,
+};
+
+pub const sig_t = [*c]fn (c_int) callconv(.C) void;
+
+pub const SOCK_STREAM = 1;
+pub const SOCK_DGRAM = 2;
+pub const SOCK_RAW = 3;
+pub const SOCK_RDM = 4;
+pub const SOCK_SEQPACKET = 5;
+pub const SOCK_MAXADDRLEN = 255;
+pub const SOCK_CLOEXEC = 0x10000000;
+pub const SOCK_NONBLOCK = 0x20000000;
+
+pub const SO_DEBUG = 0x0001;
+pub const SO_ACCEPTCONN = 0x0002;
+pub const SO_REUSEADDR = 0x0004;
+pub const SO_KEEPALIVE = 0x0008;
+pub const SO_DONTROUTE = 0x0010;
+pub const SO_BROADCAST = 0x0020;
+pub const SO_USELOOPBACK = 0x0040;
+pub const SO_LINGER = 0x0080;
+pub const SO_OOBINLINE = 0x0100;
+pub const SO_REUSEPORT = 0x0200;
+pub const SO_TIMESTAMP = 0x0400;
+pub const SO_NOSIGPIPE = 0x0800;
+pub const SO_ACCEPTFILTER = 0x1000;
+pub const SO_RERROR = 0x2000;
+pub const SO_PASSCRED = 0x4000;
+
+pub const SO_SNDBUF = 0x1001;
+pub const SO_RCVBUF = 0x1002;
+pub const SO_SNDLOWAT = 0x1003;
+pub const SO_RCVLOWAT = 0x1004;
+pub const SO_SNDTIMEO = 0x1005;
+pub const SO_RCVTIMEO = 0x1006;
+pub const SO_ERROR = 0x1007;
+pub const SO_TYPE = 0x1008;
+pub const SO_SNDSPACE = 0x100a;
+pub const SO_CPUHINT = 0x1030;
+
+pub const SOL_SOCKET = 0xffff;
+
+pub const PF_INET6 = AF_INET6;
+pub const PF_IMPLINK = AF_IMPLINK;
+pub const PF_ROUTE = AF_ROUTE;
+pub const PF_ISO = AF_ISO;
+pub const PF_PIP = pseudo_AF_PIP;
+pub const PF_CHAOS = AF_CHAOS;
+pub const PF_DATAKIT = AF_DATAKIT;
+pub const PF_INET = AF_INET;
+pub const PF_APPLETALK = AF_APPLETALK;
+pub const PF_SIP = AF_SIP;
+pub const PF_OSI = AF_ISO;
+pub const PF_CNT = AF_CNT;
+pub const PF_LINK = AF_LINK;
+pub const PF_HYLINK = AF_HYLINK;
+pub const PF_MAX = AF_MAX;
+pub const PF_KEY = pseudo_AF_KEY;
+pub const PF_PUP = AF_PUP;
+pub const PF_COIP = AF_COIP;
+pub const PF_SNA = AF_SNA;
+pub const PF_LOCAL = AF_LOCAL;
+pub const PF_NETBIOS = AF_NETBIOS;
+pub const PF_NATM = AF_NATM;
+pub const PF_BLUETOOTH = AF_BLUETOOTH;
+pub const PF_UNSPEC = AF_UNSPEC;
+pub const PF_NETGRAPH = AF_NETGRAPH;
+pub const PF_ECMA = AF_ECMA;
+pub const PF_IPX = AF_IPX;
+pub const PF_DLI = AF_DLI;
+pub const PF_ATM = AF_ATM;
+pub const PF_CCITT = AF_CCITT;
+pub const PF_ISDN = AF_ISDN;
+pub const PF_RTIP = pseudo_AF_RTIP;
+pub const PF_LAT = AF_LAT;
+pub const PF_UNIX = PF_LOCAL;
+pub const PF_XTP = pseudo_AF_XTP;
+pub const PF_DECnet = AF_DECnet;
+
+pub const AF_UNSPEC = 0;
+pub const AF_OSI = AF_ISO;
+pub const AF_UNIX = AF_LOCAL;
+pub const AF_LOCAL = 1;
+pub const AF_INET = 2;
+pub const AF_IMPLINK = 3;
+pub const AF_PUP = 4;
+pub const AF_CHAOS = 5;
+pub const AF_NETBIOS = 6;
+pub const AF_ISO = 7;
+pub const AF_ECMA = 8;
+pub const AF_DATAKIT = 9;
+pub const AF_CCITT = 10;
+pub const AF_SNA = 11;
+pub const AF_DLI = 13;
+pub const AF_LAT = 14;
+pub const AF_HYLINK = 15;
+pub const AF_APPLETALK = 16;
+pub const AF_ROUTE = 17;
+pub const AF_LINK = 18;
+pub const AF_COIP = 20;
+pub const AF_CNT = 21;
+pub const AF_IPX = 23;
+pub const AF_SIP = 24;
+pub const AF_ISDN = 26;
+pub const AF_INET6 = 28;
+pub const AF_NATM = 29;
+pub const AF_ATM = 30;
+pub const AF_NETGRAPH = 32;
+pub const AF_BLUETOOTH = 33;
+pub const AF_MPLS = 34;
+pub const AF_MAX = 36;
+
+pub const in_port_t = u16;
+pub const sa_family_t = u8;
+pub const socklen_t = u32;
+
+pub const sockaddr_in = extern struct {
+ len: u8 = @sizeOf(sockaddr_in),
+ family: sa_family_t = AF_INET,
+ port: in_port_t,
+ addr: u32,
+ zero: [8]u8 = [8]u8{ 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+
+pub const sockaddr_in6 = extern struct {
+ len: u8 = @sizeOf(sockaddr_in6),
+ family: sa_family_t = AF_INET6,
+ port: in_port_t,
+ flowinfo: u32,
+ addr: [16]u8,
+ scope_id: u32,
+};
+
+pub const EAI = enum(c_int) {
+ ADDRFAMILY = 1,
+ AGAIN = 2,
+ BADFLAGS = 3,
+ FAIL = 4,
+ FAMILY = 5,
+ MEMORY = 6,
+ NODATA = 7,
+ NONAME = 8,
+ SERVICE = 9,
+ SOCKTYPE = 10,
+ SYSTEM = 11,
+ BADHINTS = 12,
+ PROTOCOL = 13,
+ OVERFLOW = 14,
+ _,
+};
+
+pub const AI_PASSIVE = 0x00000001;
+pub const AI_CANONNAME = 0x00000002;
+pub const AI_NUMERICHOST = 0x00000004;
+pub const AI_NUMERICSERV = 0x00000008;
+pub const AI_MASK = AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST | AI_NUMERICSERV | AI_ADDRCONFIG;
+pub const AI_ALL = 0x00000100;
+pub const AI_V4MAPPED_CFG = 0x00000200;
+pub const AI_ADDRCONFIG = 0x00000400;
+pub const AI_V4MAPPED = 0x00000800;
+pub const AI_DEFAULT = AI_V4MAPPED_CFG | AI_ADDRCONFIG;
+
+pub const RTLD_LAZY = 1;
+pub const RTLD_NOW = 2;
+pub const RTLD_MODEMASK = 0x3;
+pub const RTLD_GLOBAL = 0x100;
+pub const RTLD_LOCAL = 0;
+pub const RTLD_TRACE = 0x200;
+pub const RTLD_NODELETE = 0x01000;
+pub const RTLD_NOLOAD = 0x02000;
+
+pub const RTLD_NEXT = @intToPtr(*c_void, @bitCast(usize, @as(isize, -1)));
+pub const RTLD_DEFAULT = @intToPtr(*c_void, @bitCast(usize, @as(isize, -2)));
+pub const RTLD_SELF = @intToPtr(*c_void, @bitCast(usize, @as(isize, -3)));
+pub const RTLD_ALL = @intToPtr(*c_void, @bitCast(usize, @as(isize, -4)));
+
+pub const dl_phdr_info = extern struct {
+ dlpi_addr: usize,
+ dlpi_name: ?[*:0]const u8,
+ dlpi_phdr: [*]std.elf.Phdr,
+ dlpi_phnum: u16,
+};
+pub const cmsghdr = extern struct {
+ cmsg_len: socklen_t,
+ cmsg_level: c_int,
+ cmsg_type: c_int,
+};
+pub const msghdr = extern struct {
+ msg_name: ?*c_void,
+ msg_namelen: socklen_t,
+ msg_iov: [*c]iovec,
+ msg_iovlen: c_int,
+ msg_control: ?*c_void,
+ msg_controllen: socklen_t,
+ msg_flags: c_int,
+};
+pub const cmsgcred = extern struct {
+ cmcred_pid: pid_t,
+ cmcred_uid: uid_t,
+ cmcred_euid: uid_t,
+ cmcred_gid: gid_t,
+ cmcred_ngroups: c_short,
+ cmcred_groups: [16]gid_t,
+};
+pub const sf_hdtr = extern struct {
+ headers: [*c]iovec,
+ hdr_cnt: c_int,
+ trailers: [*c]iovec,
+ trl_cnt: c_int,
+};
+
+pub const MS_SYNC = 0;
+pub const MS_ASYNC = 1;
+pub const MS_INVALIDATE = 2;
+
+pub const POSIX_MADV_SEQUENTIAL = 2;
+pub const POSIX_MADV_RANDOM = 1;
+pub const POSIX_MADV_DONTNEED = 4;
+pub const POSIX_MADV_NORMAL = 0;
+pub const POSIX_MADV_WILLNEED = 3;
+
+pub const MADV_SEQUENTIAL = 2;
+pub const MADV_CONTROL_END = MADV_SETMAP;
+pub const MADV_DONTNEED = 4;
+pub const MADV_RANDOM = 1;
+pub const MADV_WILLNEED = 3;
+pub const MADV_NORMAL = 0;
+pub const MADV_CONTROL_START = MADV_INVAL;
+pub const MADV_FREE = 5;
+pub const MADV_NOSYNC = 6;
+pub const MADV_AUTOSYNC = 7;
+pub const MADV_NOCORE = 8;
+pub const MADV_CORE = 9;
+pub const MADV_INVAL = 10;
+pub const MADV_SETMAP = 11;
+
+pub const F_DUPFD = 0;
+pub const F_GETFD = 1;
+pub const F_RDLCK = 1;
+pub const F_SETFD = 2;
+pub const F_UNLCK = 2;
+pub const F_WRLCK = 3;
+pub const F_GETFL = 3;
+pub const F_SETFL = 4;
+pub const F_GETOWN = 5;
+pub const F_SETOWN = 6;
+pub const F_GETLK = 7;
+pub const F_SETLK = 8;
+pub const F_SETLKW = 9;
+pub const F_DUP2FD = 10;
+pub const F_DUPFD_CLOEXEC = 17;
+pub const F_DUP2FD_CLOEXEC = 18;
+
+pub const LOCK_SH = 1;
+pub const LOCK_EX = 2;
+pub const LOCK_UN = 8;
+pub const LOCK_NB = 4;
+
+pub const Flock = extern struct {
+ l_start: off_t,
+ l_len: off_t,
+ l_pid: pid_t,
+ l_type: c_short,
+ l_whence: c_short,
+};
+
+pub const addrinfo = extern struct {
+ flags: i32,
+ family: i32,
+ socktype: i32,
+ protocol: i32,
+ addrlen: socklen_t,
+ canonname: ?[*:0]u8,
+ addr: ?*sockaddr,
+ next: ?*addrinfo,
+};
+
+pub const IPPROTO_IP = 0;
+pub const IPPROTO_ICMP = 1;
+pub const IPPROTO_TCP = 6;
+pub const IPPROTO_UDP = 17;
+pub const IPPROTO_IPV6 = 41;
+pub const IPPROTO_RAW = 255;
+pub const IPPROTO_HOPOPTS = 0;
+pub const IPPROTO_IGMP = 2;
+pub const IPPROTO_GGP = 3;
+pub const IPPROTO_IPV4 = 4;
+pub const IPPROTO_IPIP = IPPROTO_IPV4;
+pub const IPPROTO_ST = 7;
+pub const IPPROTO_EGP = 8;
+pub const IPPROTO_PIGP = 9;
+pub const IPPROTO_RCCMON = 10;
+pub const IPPROTO_NVPII = 11;
+pub const IPPROTO_PUP = 12;
+pub const IPPROTO_ARGUS = 13;
+pub const IPPROTO_EMCON = 14;
+pub const IPPROTO_XNET = 15;
+pub const IPPROTO_CHAOS = 16;
+pub const IPPROTO_MUX = 18;
+pub const IPPROTO_MEAS = 19;
+pub const IPPROTO_HMP = 20;
+pub const IPPROTO_PRM = 21;
+pub const IPPROTO_IDP = 22;
+pub const IPPROTO_TRUNK1 = 23;
+pub const IPPROTO_TRUNK2 = 24;
+pub const IPPROTO_LEAF1 = 25;
+pub const IPPROTO_LEAF2 = 26;
+pub const IPPROTO_RDP = 27;
+pub const IPPROTO_IRTP = 28;
+pub const IPPROTO_TP = 29;
+pub const IPPROTO_BLT = 30;
+pub const IPPROTO_NSP = 31;
+pub const IPPROTO_INP = 32;
+pub const IPPROTO_SEP = 33;
+pub const IPPROTO_3PC = 34;
+pub const IPPROTO_IDPR = 35;
+pub const IPPROTO_XTP = 36;
+pub const IPPROTO_DDP = 37;
+pub const IPPROTO_CMTP = 38;
+pub const IPPROTO_TPXX = 39;
+pub const IPPROTO_IL = 40;
+pub const IPPROTO_SDRP = 42;
+pub const IPPROTO_ROUTING = 43;
+pub const IPPROTO_FRAGMENT = 44;
+pub const IPPROTO_IDRP = 45;
+pub const IPPROTO_RSVP = 46;
+pub const IPPROTO_GRE = 47;
+pub const IPPROTO_MHRP = 48;
+pub const IPPROTO_BHA = 49;
+pub const IPPROTO_ESP = 50;
+pub const IPPROTO_AH = 51;
+pub const IPPROTO_INLSP = 52;
+pub const IPPROTO_SWIPE = 53;
+pub const IPPROTO_NHRP = 54;
+pub const IPPROTO_MOBILE = 55;
+pub const IPPROTO_TLSP = 56;
+pub const IPPROTO_SKIP = 57;
+pub const IPPROTO_ICMPV6 = 58;
+pub const IPPROTO_NONE = 59;
+pub const IPPROTO_DSTOPTS = 60;
+pub const IPPROTO_AHIP = 61;
+pub const IPPROTO_CFTP = 62;
+pub const IPPROTO_HELLO = 63;
+pub const IPPROTO_SATEXPAK = 64;
+pub const IPPROTO_KRYPTOLAN = 65;
+pub const IPPROTO_RVD = 66;
+pub const IPPROTO_IPPC = 67;
+pub const IPPROTO_ADFS = 68;
+pub const IPPROTO_SATMON = 69;
+pub const IPPROTO_VISA = 70;
+pub const IPPROTO_IPCV = 71;
+pub const IPPROTO_CPNX = 72;
+pub const IPPROTO_CPHB = 73;
+pub const IPPROTO_WSN = 74;
+pub const IPPROTO_PVP = 75;
+pub const IPPROTO_BRSATMON = 76;
+pub const IPPROTO_ND = 77;
+pub const IPPROTO_WBMON = 78;
+pub const IPPROTO_WBEXPAK = 79;
+pub const IPPROTO_EON = 80;
+pub const IPPROTO_VMTP = 81;
+pub const IPPROTO_SVMTP = 82;
+pub const IPPROTO_VINES = 83;
+pub const IPPROTO_TTP = 84;
+pub const IPPROTO_IGP = 85;
+pub const IPPROTO_DGP = 86;
+pub const IPPROTO_TCF = 87;
+pub const IPPROTO_IGRP = 88;
+pub const IPPROTO_OSPFIGP = 89;
+pub const IPPROTO_SRPC = 90;
+pub const IPPROTO_LARP = 91;
+pub const IPPROTO_MTP = 92;
+pub const IPPROTO_AX25 = 93;
+pub const IPPROTO_IPEIP = 94;
+pub const IPPROTO_MICP = 95;
+pub const IPPROTO_SCCSP = 96;
+pub const IPPROTO_ETHERIP = 97;
+pub const IPPROTO_ENCAP = 98;
+pub const IPPROTO_APES = 99;
+pub const IPPROTO_GMTP = 100;
+pub const IPPROTO_IPCOMP = 108;
+pub const IPPROTO_PIM = 103;
+pub const IPPROTO_CARP = 112;
+pub const IPPROTO_PGM = 113;
+pub const IPPROTO_PFSYNC = 240;
+pub const IPPROTO_DIVERT = 254;
+pub const IPPROTO_MAX = 256;
+pub const IPPROTO_DONE = 257;
+pub const IPPROTO_UNKNOWN = 258;
+
+pub const rlimit_resource = enum(c_int) {
+ CPU = 0,
+ FSIZE = 1,
+ DATA = 2,
+ STACK = 3,
+ CORE = 4,
+ RSS = 5,
+ MEMLOCK = 6,
+ NPROC = 7,
+ NOFILE = 8,
+ SBSIZE = 9,
+ VMEM = 10,
+ POSIXLOCKS = 11,
+ _,
+
+ pub const AS: rlimit_resource = .VMEM;
+};
+
+pub const rlim_t = i64;
+
+/// No limit
+pub const RLIM_INFINITY: rlim_t = (1 << 63) - 1;
+
+pub const RLIM_SAVED_MAX = RLIM_INFINITY;
+pub const RLIM_SAVED_CUR = RLIM_INFINITY;
+
+pub const rlimit = extern struct {
+ /// Soft limit
+ cur: rlim_t,
+ /// Hard limit
+ max: rlim_t,
+};
+
+pub const SHUT_RD = 0;
+pub const SHUT_WR = 1;
+pub const SHUT_RDWR = 2;
+
+pub const nfds_t = u32;
+
+pub const pollfd = extern struct {
+ fd: fd_t,
+ events: i16,
+ revents: i16,
+};
+
+/// Requestable events.
+pub const POLLIN = 0x0001;
+pub const POLLPRI = 0x0002;
+pub const POLLOUT = 0x0004;
+pub const POLLRDNORM = 0x0040;
+pub const POLLWRNORM = POLLOUT;
+pub const POLLRDBAND = 0x0080;
+pub const POLLWRBAND = 0x0100;
+
+/// These events are set if they occur regardless of whether they were requested.
+pub const POLLERR = 0x0008;
+pub const POLLHUP = 0x0010;
+pub const POLLNVAL = 0x0020;
diff --git a/lib/std/c/freebsd.zig b/lib/std/c/freebsd.zig
index f7d1e07608..231ba5ba4b 100644
--- a/lib/std/c/freebsd.zig
+++ b/lib/std/c/freebsd.zig
@@ -1,5 +1,5 @@
const std = @import("../std.zig");
-usingnamespace std.c;
+const maxInt = std.math.maxInt;
extern "c" fn __error() *c_int;
pub const _errno = __error;
@@ -136,3 +136,1540 @@ pub const AI_V4MAPPED = 0x00000800;
/// special recommended flags for getipnodebyname
pub const AI_DEFAULT = (AI_V4MAPPED_CFG | AI_ADDRCONFIG);
+
+pub const blksize_t = i32;
+pub const blkcnt_t = i64;
+pub const clockid_t = i32;
+pub const fsblkcnt_t = u64;
+pub const fsfilcnt_t = u64;
+pub const nlink_t = u64;
+pub const fd_t = i32;
+pub const pid_t = i32;
+pub const uid_t = u32;
+pub const gid_t = u32;
+pub const mode_t = u16;
+pub const off_t = i64;
+pub const ino_t = u64;
+pub const dev_t = u64;
+pub const time_t = i64;
+// The signedness is not constant across different architectures.
+pub const clock_t = isize;
+
+pub const socklen_t = u32;
+pub const suseconds_t = c_long;
+
+/// Renamed from `kevent` to `Kevent` to avoid conflict with function name.
+pub const Kevent = extern struct {
+ ident: usize,
+ filter: i16,
+ flags: u16,
+ fflags: u32,
+ data: i64,
+ udata: usize,
+ // TODO ext
+};
+
+// Modes and flags for dlopen()
+// include/dlfcn.h
+
+/// Bind function calls lazily.
+pub const RTLD_LAZY = 1;
+
+/// Bind function calls immediately.
+pub const RTLD_NOW = 2;
+
+pub const RTLD_MODEMASK = 0x3;
+
+/// Make symbols globally available.
+pub const RTLD_GLOBAL = 0x100;
+
+/// Opposite of RTLD_GLOBAL, and the default.
+pub const RTLD_LOCAL = 0;
+
+/// Trace loaded objects and exit.
+pub const RTLD_TRACE = 0x200;
+
+/// Do not remove members.
+pub const RTLD_NODELETE = 0x01000;
+
+/// Do not load if not already loaded.
+pub const RTLD_NOLOAD = 0x02000;
+
+pub const dl_phdr_info = extern struct {
+ dlpi_addr: usize,
+ dlpi_name: ?[*:0]const u8,
+ dlpi_phdr: [*]std.elf.Phdr,
+ dlpi_phnum: u16,
+};
+
+pub const Flock = extern struct {
+ l_start: off_t,
+ l_len: off_t,
+ l_pid: pid_t,
+ l_type: i16,
+ l_whence: i16,
+ l_sysid: i32,
+ __unused: [4]u8,
+};
+
+pub const msghdr = extern struct {
+ /// optional address
+ msg_name: ?*sockaddr,
+
+ /// size of address
+ msg_namelen: socklen_t,
+
+ /// scatter/gather array
+ msg_iov: [*]iovec,
+
+ /// # elements in msg_iov
+ msg_iovlen: i32,
+
+ /// ancillary data
+ msg_control: ?*c_void,
+
+ /// ancillary data buffer len
+ msg_controllen: socklen_t,
+
+ /// flags on received message
+ msg_flags: i32,
+};
+
+pub const msghdr_const = extern struct {
+ /// optional address
+ msg_name: ?*const sockaddr,
+
+ /// size of address
+ msg_namelen: socklen_t,
+
+ /// scatter/gather array
+ msg_iov: [*]iovec_const,
+
+ /// # elements in msg_iov
+ msg_iovlen: i32,
+
+ /// ancillary data
+ msg_control: ?*c_void,
+
+ /// ancillary data buffer len
+ msg_controllen: socklen_t,
+
+ /// flags on received message
+ msg_flags: i32,
+};
+
+pub const Stat = extern struct {
+ dev: dev_t,
+ ino: ino_t,
+ nlink: nlink_t,
+
+ mode: mode_t,
+ __pad0: u16,
+ uid: uid_t,
+ gid: gid_t,
+ __pad1: u32,
+ rdev: dev_t,
+
+ atim: timespec,
+ mtim: timespec,
+ ctim: timespec,
+ birthtim: timespec,
+
+ size: off_t,
+ blocks: i64,
+ blksize: isize,
+ flags: u32,
+ gen: u64,
+ __spare: [10]u64,
+
+ 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 const timespec = extern struct {
+ tv_sec: isize,
+ tv_nsec: isize,
+};
+
+pub const timeval = extern struct {
+ /// seconds
+ tv_sec: time_t,
+ /// microseconds
+ tv_usec: suseconds_t,
+};
+
+pub const dirent = extern struct {
+ d_fileno: usize,
+ d_off: i64,
+ d_reclen: u16,
+ d_type: u8,
+ d_pad0: u8,
+ d_namlen: u16,
+ d_pad1: u16,
+ d_name: [256]u8,
+
+ pub fn reclen(self: dirent) u16 {
+ return self.d_reclen;
+ }
+};
+
+pub const in_port_t = u16;
+pub const sa_family_t = u8;
+
+pub const sockaddr = extern struct {
+ /// total length
+ len: u8,
+
+ /// address family
+ family: sa_family_t,
+
+ /// actually longer; address value
+ data: [14]u8,
+};
+
+pub const sockaddr_storage = std.x.os.Socket.Address.Native.Storage;
+
+pub const sockaddr_in = extern struct {
+ len: u8 = @sizeOf(sockaddr_in),
+ family: sa_family_t = AF_INET,
+ port: in_port_t,
+ addr: u32,
+ zero: [8]u8 = [8]u8{ 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+
+pub const sockaddr_in6 = extern struct {
+ len: u8 = @sizeOf(sockaddr_in6),
+ family: sa_family_t = AF_INET6,
+ port: in_port_t,
+ flowinfo: u32,
+ addr: [16]u8,
+ scope_id: u32,
+};
+
+pub const sockaddr_un = extern struct {
+ len: u8 = @sizeOf(sockaddr_un),
+ family: sa_family_t = AF_UNIX,
+ path: [104]u8,
+};
+
+pub const CTL_KERN = 1;
+pub const CTL_DEBUG = 5;
+
+pub const KERN_PROC = 14; // struct: process entries
+pub const KERN_PROC_PATHNAME = 12; // path to executable
+pub const KERN_IOV_MAX = 35;
+
+pub const PATH_MAX = 1024;
+pub const IOV_MAX = KERN_IOV_MAX;
+
+pub const STDIN_FILENO = 0;
+pub const STDOUT_FILENO = 1;
+pub const STDERR_FILENO = 2;
+
+pub const PROT_NONE = 0;
+pub const PROT_READ = 1;
+pub const PROT_WRITE = 2;
+pub const PROT_EXEC = 4;
+
+pub const CLOCK_REALTIME = 0;
+pub const CLOCK_VIRTUAL = 1;
+pub const CLOCK_PROF = 2;
+pub const CLOCK_MONOTONIC = 4;
+pub const CLOCK_UPTIME = 5;
+pub const CLOCK_UPTIME_PRECISE = 7;
+pub const CLOCK_UPTIME_FAST = 8;
+pub const CLOCK_REALTIME_PRECISE = 9;
+pub const CLOCK_REALTIME_FAST = 10;
+pub const CLOCK_MONOTONIC_PRECISE = 11;
+pub const CLOCK_MONOTONIC_FAST = 12;
+pub const CLOCK_SECOND = 13;
+pub const CLOCK_THREAD_CPUTIME_ID = 14;
+pub const CLOCK_PROCESS_CPUTIME_ID = 15;
+
+pub const MAP_FAILED = @intToPtr(*c_void, maxInt(usize));
+pub const MAP_SHARED = 0x0001;
+pub const MAP_PRIVATE = 0x0002;
+pub const MAP_FIXED = 0x0010;
+pub const MAP_STACK = 0x0400;
+pub const MAP_NOSYNC = 0x0800;
+pub const MAP_ANON = 0x1000;
+pub const MAP_ANONYMOUS = MAP_ANON;
+pub const MAP_FILE = 0;
+
+pub const MAP_GUARD = 0x00002000;
+pub const MAP_EXCL = 0x00004000;
+pub const MAP_NOCORE = 0x00020000;
+pub const MAP_PREFAULT_READ = 0x00040000;
+pub const MAP_32BIT = 0x00080000;
+
+pub const WNOHANG = 1;
+pub const WUNTRACED = 2;
+pub const WSTOPPED = WUNTRACED;
+pub const WCONTINUED = 4;
+pub const WNOWAIT = 8;
+pub const WEXITED = 16;
+pub const WTRAPPED = 32;
+
+pub const SA_ONSTACK = 0x0001;
+pub const SA_RESTART = 0x0002;
+pub const SA_RESETHAND = 0x0004;
+pub const SA_NOCLDSTOP = 0x0008;
+pub const SA_NODEFER = 0x0010;
+pub const SA_NOCLDWAIT = 0x0020;
+pub const SA_SIGINFO = 0x0040;
+
+pub const SIGHUP = 1;
+pub const SIGINT = 2;
+pub const SIGQUIT = 3;
+pub const SIGILL = 4;
+pub const SIGTRAP = 5;
+pub const SIGABRT = 6;
+pub const SIGIOT = SIGABRT;
+pub const SIGEMT = 7;
+pub const SIGFPE = 8;
+pub const SIGKILL = 9;
+pub const SIGBUS = 10;
+pub const SIGSEGV = 11;
+pub const SIGSYS = 12;
+pub const SIGPIPE = 13;
+pub const SIGALRM = 14;
+pub const SIGTERM = 15;
+pub const SIGURG = 16;
+pub const SIGSTOP = 17;
+pub const SIGTSTP = 18;
+pub const SIGCONT = 19;
+pub const SIGCHLD = 20;
+pub const SIGTTIN = 21;
+pub const SIGTTOU = 22;
+pub const SIGIO = 23;
+pub const SIGXCPU = 24;
+pub const SIGXFSZ = 25;
+pub const SIGVTALRM = 26;
+pub const SIGPROF = 27;
+pub const SIGWINCH = 28;
+pub const SIGINFO = 29;
+pub const SIGUSR1 = 30;
+pub const SIGUSR2 = 31;
+pub const SIGTHR = 32;
+pub const SIGLWP = SIGTHR;
+pub const SIGLIBRT = 33;
+
+pub const SIGRTMIN = 65;
+pub const SIGRTMAX = 126;
+
+// access function
+pub const F_OK = 0; // test for existence of file
+pub const X_OK = 1; // test for execute or search permission
+pub const W_OK = 2; // test for write permission
+pub const R_OK = 4; // test for read permission
+
+pub const O_RDONLY = 0x0000;
+pub const O_WRONLY = 0x0001;
+pub const O_RDWR = 0x0002;
+pub const O_ACCMODE = 0x0003;
+
+pub const O_SHLOCK = 0x0010;
+pub const O_EXLOCK = 0x0020;
+
+pub const O_CREAT = 0x0200;
+pub const O_EXCL = 0x0800;
+pub const O_NOCTTY = 0x8000;
+pub const O_TRUNC = 0x0400;
+pub const O_APPEND = 0x0008;
+pub const O_NONBLOCK = 0x0004;
+pub const O_DSYNC = 0o10000;
+pub const O_SYNC = 0x0080;
+pub const O_RSYNC = 0o4010000;
+pub const O_DIRECTORY = 0x20000;
+pub const O_NOFOLLOW = 0x0100;
+pub const O_CLOEXEC = 0x00100000;
+
+pub const O_ASYNC = 0x0040;
+pub const O_DIRECT = 0x00010000;
+pub const O_NOATIME = 0o1000000;
+pub const O_PATH = 0o10000000;
+pub const O_TMPFILE = 0o20200000;
+pub const O_NDELAY = O_NONBLOCK;
+
+pub const F_DUPFD = 0;
+pub const F_GETFD = 1;
+pub const F_SETFD = 2;
+pub const F_GETFL = 3;
+pub const F_SETFL = 4;
+
+pub const F_GETOWN = 5;
+pub const F_SETOWN = 6;
+
+pub const F_GETLK = 11;
+pub const F_SETLK = 12;
+pub const F_SETLKW = 13;
+
+pub const F_RDLCK = 1;
+pub const F_WRLCK = 3;
+pub const F_UNLCK = 2;
+
+pub const LOCK_SH = 1;
+pub const LOCK_EX = 2;
+pub const LOCK_UN = 8;
+pub const LOCK_NB = 4;
+
+pub const F_SETOWN_EX = 15;
+pub const F_GETOWN_EX = 16;
+
+pub const F_GETOWNER_UIDS = 17;
+
+pub const FD_CLOEXEC = 1;
+
+pub const SEEK_SET = 0;
+pub const SEEK_CUR = 1;
+pub const SEEK_END = 2;
+
+pub const SIG_BLOCK = 1;
+pub const SIG_UNBLOCK = 2;
+pub const SIG_SETMASK = 3;
+
+pub const SOCK_STREAM = 1;
+pub const SOCK_DGRAM = 2;
+pub const SOCK_RAW = 3;
+pub const SOCK_RDM = 4;
+pub const SOCK_SEQPACKET = 5;
+
+pub const SOCK_CLOEXEC = 0x10000000;
+pub const SOCK_NONBLOCK = 0x20000000;
+
+pub const SO_DEBUG = 0x00000001;
+pub const SO_ACCEPTCONN = 0x00000002;
+pub const SO_REUSEADDR = 0x00000004;
+pub const SO_KEEPALIVE = 0x00000008;
+pub const SO_DONTROUTE = 0x00000010;
+pub const SO_BROADCAST = 0x00000020;
+pub const SO_USELOOPBACK = 0x00000040;
+pub const SO_LINGER = 0x00000080;
+pub const SO_OOBINLINE = 0x00000100;
+pub const SO_REUSEPORT = 0x00000200;
+pub const SO_TIMESTAMP = 0x00000400;
+pub const SO_NOSIGPIPE = 0x00000800;
+pub const SO_ACCEPTFILTER = 0x00001000;
+pub const SO_BINTIME = 0x00002000;
+pub const SO_NO_OFFLOAD = 0x00004000;
+pub const SO_NO_DDP = 0x00008000;
+pub const SO_REUSEPORT_LB = 0x00010000;
+
+pub const SO_SNDBUF = 0x1001;
+pub const SO_RCVBUF = 0x1002;
+pub const SO_SNDLOWAT = 0x1003;
+pub const SO_RCVLOWAT = 0x1004;
+pub const SO_SNDTIMEO = 0x1005;
+pub const SO_RCVTIMEO = 0x1006;
+pub const SO_ERROR = 0x1007;
+pub const SO_TYPE = 0x1008;
+pub const SO_LABEL = 0x1009;
+pub const SO_PEERLABEL = 0x1010;
+pub const SO_LISTENQLIMIT = 0x1011;
+pub const SO_LISTENQLEN = 0x1012;
+pub const SO_LISTENINCQLEN = 0x1013;
+pub const SO_SETFIB = 0x1014;
+pub const SO_USER_COOKIE = 0x1015;
+pub const SO_PROTOCOL = 0x1016;
+pub const SO_PROTOTYPE = SO_PROTOCOL;
+pub const SO_TS_CLOCK = 0x1017;
+pub const SO_MAX_PACING_RATE = 0x1018;
+pub const SO_DOMAIN = 0x1019;
+
+pub const SOL_SOCKET = 0xffff;
+
+pub const PF_UNSPEC = AF_UNSPEC;
+pub const PF_LOCAL = AF_LOCAL;
+pub const PF_UNIX = PF_LOCAL;
+pub const PF_INET = AF_INET;
+pub const PF_IMPLINK = AF_IMPLINK;
+pub const PF_PUP = AF_PUP;
+pub const PF_CHAOS = AF_CHAOS;
+pub const PF_NETBIOS = AF_NETBIOS;
+pub const PF_ISO = AF_ISO;
+pub const PF_OSI = AF_ISO;
+pub const PF_ECMA = AF_ECMA;
+pub const PF_DATAKIT = AF_DATAKIT;
+pub const PF_CCITT = AF_CCITT;
+pub const PF_DECnet = AF_DECnet;
+pub const PF_DLI = AF_DLI;
+pub const PF_LAT = AF_LAT;
+pub const PF_HYLINK = AF_HYLINK;
+pub const PF_APPLETALK = AF_APPLETALK;
+pub const PF_ROUTE = AF_ROUTE;
+pub const PF_LINK = AF_LINK;
+pub const PF_XTP = pseudo_AF_XTP;
+pub const PF_COIP = AF_COIP;
+pub const PF_CNT = AF_CNT;
+pub const PF_SIP = AF_SIP;
+pub const PF_IPX = AF_IPX;
+pub const PF_RTIP = pseudo_AF_RTIP;
+pub const PF_PIP = psuedo_AF_PIP;
+pub const PF_ISDN = AF_ISDN;
+pub const PF_KEY = pseudo_AF_KEY;
+pub const PF_INET6 = pseudo_AF_INET6;
+pub const PF_NATM = AF_NATM;
+pub const PF_ATM = AF_ATM;
+pub const PF_NETGRAPH = AF_NETGRAPH;
+pub const PF_SLOW = AF_SLOW;
+pub const PF_SCLUSTER = AF_SCLUSTER;
+pub const PF_ARP = AF_ARP;
+pub const PF_BLUETOOTH = AF_BLUETOOTH;
+pub const PF_IEEE80211 = AF_IEEE80211;
+pub const PF_INET_SDP = AF_INET_SDP;
+pub const PF_INET6_SDP = AF_INET6_SDP;
+pub const PF_MAX = AF_MAX;
+
+pub const AF_UNSPEC = 0;
+pub const AF_UNIX = 1;
+pub const AF_LOCAL = AF_UNIX;
+pub const AF_FILE = AF_LOCAL;
+pub const AF_INET = 2;
+pub const AF_IMPLINK = 3;
+pub const AF_PUP = 4;
+pub const AF_CHAOS = 5;
+pub const AF_NETBIOS = 6;
+pub const AF_ISO = 7;
+pub const AF_OSI = AF_ISO;
+pub const AF_ECMA = 8;
+pub const AF_DATAKIT = 9;
+pub const AF_CCITT = 10;
+pub const AF_SNA = 11;
+pub const AF_DECnet = 12;
+pub const AF_DLI = 13;
+pub const AF_LAT = 14;
+pub const AF_HYLINK = 15;
+pub const AF_APPLETALK = 16;
+pub const AF_ROUTE = 17;
+pub const AF_LINK = 18;
+pub const pseudo_AF_XTP = 19;
+pub const AF_COIP = 20;
+pub const AF_CNT = 21;
+pub const pseudo_AF_RTIP = 22;
+pub const AF_IPX = 23;
+pub const AF_SIP = 24;
+pub const pseudo_AF_PIP = 25;
+pub const AF_ISDN = 26;
+pub const AF_E164 = AF_ISDN;
+pub const pseudo_AF_KEY = 27;
+pub const AF_INET6 = 28;
+pub const AF_NATM = 29;
+pub const AF_ATM = 30;
+pub const pseudo_AF_HDRCMPLT = 31;
+pub const AF_NETGRAPH = 32;
+pub const AF_SLOW = 33;
+pub const AF_SCLUSTER = 34;
+pub const AF_ARP = 35;
+pub const AF_BLUETOOTH = 36;
+pub const AF_IEEE80211 = 37;
+pub const AF_INET_SDP = 40;
+pub const AF_INET6_SDP = 42;
+pub const AF_MAX = 42;
+
+pub const DT_UNKNOWN = 0;
+pub const DT_FIFO = 1;
+pub const DT_CHR = 2;
+pub const DT_DIR = 4;
+pub const DT_BLK = 6;
+pub const DT_REG = 8;
+pub const DT_LNK = 10;
+pub const DT_SOCK = 12;
+pub const DT_WHT = 14;
+
+/// add event to kq (implies enable)
+pub const EV_ADD = 0x0001;
+
+/// delete event from kq
+pub const EV_DELETE = 0x0002;
+
+/// enable event
+pub const EV_ENABLE = 0x0004;
+
+/// disable event (not reported)
+pub const EV_DISABLE = 0x0008;
+
+/// only report one occurrence
+pub const EV_ONESHOT = 0x0010;
+
+/// clear event state after reporting
+pub const EV_CLEAR = 0x0020;
+
+/// error, event data contains errno
+pub const EV_ERROR = 0x4000;
+
+/// force immediate event output
+/// ... with or without EV_ERROR
+/// ... use KEVENT_FLAG_ERROR_EVENTS
+/// on syscalls supporting flags
+pub const EV_RECEIPT = 0x0040;
+
+/// disable event after reporting
+pub const EV_DISPATCH = 0x0080;
+
+pub const EVFILT_READ = -1;
+pub const EVFILT_WRITE = -2;
+
+/// attached to aio requests
+pub const EVFILT_AIO = -3;
+
+/// attached to vnodes
+pub const EVFILT_VNODE = -4;
+
+/// attached to struct proc
+pub const EVFILT_PROC = -5;
+
+/// attached to struct proc
+pub const EVFILT_SIGNAL = -6;
+
+/// timers
+pub const EVFILT_TIMER = -7;
+
+/// Process descriptors
+pub const EVFILT_PROCDESC = -8;
+
+/// Filesystem events
+pub const EVFILT_FS = -9;
+
+pub const EVFILT_LIO = -10;
+
+/// User events
+pub const EVFILT_USER = -11;
+
+/// Sendfile events
+pub const EVFILT_SENDFILE = -12;
+
+pub const EVFILT_EMPTY = -13;
+
+/// On input, NOTE_TRIGGER causes the event to be triggered for output.
+pub const NOTE_TRIGGER = 0x01000000;
+
+/// ignore input fflags
+pub const NOTE_FFNOP = 0x00000000;
+
+/// and fflags
+pub const NOTE_FFAND = 0x40000000;
+
+/// or fflags
+pub const NOTE_FFOR = 0x80000000;
+
+/// copy fflags
+pub const NOTE_FFCOPY = 0xc0000000;
+
+/// mask for operations
+pub const NOTE_FFCTRLMASK = 0xc0000000;
+pub const NOTE_FFLAGSMASK = 0x00ffffff;
+
+/// low water mark
+pub const NOTE_LOWAT = 0x00000001;
+
+/// behave like poll()
+pub const NOTE_FILE_POLL = 0x00000002;
+
+/// vnode was removed
+pub const NOTE_DELETE = 0x00000001;
+
+/// data contents changed
+pub const NOTE_WRITE = 0x00000002;
+
+/// size increased
+pub const NOTE_EXTEND = 0x00000004;
+
+/// attributes changed
+pub const NOTE_ATTRIB = 0x00000008;
+
+/// link count changed
+pub const NOTE_LINK = 0x00000010;
+
+/// vnode was renamed
+pub const NOTE_RENAME = 0x00000020;
+
+/// vnode access was revoked
+pub const NOTE_REVOKE = 0x00000040;
+
+/// vnode was opened
+pub const NOTE_OPEN = 0x00000080;
+
+/// file closed, fd did not allow write
+pub const NOTE_CLOSE = 0x00000100;
+
+/// file closed, fd did allow write
+pub const NOTE_CLOSE_WRITE = 0x00000200;
+
+/// file was read
+pub const NOTE_READ = 0x00000400;
+
+/// process exited
+pub const NOTE_EXIT = 0x80000000;
+
+/// process forked
+pub const NOTE_FORK = 0x40000000;
+
+/// process exec'd
+pub const NOTE_EXEC = 0x20000000;
+
+/// mask for signal & exit status
+pub const NOTE_PDATAMASK = 0x000fffff;
+pub const NOTE_PCTRLMASK = (~NOTE_PDATAMASK);
+
+/// data is seconds
+pub const NOTE_SECONDS = 0x00000001;
+
+/// data is milliseconds
+pub const NOTE_MSECONDS = 0x00000002;
+
+/// data is microseconds
+pub const NOTE_USECONDS = 0x00000004;
+
+/// data is nanoseconds
+pub const NOTE_NSECONDS = 0x00000008;
+
+/// timeout is absolute
+pub const NOTE_ABSTIME = 0x00000010;
+
+pub const TIOCEXCL = 0x2000740d;
+pub const TIOCNXCL = 0x2000740e;
+pub const TIOCSCTTY = 0x20007461;
+pub const TIOCGPGRP = 0x40047477;
+pub const TIOCSPGRP = 0x80047476;
+pub const TIOCOUTQ = 0x40047473;
+pub const TIOCSTI = 0x80017472;
+pub const TIOCGWINSZ = 0x40087468;
+pub const TIOCSWINSZ = 0x80087467;
+pub const TIOCMGET = 0x4004746a;
+pub const TIOCMBIS = 0x8004746c;
+pub const TIOCMBIC = 0x8004746b;
+pub const TIOCMSET = 0x8004746d;
+pub const FIONREAD = 0x4004667f;
+pub const TIOCCONS = 0x80047462;
+pub const TIOCPKT = 0x80047470;
+pub const FIONBIO = 0x8004667e;
+pub const TIOCNOTTY = 0x20007471;
+pub const TIOCSETD = 0x8004741b;
+pub const TIOCGETD = 0x4004741a;
+pub const TIOCSBRK = 0x2000747b;
+pub const TIOCCBRK = 0x2000747a;
+pub const TIOCGSID = 0x40047463;
+pub const TIOCGPTN = 0x4004740f;
+pub const TIOCSIG = 0x2004745f;
+
+pub fn WEXITSTATUS(s: u32) u8 {
+ return @intCast(u8, (s & 0xff00) >> 8);
+}
+pub fn WTERMSIG(s: u32) u32 {
+ return s & 0x7f;
+}
+pub fn WSTOPSIG(s: u32) u32 {
+ return WEXITSTATUS(s);
+}
+pub fn WIFEXITED(s: u32) bool {
+ return WTERMSIG(s) == 0;
+}
+pub fn WIFSTOPPED(s: u32) bool {
+ return @intCast(u16, (((s & 0xffff) *% 0x10001) >> 8)) > 0x7f00;
+}
+pub fn WIFSIGNALED(s: u32) bool {
+ return (s & 0xffff) -% 1 < 0xff;
+}
+
+pub const winsize = extern struct {
+ ws_row: u16,
+ ws_col: u16,
+ ws_xpixel: u16,
+ ws_ypixel: u16,
+};
+
+const NSIG = 32;
+
+pub const SIG_DFL = @intToPtr(?Sigaction.sigaction_fn, 0);
+pub const SIG_IGN = @intToPtr(?Sigaction.sigaction_fn, 1);
+pub const SIG_ERR = @intToPtr(?Sigaction.sigaction_fn, maxInt(usize));
+
+/// Renamed from `sigaction` to `Sigaction` to avoid conflict with the syscall.
+pub const Sigaction = extern struct {
+ pub const handler_fn = fn (c_int) callconv(.C) void;
+ pub const sigaction_fn = fn (c_int, *const siginfo_t, ?*const c_void) callconv(.C) void;
+
+ /// signal handler
+ handler: extern union {
+ handler: ?handler_fn,
+ sigaction: ?sigaction_fn,
+ },
+
+ /// see signal options
+ flags: c_uint,
+
+ /// signal mask to apply
+ mask: sigset_t,
+};
+
+pub const siginfo_t = extern struct {
+ signo: c_int,
+ errno: c_int,
+ code: c_int,
+ pid: pid_t,
+ uid: uid_t,
+ status: c_int,
+ addr: ?*c_void,
+ value: sigval,
+ reason: extern union {
+ fault: extern struct {
+ trapno: c_int,
+ },
+ timer: extern struct {
+ timerid: c_int,
+ overrun: c_int,
+ },
+ mesgq: extern struct {
+ mqd: c_int,
+ },
+ poll: extern struct {
+ band: c_long,
+ },
+ spare: extern struct {
+ spare1: c_long,
+ spare2: [7]c_int,
+ },
+ },
+};
+
+pub const sigval = extern union {
+ int: c_int,
+ ptr: ?*c_void,
+};
+
+pub const _SIG_WORDS = 4;
+pub const _SIG_MAXSIG = 128;
+
+pub inline fn _SIG_IDX(sig: usize) usize {
+ return sig - 1;
+}
+pub inline fn _SIG_WORD(sig: usize) usize {
+ return_SIG_IDX(sig) >> 5;
+}
+pub inline fn _SIG_BIT(sig: usize) usize {
+ return 1 << (_SIG_IDX(sig) & 31);
+}
+pub inline fn _SIG_VALID(sig: usize) usize {
+ return sig <= _SIG_MAXSIG and sig > 0;
+}
+
+pub const sigset_t = extern struct {
+ __bits: [_SIG_WORDS]u32,
+};
+
+pub const empty_sigset = sigset_t{ .__bits = [_]u32{0} ** _SIG_WORDS };
+
+pub usingnamespace switch (builtin.cpu.arch) {
+ .x86_64 => struct {
+ pub const ucontext_t = extern struct {
+ sigmask: sigset_t,
+ mcontext: mcontext_t,
+ link: ?*ucontext_t,
+ stack: stack_t,
+ flags: c_int,
+ __spare__: [4]c_int,
+ };
+
+ /// XXX x86_64 specific
+ pub const mcontext_t = 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,
+ };
+ },
+ else => struct {},
+};
+
+pub const E = enum(u16) {
+ /// No error occurred.
+ SUCCESS = 0,
+
+ PERM = 1, // Operation not permitted
+ NOENT = 2, // No such file or directory
+ SRCH = 3, // No such process
+ INTR = 4, // Interrupted system call
+ IO = 5, // Input/output error
+ NXIO = 6, // Device not configured
+ @"2BIG" = 7, // Argument list too long
+ NOEXEC = 8, // Exec format error
+ BADF = 9, // Bad file descriptor
+ CHILD = 10, // No child processes
+ DEADLK = 11, // Resource deadlock avoided
+ // 11 was AGAIN
+ NOMEM = 12, // Cannot allocate memory
+ ACCES = 13, // Permission denied
+ FAULT = 14, // Bad address
+ NOTBLK = 15, // Block device required
+ BUSY = 16, // Device busy
+ EXIST = 17, // File exists
+ XDEV = 18, // Cross-device link
+ NODEV = 19, // Operation not supported by device
+ NOTDIR = 20, // Not a directory
+ ISDIR = 21, // Is a directory
+ INVAL = 22, // Invalid argument
+ NFILE = 23, // Too many open files in system
+ MFILE = 24, // Too many open files
+ NOTTY = 25, // Inappropriate ioctl for device
+ TXTBSY = 26, // Text file busy
+ FBIG = 27, // File too large
+ NOSPC = 28, // No space left on device
+ SPIPE = 29, // Illegal seek
+ ROFS = 30, // Read-only filesystem
+ MLINK = 31, // Too many links
+ PIPE = 32, // Broken pipe
+
+ // math software
+ DOM = 33, // Numerical argument out of domain
+ RANGE = 34, // Result too large
+
+ // non-blocking and interrupt i/o
+
+ /// Resource temporarily unavailable
+ /// This code is also used for `WOULDBLOCK`: operation would block.
+ AGAIN = 35,
+ INPROGRESS = 36, // Operation now in progress
+ ALREADY = 37, // Operation already in progress
+
+ // ipc/network software -- argument errors
+ NOTSOCK = 38, // Socket operation on non-socket
+ DESTADDRREQ = 39, // Destination address required
+ MSGSIZE = 40, // Message too long
+ PROTOTYPE = 41, // Protocol wrong type for socket
+ NOPROTOOPT = 42, // Protocol not available
+ PROTONOSUPPORT = 43, // Protocol not supported
+ SOCKTNOSUPPORT = 44, // Socket type not supported
+ /// Operation not supported
+ /// This code is also used for `NOTSUP`.
+ OPNOTSUPP = 45,
+ PFNOSUPPORT = 46, // Protocol family not supported
+ AFNOSUPPORT = 47, // Address family not supported by protocol family
+ ADDRINUSE = 48, // Address already in use
+ ADDRNOTAVAIL = 49, // Can't assign requested address
+
+ // ipc/network software -- operational errors
+ NETDOWN = 50, // Network is down
+ NETUNREACH = 51, // Network is unreachable
+ NETRESET = 52, // Network dropped connection on reset
+ CONNABORTED = 53, // Software caused connection abort
+ CONNRESET = 54, // Connection reset by peer
+ NOBUFS = 55, // No buffer space available
+ ISCONN = 56, // Socket is already connected
+ NOTCONN = 57, // Socket is not connected
+ SHUTDOWN = 58, // Can't send after socket shutdown
+ TOOMANYREFS = 59, // Too many references: can't splice
+ TIMEDOUT = 60, // Operation timed out
+ CONNREFUSED = 61, // Connection refused
+
+ LOOP = 62, // Too many levels of symbolic links
+ NAMETOOLONG = 63, // File name too long
+
+ // should be rearranged
+ HOSTDOWN = 64, // Host is down
+ HOSTUNREACH = 65, // No route to host
+ NOTEMPTY = 66, // Directory not empty
+
+ // quotas & mush
+ PROCLIM = 67, // Too many processes
+ USERS = 68, // Too many users
+ DQUOT = 69, // Disc quota exceeded
+
+ // Network File System
+ STALE = 70, // Stale NFS file handle
+ REMOTE = 71, // Too many levels of remote in path
+ BADRPC = 72, // RPC struct is bad
+ RPCMISMATCH = 73, // RPC version wrong
+ PROGUNAVAIL = 74, // RPC prog. not avail
+ PROGMISMATCH = 75, // Program version wrong
+ PROCUNAVAIL = 76, // Bad procedure for program
+
+ NOLCK = 77, // No locks available
+ NOSYS = 78, // Function not implemented
+
+ FTYPE = 79, // Inappropriate file type or format
+ AUTH = 80, // Authentication error
+ NEEDAUTH = 81, // Need authenticator
+ IDRM = 82, // Identifier removed
+ NOMSG = 83, // No message of desired type
+ OVERFLOW = 84, // Value too large to be stored in data type
+ CANCELED = 85, // Operation canceled
+ ILSEQ = 86, // Illegal byte sequence
+ NOATTR = 87, // Attribute not found
+
+ DOOFUS = 88, // Programming error
+
+ BADMSG = 89, // Bad message
+ MULTIHOP = 90, // Multihop attempted
+ NOLINK = 91, // Link has been severed
+ PROTO = 92, // Protocol error
+
+ NOTCAPABLE = 93, // Capabilities insufficient
+ CAPMODE = 94, // Not permitted in capability mode
+ NOTRECOVERABLE = 95, // State not recoverable
+ OWNERDEAD = 96, // Previous owner died
+ _,
+};
+
+pub const MINSIGSTKSZ = switch (builtin.cpu.arch) {
+ .i386, .x86_64 => 2048,
+ .arm, .aarch64 => 4096,
+ else => @compileError("MINSIGSTKSZ not defined for this architecture"),
+};
+pub const SIGSTKSZ = MINSIGSTKSZ + 32768;
+
+pub const SS_ONSTACK = 1;
+pub const SS_DISABLE = 4;
+
+pub const stack_t = extern struct {
+ ss_sp: [*]u8,
+ ss_size: isize,
+ ss_flags: i32,
+};
+
+pub const S_IFMT = 0o170000;
+
+pub const S_IFIFO = 0o010000;
+pub const S_IFCHR = 0o020000;
+pub const S_IFDIR = 0o040000;
+pub const S_IFBLK = 0o060000;
+pub const S_IFREG = 0o100000;
+pub const S_IFLNK = 0o120000;
+pub const S_IFSOCK = 0o140000;
+pub const S_IFWHT = 0o160000;
+
+pub const S_ISUID = 0o4000;
+pub const S_ISGID = 0o2000;
+pub const S_ISVTX = 0o1000;
+pub const S_IRWXU = 0o700;
+pub const S_IRUSR = 0o400;
+pub const S_IWUSR = 0o200;
+pub const S_IXUSR = 0o100;
+pub const S_IRWXG = 0o070;
+pub const S_IRGRP = 0o040;
+pub const S_IWGRP = 0o020;
+pub const S_IXGRP = 0o010;
+pub const S_IRWXO = 0o007;
+pub const S_IROTH = 0o004;
+pub const S_IWOTH = 0o002;
+pub const S_IXOTH = 0o001;
+
+pub fn S_ISFIFO(m: u32) bool {
+ return m & S_IFMT == S_IFIFO;
+}
+
+pub fn S_ISCHR(m: u32) bool {
+ return m & S_IFMT == S_IFCHR;
+}
+
+pub fn S_ISDIR(m: u32) bool {
+ return m & S_IFMT == S_IFDIR;
+}
+
+pub fn S_ISBLK(m: u32) bool {
+ return m & S_IFMT == S_IFBLK;
+}
+
+pub fn S_ISREG(m: u32) bool {
+ return m & S_IFMT == S_IFREG;
+}
+
+pub fn S_ISLNK(m: u32) bool {
+ return m & S_IFMT == S_IFLNK;
+}
+
+pub fn S_ISSOCK(m: u32) bool {
+ return m & S_IFMT == S_IFSOCK;
+}
+
+pub fn S_IWHT(m: u32) bool {
+ return m & S_IFMT == S_IFWHT;
+}
+
+pub const HOST_NAME_MAX = 255;
+
+/// 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 AT_FDCWD = -100;
+
+/// Check access using effective user and group ID
+pub const AT_EACCESS = 0x0100;
+
+/// Do not follow symbolic links
+pub const AT_SYMLINK_NOFOLLOW = 0x0200;
+
+/// Follow symbolic link
+pub const AT_SYMLINK_FOLLOW = 0x0400;
+
+/// Remove directory instead of file
+pub const AT_REMOVEDIR = 0x0800;
+
+pub const addrinfo = extern struct {
+ flags: i32,
+ family: i32,
+ socktype: i32,
+ protocol: i32,
+ addrlen: socklen_t,
+ canonname: ?[*:0]u8,
+ addr: ?*sockaddr,
+ next: ?*addrinfo,
+};
+
+/// Fail if not under dirfd
+pub const AT_BENEATH = 0x1000;
+
+/// dummy for IP
+pub const IPPROTO_IP = 0;
+
+/// control message protocol
+pub const IPPROTO_ICMP = 1;
+
+/// tcp
+pub const IPPROTO_TCP = 6;
+
+/// user datagram protocol
+pub const IPPROTO_UDP = 17;
+
+/// IP6 header
+pub const IPPROTO_IPV6 = 41;
+
+/// raw IP packet
+pub const IPPROTO_RAW = 255;
+
+/// IP6 hop-by-hop options
+pub const IPPROTO_HOPOPTS = 0;
+
+/// group mgmt protocol
+pub const IPPROTO_IGMP = 2;
+
+/// gateway^2 (deprecated)
+pub const IPPROTO_GGP = 3;
+
+/// IPv4 encapsulation
+pub const IPPROTO_IPV4 = 4;
+
+/// for compatibility
+pub const IPPROTO_IPIP = IPPROTO_IPV4;
+
+/// Stream protocol II
+pub const IPPROTO_ST = 7;
+
+/// exterior gateway protocol
+pub const IPPROTO_EGP = 8;
+
+/// private interior gateway
+pub const IPPROTO_PIGP = 9;
+
+/// BBN RCC Monitoring
+pub const IPPROTO_RCCMON = 10;
+
+/// network voice protocol
+pub const IPPROTO_NVPII = 11;
+
+/// pup
+pub const IPPROTO_PUP = 12;
+
+/// Argus
+pub const IPPROTO_ARGUS = 13;
+
+/// EMCON
+pub const IPPROTO_EMCON = 14;
+
+/// Cross Net Debugger
+pub const IPPROTO_XNET = 15;
+
+/// Chaos
+pub const IPPROTO_CHAOS = 16;
+
+/// Multiplexing
+pub const IPPROTO_MUX = 18;
+
+/// DCN Measurement Subsystems
+pub const IPPROTO_MEAS = 19;
+
+/// Host Monitoring
+pub const IPPROTO_HMP = 20;
+
+/// Packet Radio Measurement
+pub const IPPROTO_PRM = 21;
+
+/// xns idp
+pub const IPPROTO_IDP = 22;
+
+/// Trunk-1
+pub const IPPROTO_TRUNK1 = 23;
+
+/// Trunk-2
+pub const IPPROTO_TRUNK2 = 24;
+
+/// Leaf-1
+pub const IPPROTO_LEAF1 = 25;
+
+/// Leaf-2
+pub const IPPROTO_LEAF2 = 26;
+
+/// Reliable Data
+pub const IPPROTO_RDP = 27;
+
+/// Reliable Transaction
+pub const IPPROTO_IRTP = 28;
+
+/// tp-4 w/ class negotiation
+pub const IPPROTO_TP = 29;
+
+/// Bulk Data Transfer
+pub const IPPROTO_BLT = 30;
+
+/// Network Services
+pub const IPPROTO_NSP = 31;
+
+/// Merit Internodal
+pub const IPPROTO_INP = 32;
+
+/// Datagram Congestion Control Protocol
+pub const IPPROTO_DCCP = 33;
+
+/// Third Party Connect
+pub const IPPROTO_3PC = 34;
+
+/// InterDomain Policy Routing
+pub const IPPROTO_IDPR = 35;
+
+/// XTP
+pub const IPPROTO_XTP = 36;
+
+/// Datagram Delivery
+pub const IPPROTO_DDP = 37;
+
+/// Control Message Transport
+pub const IPPROTO_CMTP = 38;
+
+/// TP++ Transport
+pub const IPPROTO_TPXX = 39;
+
+/// IL transport protocol
+pub const IPPROTO_IL = 40;
+
+/// Source Demand Routing
+pub const IPPROTO_SDRP = 42;
+
+/// IP6 routing header
+pub const IPPROTO_ROUTING = 43;
+
+/// IP6 fragmentation header
+pub const IPPROTO_FRAGMENT = 44;
+
+/// InterDomain Routing
+pub const IPPROTO_IDRP = 45;
+
+/// resource reservation
+pub const IPPROTO_RSVP = 46;
+
+/// General Routing Encap.
+pub const IPPROTO_GRE = 47;
+
+/// Mobile Host Routing
+pub const IPPROTO_MHRP = 48;
+
+/// BHA
+pub const IPPROTO_BHA = 49;
+
+/// IP6 Encap Sec. Payload
+pub const IPPROTO_ESP = 50;
+
+/// IP6 Auth Header
+pub const IPPROTO_AH = 51;
+
+/// Integ. Net Layer Security
+pub const IPPROTO_INLSP = 52;
+
+/// IP with encryption
+pub const IPPROTO_SWIPE = 53;
+
+/// Next Hop Resolution
+pub const IPPROTO_NHRP = 54;
+
+/// IP Mobility
+pub const IPPROTO_MOBILE = 55;
+
+/// Transport Layer Security
+pub const IPPROTO_TLSP = 56;
+
+/// SKIP
+pub const IPPROTO_SKIP = 57;
+
+/// ICMP6
+pub const IPPROTO_ICMPV6 = 58;
+
+/// IP6 no next header
+pub const IPPROTO_NONE = 59;
+
+/// IP6 destination option
+pub const IPPROTO_DSTOPTS = 60;
+
+/// any host internal protocol
+pub const IPPROTO_AHIP = 61;
+
+/// CFTP
+pub const IPPROTO_CFTP = 62;
+
+/// "hello" routing protocol
+pub const IPPROTO_HELLO = 63;
+
+/// SATNET/Backroom EXPAK
+pub const IPPROTO_SATEXPAK = 64;
+
+/// Kryptolan
+pub const IPPROTO_KRYPTOLAN = 65;
+
+/// Remote Virtual Disk
+pub const IPPROTO_RVD = 66;
+
+/// Pluribus Packet Core
+pub const IPPROTO_IPPC = 67;
+
+/// Any distributed FS
+pub const IPPROTO_ADFS = 68;
+
+/// Satnet Monitoring
+pub const IPPROTO_SATMON = 69;
+
+/// VISA Protocol
+pub const IPPROTO_VISA = 70;
+
+/// Packet Core Utility
+pub const IPPROTO_IPCV = 71;
+
+/// Comp. Prot. Net. Executive
+pub const IPPROTO_CPNX = 72;
+
+/// Comp. Prot. HeartBeat
+pub const IPPROTO_CPHB = 73;
+
+/// Wang Span Network
+pub const IPPROTO_WSN = 74;
+
+/// Packet Video Protocol
+pub const IPPROTO_PVP = 75;
+
+/// BackRoom SATNET Monitoring
+pub const IPPROTO_BRSATMON = 76;
+
+/// Sun net disk proto (temp.)
+pub const IPPROTO_ND = 77;
+
+/// WIDEBAND Monitoring
+pub const IPPROTO_WBMON = 78;
+
+/// WIDEBAND EXPAK
+pub const IPPROTO_WBEXPAK = 79;
+
+/// ISO cnlp
+pub const IPPROTO_EON = 80;
+
+/// VMTP
+pub const IPPROTO_VMTP = 81;
+
+/// Secure VMTP
+pub const IPPROTO_SVMTP = 82;
+
+/// Banyon VINES
+pub const IPPROTO_VINES = 83;
+
+/// TTP
+pub const IPPROTO_TTP = 84;
+
+/// NSFNET-IGP
+pub const IPPROTO_IGP = 85;
+
+/// dissimilar gateway prot.
+pub const IPPROTO_DGP = 86;
+
+/// TCF
+pub const IPPROTO_TCF = 87;
+
+/// Cisco/GXS IGRP
+pub const IPPROTO_IGRP = 88;
+
+/// OSPFIGP
+pub const IPPROTO_OSPFIGP = 89;
+
+/// Strite RPC protocol
+pub const IPPROTO_SRPC = 90;
+
+/// Locus Address Resoloution
+pub const IPPROTO_LARP = 91;
+
+/// Multicast Transport
+pub const IPPROTO_MTP = 92;
+
+/// AX.25 Frames
+pub const IPPROTO_AX25 = 93;
+
+/// IP encapsulated in IP
+pub const IPPROTO_IPEIP = 94;
+
+/// Mobile Int.ing control
+pub const IPPROTO_MICP = 95;
+
+/// Semaphore Comm. security
+pub const IPPROTO_SCCSP = 96;
+
+/// Ethernet IP encapsulation
+pub const IPPROTO_ETHERIP = 97;
+
+/// encapsulation header
+pub const IPPROTO_ENCAP = 98;
+
+/// any private encr. scheme
+pub const IPPROTO_APES = 99;
+
+/// GMTP
+pub const IPPROTO_GMTP = 100;
+
+/// payload compression (IPComp)
+pub const IPPROTO_IPCOMP = 108;
+
+/// SCTP
+pub const IPPROTO_SCTP = 132;
+
+/// IPv6 Mobility Header
+pub const IPPROTO_MH = 135;
+
+/// UDP-Lite
+pub const IPPROTO_UDPLITE = 136;
+
+/// IP6 Host Identity Protocol
+pub const IPPROTO_HIP = 139;
+
+/// IP6 Shim6 Protocol
+pub const IPPROTO_SHIM6 = 140;
+
+/// Protocol Independent Mcast
+pub const IPPROTO_PIM = 103;
+
+/// CARP
+pub const IPPROTO_CARP = 112;
+
+/// PGM
+pub const IPPROTO_PGM = 113;
+
+/// MPLS-in-IP
+pub const IPPROTO_MPLS = 137;
+
+/// PFSYNC
+pub const IPPROTO_PFSYNC = 240;
+
+/// Reserved
+pub const IPPROTO_RESERVED_253 = 253;
+
+/// Reserved
+pub const IPPROTO_RESERVED_254 = 254;
+
+pub const rlimit_resource = enum(c_int) {
+ CPU = 0,
+ FSIZE = 1,
+ DATA = 2,
+ STACK = 3,
+ CORE = 4,
+ RSS = 5,
+ MEMLOCK = 6,
+ NPROC = 7,
+ NOFILE = 8,
+ SBSIZE = 9,
+ VMEM = 10,
+ NPTS = 11,
+ SWAP = 12,
+ KQUEUES = 13,
+ UMTXP = 14,
+ _,
+
+ pub const AS: rlimit_resource = .VMEM;
+};
+
+pub const rlim_t = i64;
+
+/// No limit
+pub const RLIM_INFINITY: rlim_t = (1 << 63) - 1;
+
+pub const RLIM_SAVED_MAX = RLIM_INFINITY;
+pub const RLIM_SAVED_CUR = RLIM_INFINITY;
+
+pub const rlimit = extern struct {
+ /// Soft limit
+ cur: rlim_t,
+ /// Hard limit
+ max: rlim_t,
+};
+
+pub const SHUT_RD = 0;
+pub const SHUT_WR = 1;
+pub const SHUT_RDWR = 2;
+
+pub const nfds_t = u32;
+
+pub const pollfd = extern struct {
+ fd: fd_t,
+ events: i16,
+ revents: i16,
+};
+
+/// any readable data available.
+pub const POLLIN = 0x0001;
+/// OOB/Urgent readable data.
+pub const POLLPRI = 0x0002;
+/// file descriptor is writeable.
+pub const POLLOUT = 0x0004;
+/// non-OOB/URG data available.
+pub const POLLRDNORM = 0x0040;
+/// no write type differentiation.
+pub const POLLWRNORM = POLLOUT;
+/// OOB/Urgent readable data.
+pub const POLLRDBAND = 0x0080;
+/// OOB/Urgent data can be written.
+pub const POLLWRBAND = 0x0100;
+/// like POLLIN, except ignore EOF.
+pub const POLLINIGNEOF = 0x2000;
+/// some poll error occurred.
+pub const POLLERR = 0x0008;
+/// file descriptor was "hung up".
+pub const POLLHUP = 0x0010;
+/// requested events "invalid".
+pub const POLLNVAL = 0x0020;
+
+pub const POLLSTANDARD = POLLIN | POLLPRI | POLLOUT | POLLRDNORM | POLLRDBAND |
+ POLLWRBAND | POLLERR | POLLHUP | POLLNVAL;
diff --git a/lib/std/c/generic.zig b/lib/std/c/generic.zig
new file mode 100644
index 0000000000..cf374d195c
--- /dev/null
+++ b/lib/std/c/generic.zig
@@ -0,0 +1,22 @@
+const std = @import("../std.zig");
+const Stat = std.c.Stat;
+const timespec = std.c.timespec;
+const Sigaction = std.c.Sigaction;
+const sigset_t = std.c.sigset_t;
+
+pub extern "c" fn realpath(noalias file_name: [*:0]const u8, noalias resolved_name: [*]u8) ?[*:0]u8;
+pub extern "c" fn fstatat(dirfd: fd_t, path: [*:0]const u8, stat_buf: *Stat, flags: u32) c_int;
+pub extern "c" fn clock_getres(clk_id: c_int, tp: *timespec) c_int;
+pub extern "c" fn clock_gettime(clk_id: c_int, tp: *timespec) c_int;
+pub extern "c" fn fstat(fd: fd_t, buf: *Stat) c_int;
+pub extern "c" fn getrusage(who: c_int, usage: *rusage) c_int;
+pub extern "c" fn gettimeofday(noalias tv: ?*timeval, noalias tz: ?*timezone) c_int;
+pub extern "c" fn nanosleep(rqtp: *const timespec, rmtp: ?*timespec) c_int;
+pub extern "c" fn sched_yield() c_int;
+pub extern "c" fn sigaction(sig: c_int, noalias act: ?*const Sigaction, noalias oact: ?*Sigaction) c_int;
+pub extern "c" fn sigprocmask(how: c_int, noalias set: ?*const sigset_t, noalias oset: ?*sigset_t) c_int;
+pub extern "c" fn socket(domain: c_uint, sock_type: c_uint, protocol: c_uint) c_int;
+pub extern "c" fn stat(noalias path: [*:0]const u8, noalias buf: *Stat) c_int;
+pub extern "c" fn sigfillset(set: ?*sigset_t) void;
+pub extern "c" fn alarm(seconds: c_uint) c_uint;
+pub extern "c" fn sigwait(set: ?*sigset_t, sig: ?*c_int) c_int;
diff --git a/lib/std/c/haiku.zig b/lib/std/c/haiku.zig
index be6c180bed..5b2ef1703b 100644
--- a/lib/std/c/haiku.zig
+++ b/lib/std/c/haiku.zig
@@ -1,6 +1,5 @@
-//
const std = @import("../std.zig");
-const builtin = std.builtin;
+const maxInt = std.math.maxInt;
usingnamespace std.c;
@@ -19,7 +18,7 @@ pub extern "c" fn _get_next_image_info(team: c_int, cookie: *i32, image_info: *i
pub extern "c" fn _kern_read_dir(fd: c_int, buf_ptr: [*]u8, nbytes: usize, maxcount: u32) usize;
-pub extern "c" fn _kern_read_stat(fd: c_int, path_ptr: [*]u8, traverse_link: bool, libc_stat: *libc_stat, stat_size: i32) usize;
+pub extern "c" fn _kern_read_stat(fd: c_int, path_ptr: [*]u8, traverse_link: bool, st: *Stat, stat_size: i32) usize;
pub extern "c" fn _kern_get_current_team() i32;
@@ -111,3 +110,1374 @@ pub const EAI = enum(c_int) {
};
pub const EAI_MAX = 15;
+
+pub const fd_t = c_int;
+pub const pid_t = c_int;
+pub const uid_t = u32;
+pub const gid_t = u32;
+pub const mode_t = c_uint;
+
+pub const socklen_t = u32;
+
+/// Renamed from `kevent` to `Kevent` to avoid conflict with function name.
+pub const Kevent = extern struct {
+ ident: usize,
+ filter: i16,
+ flags: u16,
+ fflags: u32,
+ data: i64,
+ udata: usize,
+ // TODO ext
+};
+
+// Modes and flags for dlopen()
+// include/dlfcn.h
+
+pub const POLLIN = 0x0001;
+pub const POLLERR = 0x0004;
+pub const POLLNVAL = 0x1000;
+pub const POLLHUP = 0x0080;
+
+/// Bind function calls lazily.
+pub const RTLD_LAZY = 1;
+
+/// Bind function calls immediately.
+pub const RTLD_NOW = 2;
+
+pub const RTLD_MODEMASK = 0x3;
+
+/// Make symbols globally available.
+pub const RTLD_GLOBAL = 0x100;
+
+/// Opposite of RTLD_GLOBAL, and the default.
+pub const RTLD_LOCAL = 0;
+
+/// Trace loaded objects and exit.
+pub const RTLD_TRACE = 0x200;
+
+/// Do not remove members.
+pub const RTLD_NODELETE = 0x01000;
+
+/// Do not load if not already loaded.
+pub const RTLD_NOLOAD = 0x02000;
+
+pub const dl_phdr_info = extern struct {
+ dlpi_addr: usize,
+ dlpi_name: ?[*:0]const u8,
+ dlpi_phdr: [*]std.elf.Phdr,
+ dlpi_phnum: u16,
+};
+
+pub const Flock = extern struct {
+ l_start: off_t,
+ l_len: off_t,
+ l_pid: pid_t,
+ l_type: i16,
+ l_whence: i16,
+ l_sysid: i32,
+ __unused: [4]u8,
+};
+
+pub const msghdr = extern struct {
+ /// optional address
+ msg_name: ?*sockaddr,
+
+ /// size of address
+ msg_namelen: socklen_t,
+
+ /// scatter/gather array
+ msg_iov: [*]iovec,
+
+ /// # elements in msg_iov
+ msg_iovlen: i32,
+
+ /// ancillary data
+ msg_control: ?*c_void,
+
+ /// ancillary data buffer len
+ msg_controllen: socklen_t,
+
+ /// flags on received message
+ msg_flags: i32,
+};
+
+pub const msghdr_const = extern struct {
+ /// optional address
+ msg_name: ?*const sockaddr,
+
+ /// size of address
+ msg_namelen: socklen_t,
+
+ /// scatter/gather array
+ msg_iov: [*]iovec_const,
+
+ /// # elements in msg_iov
+ msg_iovlen: i32,
+
+ /// ancillary data
+ msg_control: ?*c_void,
+
+ /// ancillary data buffer len
+ msg_controllen: socklen_t,
+
+ /// flags on received message
+ msg_flags: i32,
+};
+
+pub const off_t = i64;
+pub const ino_t = u64;
+
+pub const nfds_t = u32;
+
+pub const pollfd = extern struct {
+ fd: i32,
+ events: i16,
+ revents: i16,
+};
+
+pub const Stat = extern struct {
+ dev: i32,
+ ino: u64,
+ mode: u32,
+ nlink: i32,
+ uid: i32,
+ gid: i32,
+ size: i64,
+ rdev: i32,
+ blksize: i32,
+ atim: timespec,
+ mtim: timespec,
+ ctim: timespec,
+ crtim: timespec,
+ st_type: u32,
+ blocks: i64,
+
+ pub fn atime(self: @This()) timespec {
+ return self.atim;
+ }
+ pub fn mtime(self: @This()) timespec {
+ return self.mtim;
+ }
+ pub fn ctime(self: @This()) timespec {
+ return self.ctim;
+ }
+ pub fn crtime(self: @This()) timespec {
+ return self.crtim;
+ }
+};
+
+pub const timespec = extern struct {
+ tv_sec: isize,
+ tv_nsec: isize,
+};
+
+pub const dirent = extern struct {
+ d_dev: i32,
+ d_pdev: i32,
+ d_ino: i64,
+ d_pino: i64,
+ d_reclen: u16,
+ d_name: [256]u8,
+
+ pub fn reclen(self: dirent) u16 {
+ return self.d_reclen;
+ }
+};
+
+pub const image_info = extern struct {
+ id: u32,
+ type: u32,
+ sequence: i32,
+ init_order: i32,
+ init_routine: *c_void,
+ term_routine: *c_void,
+ device: i32,
+ node: i32,
+ name: [1024]u8,
+ text: *c_void,
+ data: *c_void,
+ text_size: i32,
+ data_size: i32,
+ api_version: i32,
+ abi: i32,
+};
+
+pub const system_info = extern struct {
+ boot_time: i64,
+ cpu_count: u32,
+ max_pages: u64,
+ used_pages: u64,
+ cached_pages: u64,
+ block_cache_pages: u64,
+ ignored_pages: u64,
+ needed_memory: u64,
+ free_memory: u64,
+ max_swap_pages: u64,
+ free_swap_pages: u64,
+ page_faults: u32,
+ max_sems: u32,
+ used_sems: u32,
+ max_ports: u32,
+ used_ports: u32,
+ max_threads: u32,
+ used_threads: u32,
+ max_teams: u32,
+ used_teams: u32,
+ kernel_name: [256]u8,
+ kernel_build_date: [32]u8,
+ kernel_build_time: [32]u8,
+ kernel_version: i64,
+ abi: u32,
+};
+
+pub const in_port_t = u16;
+pub const sa_family_t = u8;
+
+pub const sockaddr = extern struct {
+ /// total length
+ len: u8,
+
+ /// address family
+ family: sa_family_t,
+
+ /// actually longer; address value
+ data: [14]u8,
+};
+
+pub const sockaddr_storage = std.x.os.Socket.Address.Native.Storage;
+
+pub const sockaddr_in = extern struct {
+ len: u8 = @sizeOf(sockaddr_in),
+ family: sa_family_t = AF_INET,
+ port: in_port_t,
+ addr: u32,
+ zero: [8]u8 = [8]u8{ 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+
+pub const sockaddr_in6 = extern struct {
+ len: u8 = @sizeOf(sockaddr_in6),
+ family: sa_family_t = AF_INET6,
+ port: in_port_t,
+ flowinfo: u32,
+ addr: [16]u8,
+ scope_id: u32,
+};
+
+pub const sockaddr_un = extern struct {
+ len: u8 = @sizeOf(sockaddr_un),
+ family: sa_family_t = AF_UNIX,
+ path: [104]u8,
+};
+
+pub const CTL_KERN = 1;
+pub const CTL_DEBUG = 5;
+
+pub const KERN_PROC = 14; // struct: process entries
+pub const KERN_PROC_PATHNAME = 12; // path to executable
+
+pub const PATH_MAX = 1024;
+
+pub const STDIN_FILENO = 0;
+pub const STDOUT_FILENO = 1;
+pub const STDERR_FILENO = 2;
+
+pub const PROT_NONE = 0;
+pub const PROT_READ = 1;
+pub const PROT_WRITE = 2;
+pub const PROT_EXEC = 4;
+
+pub const CLOCK_MONOTONIC = 0;
+pub const CLOCK_REALTIME = -1;
+pub const CLOCK_PROCESS_CPUTIME_ID = -2;
+pub const CLOCK_THREAD_CPUTIME_ID = -3;
+
+pub const MAP_FAILED = @intToPtr(*c_void, maxInt(usize));
+pub const MAP_SHARED = 0x0001;
+pub const MAP_PRIVATE = 0x0002;
+pub const MAP_FIXED = 0x0010;
+pub const MAP_STACK = 0x0400;
+pub const MAP_NOSYNC = 0x0800;
+pub const MAP_ANON = 0x1000;
+pub const MAP_ANONYMOUS = MAP_ANON;
+pub const MAP_FILE = 0;
+
+pub const MAP_GUARD = 0x00002000;
+pub const MAP_EXCL = 0x00004000;
+pub const MAP_NOCORE = 0x00020000;
+pub const MAP_PREFAULT_READ = 0x00040000;
+pub const MAP_32BIT = 0x00080000;
+
+pub const WNOHANG = 0x1;
+pub const WUNTRACED = 0x2;
+pub const WSTOPPED = 0x10;
+pub const WCONTINUED = 0x4;
+pub const WNOWAIT = 0x20;
+pub const WEXITED = 0x08;
+
+pub const SA_ONSTACK = 0x20;
+pub const SA_RESTART = 0x10;
+pub const SA_RESETHAND = 0x04;
+pub const SA_NOCLDSTOP = 0x01;
+pub const SA_NODEFER = 0x08;
+pub const SA_NOCLDWAIT = 0x02;
+pub const SA_SIGINFO = 0x40;
+pub const SA_NOMASK = SA_NODEFER;
+pub const SA_STACK = SA_ONSTACK;
+pub const SA_ONESHOT = SA_RESETHAND;
+
+pub const SIGHUP = 1;
+pub const SIGINT = 2;
+pub const SIGQUIT = 3;
+pub const SIGILL = 4;
+pub const SIGCHLD = 5;
+pub const SIGABRT = 6;
+pub const SIGIOT = SIGABRT;
+pub const SIGPIPE = 7;
+pub const SIGFPE = 8;
+pub const SIGKILL = 9;
+pub const SIGSTOP = 10;
+pub const SIGSEGV = 11;
+pub const SIGCONT = 12;
+pub const SIGTSTP = 13;
+pub const SIGALRM = 14;
+pub const SIGTERM = 15;
+pub const SIGTTIN = 16;
+pub const SIGTTOU = 17;
+pub const SIGUSR1 = 18;
+pub const SIGUSR2 = 19;
+pub const SIGWINCH = 20;
+pub const SIGKILLTHR = 21;
+pub const SIGTRAP = 22;
+pub const SIGPOLL = 23;
+pub const SIGPROF = 24;
+pub const SIGSYS = 25;
+pub const SIGURG = 26;
+pub const SIGVTALRM = 27;
+pub const SIGXCPU = 28;
+pub const SIGXFSZ = 29;
+pub const SIGBUS = 30;
+pub const SIGRESERVED1 = 31;
+pub const SIGRESERVED2 = 32;
+
+// TODO: check
+pub const SIGRTMIN = 65;
+pub const SIGRTMAX = 126;
+
+// access function
+pub const F_OK = 0; // test for existence of file
+pub const X_OK = 1; // test for execute or search permission
+pub const W_OK = 2; // test for write permission
+pub const R_OK = 4; // test for read permission
+
+pub const O_RDONLY = 0x0000;
+pub const O_WRONLY = 0x0001;
+pub const O_RDWR = 0x0002;
+pub const O_ACCMODE = 0x0003;
+
+pub const O_SHLOCK = 0x0010;
+pub const O_EXLOCK = 0x0020;
+
+pub const O_CREAT = 0x0200;
+pub const O_EXCL = 0x0800;
+pub const O_NOCTTY = 0x8000;
+pub const O_TRUNC = 0x0400;
+pub const O_APPEND = 0x0008;
+pub const O_NONBLOCK = 0x0004;
+pub const O_DSYNC = 0o10000;
+pub const O_SYNC = 0x0080;
+pub const O_RSYNC = 0o4010000;
+pub const O_DIRECTORY = 0x20000;
+pub const O_NOFOLLOW = 0x0100;
+pub const O_CLOEXEC = 0x00100000;
+
+pub const O_ASYNC = 0x0040;
+pub const O_DIRECT = 0x00010000;
+pub const O_NOATIME = 0o1000000;
+pub const O_PATH = 0o10000000;
+pub const O_TMPFILE = 0o20200000;
+pub const O_NDELAY = O_NONBLOCK;
+
+pub const F_DUPFD = 0;
+pub const F_GETFD = 1;
+pub const F_SETFD = 2;
+pub const F_GETFL = 3;
+pub const F_SETFL = 4;
+
+pub const F_GETOWN = 5;
+pub const F_SETOWN = 6;
+
+pub const F_GETLK = 11;
+pub const F_SETLK = 12;
+pub const F_SETLKW = 13;
+
+pub const F_RDLCK = 1;
+pub const F_WRLCK = 3;
+pub const F_UNLCK = 2;
+
+pub const LOCK_SH = 1;
+pub const LOCK_EX = 2;
+pub const LOCK_UN = 8;
+pub const LOCK_NB = 4;
+
+pub const F_SETOWN_EX = 15;
+pub const F_GETOWN_EX = 16;
+
+pub const F_GETOWNER_UIDS = 17;
+
+pub const FD_CLOEXEC = 1;
+
+pub const SEEK_SET = 0;
+pub const SEEK_CUR = 1;
+pub const SEEK_END = 2;
+
+pub const SIG_BLOCK = 1;
+pub const SIG_UNBLOCK = 2;
+pub const SIG_SETMASK = 3;
+
+pub const SOCK_STREAM = 1;
+pub const SOCK_DGRAM = 2;
+pub const SOCK_RAW = 3;
+pub const SOCK_RDM = 4;
+pub const SOCK_SEQPACKET = 5;
+
+pub const SOCK_CLOEXEC = 0x10000000;
+pub const SOCK_NONBLOCK = 0x20000000;
+
+pub const SO_DEBUG = 0x00000001;
+pub const SO_ACCEPTCONN = 0x00000002;
+pub const SO_REUSEADDR = 0x00000004;
+pub const SO_KEEPALIVE = 0x00000008;
+pub const SO_DONTROUTE = 0x00000010;
+pub const SO_BROADCAST = 0x00000020;
+pub const SO_USELOOPBACK = 0x00000040;
+pub const SO_LINGER = 0x00000080;
+pub const SO_OOBINLINE = 0x00000100;
+pub const SO_REUSEPORT = 0x00000200;
+pub const SO_TIMESTAMP = 0x00000400;
+pub const SO_NOSIGPIPE = 0x00000800;
+pub const SO_ACCEPTFILTER = 0x00001000;
+pub const SO_BINTIME = 0x00002000;
+pub const SO_NO_OFFLOAD = 0x00004000;
+pub const SO_NO_DDP = 0x00008000;
+pub const SO_REUSEPORT_LB = 0x00010000;
+
+pub const SO_SNDBUF = 0x1001;
+pub const SO_RCVBUF = 0x1002;
+pub const SO_SNDLOWAT = 0x1003;
+pub const SO_RCVLOWAT = 0x1004;
+pub const SO_SNDTIMEO = 0x1005;
+pub const SO_RCVTIMEO = 0x1006;
+pub const SO_ERROR = 0x1007;
+pub const SO_TYPE = 0x1008;
+pub const SO_LABEL = 0x1009;
+pub const SO_PEERLABEL = 0x1010;
+pub const SO_LISTENQLIMIT = 0x1011;
+pub const SO_LISTENQLEN = 0x1012;
+pub const SO_LISTENINCQLEN = 0x1013;
+pub const SO_SETFIB = 0x1014;
+pub const SO_USER_COOKIE = 0x1015;
+pub const SO_PROTOCOL = 0x1016;
+pub const SO_PROTOTYPE = SO_PROTOCOL;
+pub const SO_TS_CLOCK = 0x1017;
+pub const SO_MAX_PACING_RATE = 0x1018;
+pub const SO_DOMAIN = 0x1019;
+
+pub const SOL_SOCKET = 0xffff;
+
+pub const PF_UNSPEC = AF_UNSPEC;
+pub const PF_LOCAL = AF_LOCAL;
+pub const PF_UNIX = PF_LOCAL;
+pub const PF_INET = AF_INET;
+pub const PF_IMPLINK = AF_IMPLINK;
+pub const PF_PUP = AF_PUP;
+pub const PF_CHAOS = AF_CHAOS;
+pub const PF_NETBIOS = AF_NETBIOS;
+pub const PF_ISO = AF_ISO;
+pub const PF_OSI = AF_ISO;
+pub const PF_ECMA = AF_ECMA;
+pub const PF_DATAKIT = AF_DATAKIT;
+pub const PF_CCITT = AF_CCITT;
+pub const PF_DECnet = AF_DECnet;
+pub const PF_DLI = AF_DLI;
+pub const PF_LAT = AF_LAT;
+pub const PF_HYLINK = AF_HYLINK;
+pub const PF_APPLETALK = AF_APPLETALK;
+pub const PF_ROUTE = AF_ROUTE;
+pub const PF_LINK = AF_LINK;
+pub const PF_XTP = pseudo_AF_XTP;
+pub const PF_COIP = AF_COIP;
+pub const PF_CNT = AF_CNT;
+pub const PF_SIP = AF_SIP;
+pub const PF_IPX = AF_IPX;
+pub const PF_RTIP = pseudo_AF_RTIP;
+pub const PF_PIP = psuedo_AF_PIP;
+pub const PF_ISDN = AF_ISDN;
+pub const PF_KEY = pseudo_AF_KEY;
+pub const PF_INET6 = pseudo_AF_INET6;
+pub const PF_NATM = AF_NATM;
+pub const PF_ATM = AF_ATM;
+pub const PF_NETGRAPH = AF_NETGRAPH;
+pub const PF_SLOW = AF_SLOW;
+pub const PF_SCLUSTER = AF_SCLUSTER;
+pub const PF_ARP = AF_ARP;
+pub const PF_BLUETOOTH = AF_BLUETOOTH;
+pub const PF_IEEE80211 = AF_IEEE80211;
+pub const PF_INET_SDP = AF_INET_SDP;
+pub const PF_INET6_SDP = AF_INET6_SDP;
+pub const PF_MAX = AF_MAX;
+
+pub const AF_UNSPEC = 0;
+pub const AF_UNIX = 1;
+pub const AF_LOCAL = AF_UNIX;
+pub const AF_FILE = AF_LOCAL;
+pub const AF_INET = 2;
+pub const AF_IMPLINK = 3;
+pub const AF_PUP = 4;
+pub const AF_CHAOS = 5;
+pub const AF_NETBIOS = 6;
+pub const AF_ISO = 7;
+pub const AF_OSI = AF_ISO;
+pub const AF_ECMA = 8;
+pub const AF_DATAKIT = 9;
+pub const AF_CCITT = 10;
+pub const AF_SNA = 11;
+pub const AF_DECnet = 12;
+pub const AF_DLI = 13;
+pub const AF_LAT = 14;
+pub const AF_HYLINK = 15;
+pub const AF_APPLETALK = 16;
+pub const AF_ROUTE = 17;
+pub const AF_LINK = 18;
+pub const pseudo_AF_XTP = 19;
+pub const AF_COIP = 20;
+pub const AF_CNT = 21;
+pub const pseudo_AF_RTIP = 22;
+pub const AF_IPX = 23;
+pub const AF_SIP = 24;
+pub const pseudo_AF_PIP = 25;
+pub const AF_ISDN = 26;
+pub const AF_E164 = AF_ISDN;
+pub const pseudo_AF_KEY = 27;
+pub const AF_INET6 = 28;
+pub const AF_NATM = 29;
+pub const AF_ATM = 30;
+pub const pseudo_AF_HDRCMPLT = 31;
+pub const AF_NETGRAPH = 32;
+pub const AF_SLOW = 33;
+pub const AF_SCLUSTER = 34;
+pub const AF_ARP = 35;
+pub const AF_BLUETOOTH = 36;
+pub const AF_IEEE80211 = 37;
+pub const AF_INET_SDP = 40;
+pub const AF_INET6_SDP = 42;
+pub const AF_MAX = 42;
+
+pub const DT_UNKNOWN = 0;
+pub const DT_FIFO = 1;
+pub const DT_CHR = 2;
+pub const DT_DIR = 4;
+pub const DT_BLK = 6;
+pub const DT_REG = 8;
+pub const DT_LNK = 10;
+pub const DT_SOCK = 12;
+pub const DT_WHT = 14;
+
+/// add event to kq (implies enable)
+pub const EV_ADD = 0x0001;
+
+/// delete event from kq
+pub const EV_DELETE = 0x0002;
+
+/// enable event
+pub const EV_ENABLE = 0x0004;
+
+/// disable event (not reported)
+pub const EV_DISABLE = 0x0008;
+
+/// only report one occurrence
+pub const EV_ONESHOT = 0x0010;
+
+/// clear event state after reporting
+pub const EV_CLEAR = 0x0020;
+
+/// force immediate event output
+/// ... with or without EV_ERROR
+/// ... use KEVENT_FLAG_ERROR_EVENTS
+/// on syscalls supporting flags
+pub const EV_RECEIPT = 0x0040;
+
+/// disable event after reporting
+pub const EV_DISPATCH = 0x0080;
+
+pub const EVFILT_READ = -1;
+pub const EVFILT_WRITE = -2;
+
+/// attached to aio requests
+pub const EVFILT_AIO = -3;
+
+/// attached to vnodes
+pub const EVFILT_VNODE = -4;
+
+/// attached to struct proc
+pub const EVFILT_PROC = -5;
+
+/// attached to struct proc
+pub const EVFILT_SIGNAL = -6;
+
+/// timers
+pub const EVFILT_TIMER = -7;
+
+/// Process descriptors
+pub const EVFILT_PROCDESC = -8;
+
+/// Filesystem events
+pub const EVFILT_FS = -9;
+
+pub const EVFILT_LIO = -10;
+
+/// User events
+pub const EVFILT_USER = -11;
+
+/// Sendfile events
+pub const EVFILT_SENDFILE = -12;
+
+pub const EVFILT_EMPTY = -13;
+
+pub const TCGETA = 0x8000;
+pub const TCSETA = 0x8001;
+pub const TCSETAW = 0x8004;
+pub const TCSETAF = 0x8003;
+pub const TCSBRK = 08005;
+pub const TCXONC = 0x8007;
+pub const TCFLSH = 0x8006;
+
+pub const TIOCSCTTY = 0x8017;
+pub const TIOCGPGRP = 0x8015;
+pub const TIOCSPGRP = 0x8016;
+pub const TIOCGWINSZ = 0x8012;
+pub const TIOCSWINSZ = 0x8013;
+pub const TIOCMGET = 0x8018;
+pub const TIOCMBIS = 0x8022;
+pub const TIOCMBIC = 0x8023;
+pub const TIOCMSET = 0x8019;
+pub const FIONREAD = 0xbe000001;
+pub const FIONBIO = 0xbe000000;
+pub const TIOCSBRK = 0x8020;
+pub const TIOCCBRK = 0x8021;
+pub const TIOCGSID = 0x8024;
+
+pub fn WEXITSTATUS(s: u32) u8 {
+ return @intCast(u8, s & 0xff);
+}
+
+pub fn WTERMSIG(s: u32) u32 {
+ return (s >> 8) & 0xff;
+}
+
+pub fn WSTOPSIG(s: u32) u32 {
+ return WEXITSTATUS(s);
+}
+
+pub fn WIFEXITED(s: u32) bool {
+ return WTERMSIG(s) == 0;
+}
+
+pub fn WIFSTOPPED(s: u32) bool {
+ return ((s >> 16) & 0xff) != 0;
+}
+
+pub fn WIFSIGNALED(s: u32) bool {
+ return ((s >> 8) & 0xff) != 0;
+}
+
+pub const winsize = extern struct {
+ ws_row: u16,
+ ws_col: u16,
+ ws_xpixel: u16,
+ ws_ypixel: u16,
+};
+
+const NSIG = 32;
+
+pub const SIG_ERR = @intToPtr(fn (i32) callconv(.C) void, maxInt(usize));
+pub const SIG_DFL = @intToPtr(fn (i32) callconv(.C) void, 0);
+pub const SIG_IGN = @intToPtr(fn (i32) callconv(.C) void, 1);
+
+/// Renamed from `sigaction` to `Sigaction` to avoid conflict with the syscall.
+pub const Sigaction = extern struct {
+ /// signal handler
+ __sigaction_u: extern union {
+ __sa_handler: fn (i32) callconv(.C) void,
+ __sa_sigaction: fn (i32, *__siginfo, usize) callconv(.C) void,
+ },
+
+ /// see signal options
+ sa_flags: u32,
+
+ /// signal mask to apply
+ sa_mask: sigset_t,
+};
+
+pub const _SIG_WORDS = 4;
+pub const _SIG_MAXSIG = 128;
+pub inline fn _SIG_IDX(sig: usize) usize {
+ return sig - 1;
+}
+pub inline fn _SIG_WORD(sig: usize) usize {
+ return_SIG_IDX(sig) >> 5;
+}
+pub inline fn _SIG_BIT(sig: usize) usize {
+ return 1 << (_SIG_IDX(sig) & 31);
+}
+pub inline fn _SIG_VALID(sig: usize) usize {
+ return sig <= _SIG_MAXSIG and sig > 0;
+}
+
+pub const sigset_t = extern struct {
+ __bits: [_SIG_WORDS]u32,
+};
+
+pub const E = enum(i32) {
+ /// No error occurred.
+ SUCCESS = 0,
+ PERM = -0x7ffffff1, // Operation not permitted
+ NOENT = -0x7fff9ffd, // No such file or directory
+ SRCH = -0x7fff8ff3, // No such process
+ INTR = -0x7ffffff6, // Interrupted system call
+ IO = -0x7fffffff, // Input/output error
+ NXIO = -0x7fff8ff5, // Device not configured
+ @"2BIG" = -0x7fff8fff, // Argument list too long
+ NOEXEC = -0x7fffecfe, // Exec format error
+ CHILD = -0x7fff8ffe, // No child processes
+ DEADLK = -0x7fff8ffd, // Resource deadlock avoided
+ NOMEM = -0x80000000, // Cannot allocate memory
+ ACCES = -0x7ffffffe, // Permission denied
+ FAULT = -0x7fffecff, // Bad address
+ BUSY = -0x7ffffff2, // Device busy
+ EXIST = -0x7fff9ffe, // File exists
+ XDEV = -0x7fff9ff5, // Cross-device link
+ NODEV = -0x7fff8ff9, // Operation not supported by device
+ NOTDIR = -0x7fff9ffb, // Not a directory
+ ISDIR = -0x7fff9ff7, // Is a directory
+ INVAL = -0x7ffffffb, // Invalid argument
+ NFILE = -0x7fff8ffa, // Too many open files in system
+ MFILE = -0x7fff9ff6, // Too many open files
+ NOTTY = -0x7fff8ff6, // Inappropriate ioctl for device
+ TXTBSY = -0x7fff8fc5, // Text file busy
+ FBIG = -0x7fff8ffc, // File too large
+ NOSPC = -0x7fff9ff9, // No space left on device
+ SPIPE = -0x7fff8ff4, // Illegal seek
+ ROFS = -0x7fff9ff8, // Read-only filesystem
+ MLINK = -0x7fff8ffb, // Too many links
+ PIPE = -0x7fff9ff3, // Broken pipe
+ BADF = -0x7fffa000, // Bad file descriptor
+
+ // math software
+ DOM = 33, // Numerical argument out of domain
+ RANGE = 34, // Result too large
+
+ // non-blocking and interrupt i/o
+
+ /// Also used for `WOULDBLOCK`.
+ AGAIN = -0x7ffffff5,
+ INPROGRESS = -0x7fff8fdc,
+ ALREADY = -0x7fff8fdb,
+
+ // ipc/network software -- argument errors
+ NOTSOCK = 38, // Socket operation on non-socket
+ DESTADDRREQ = 39, // Destination address required
+ MSGSIZE = 40, // Message too long
+ PROTOTYPE = 41, // Protocol wrong type for socket
+ NOPROTOOPT = 42, // Protocol not available
+ PROTONOSUPPORT = 43, // Protocol not supported
+ SOCKTNOSUPPORT = 44, // Socket type not supported
+ /// Also used for `NOTSUP`.
+ OPNOTSUPP = 45, // Operation not supported
+ PFNOSUPPORT = 46, // Protocol family not supported
+ AFNOSUPPORT = 47, // Address family not supported by protocol family
+ ADDRINUSE = 48, // Address already in use
+ ADDRNOTAVAIL = 49, // Can't assign requested address
+
+ // ipc/network software -- operational errors
+ NETDOWN = 50, // Network is down
+ NETUNREACH = 51, // Network is unreachable
+ NETRESET = 52, // Network dropped connection on reset
+ CONNABORTED = 53, // Software caused connection abort
+ CONNRESET = 54, // Connection reset by peer
+ NOBUFS = 55, // No buffer space available
+ ISCONN = 56, // Socket is already connected
+ NOTCONN = 57, // Socket is not connected
+ SHUTDOWN = 58, // Can't send after socket shutdown
+ TOOMANYREFS = 59, // Too many references: can't splice
+ TIMEDOUT = 60, // Operation timed out
+ CONNREFUSED = 61, // Connection refused
+
+ LOOP = 62, // Too many levels of symbolic links
+ NAMETOOLONG = 63, // File name too long
+
+ // should be rearranged
+ HOSTDOWN = 64, // Host is down
+ HOSTUNREACH = 65, // No route to host
+ NOTEMPTY = 66, // Directory not empty
+
+ // quotas & mush
+ PROCLIM = 67, // Too many processes
+ USERS = 68, // Too many users
+ DQUOT = 69, // Disc quota exceeded
+
+ // Network File System
+ STALE = 70, // Stale NFS file handle
+ REMOTE = 71, // Too many levels of remote in path
+ BADRPC = 72, // RPC struct is bad
+ RPCMISMATCH = 73, // RPC version wrong
+ PROGUNAVAIL = 74, // RPC prog. not avail
+ PROGMISMATCH = 75, // Program version wrong
+ PROCUNAVAIL = 76, // Bad procedure for program
+
+ NOLCK = 77, // No locks available
+ NOSYS = 78, // Function not implemented
+
+ FTYPE = 79, // Inappropriate file type or format
+ AUTH = 80, // Authentication error
+ NEEDAUTH = 81, // Need authenticator
+ IDRM = 82, // Identifier removed
+ NOMSG = 83, // No message of desired type
+ OVERFLOW = 84, // Value too large to be stored in data type
+ CANCELED = 85, // Operation canceled
+ ILSEQ = 86, // Illegal byte sequence
+ NOATTR = 87, // Attribute not found
+
+ DOOFUS = 88, // Programming error
+
+ BADMSG = 89, // Bad message
+ MULTIHOP = 90, // Multihop attempted
+ NOLINK = 91, // Link has been severed
+ PROTO = 92, // Protocol error
+
+ NOTCAPABLE = 93, // Capabilities insufficient
+ CAPMODE = 94, // Not permitted in capability mode
+ NOTRECOVERABLE = 95, // State not recoverable
+ OWNERDEAD = 96, // Previous owner died
+
+ _,
+};
+
+pub const MINSIGSTKSZ = switch (builtin.cpu.arch) {
+ .i386, .x86_64 => 2048,
+ .arm, .aarch64 => 4096,
+ else => @compileError("MINSIGSTKSZ not defined for this architecture"),
+};
+pub const SIGSTKSZ = MINSIGSTKSZ + 32768;
+
+pub const SS_ONSTACK = 1;
+pub const SS_DISABLE = 4;
+
+pub const stack_t = extern struct {
+ ss_sp: [*]u8,
+ ss_size: isize,
+ ss_flags: i32,
+};
+
+pub const S_IFMT = 0o170000;
+
+pub const S_IFIFO = 0o010000;
+pub const S_IFCHR = 0o020000;
+pub const S_IFDIR = 0o040000;
+pub const S_IFBLK = 0o060000;
+pub const S_IFREG = 0o100000;
+pub const S_IFLNK = 0o120000;
+pub const S_IFSOCK = 0o140000;
+pub const S_IFWHT = 0o160000;
+
+pub const S_ISUID = 0o4000;
+pub const S_ISGID = 0o2000;
+pub const S_ISVTX = 0o1000;
+pub const S_IRWXU = 0o700;
+pub const S_IRUSR = 0o400;
+pub const S_IWUSR = 0o200;
+pub const S_IXUSR = 0o100;
+pub const S_IRWXG = 0o070;
+pub const S_IRGRP = 0o040;
+pub const S_IWGRP = 0o020;
+pub const S_IXGRP = 0o010;
+pub const S_IRWXO = 0o007;
+pub const S_IROTH = 0o004;
+pub const S_IWOTH = 0o002;
+pub const S_IXOTH = 0o001;
+
+pub fn S_ISFIFO(m: u32) bool {
+ return m & S_IFMT == S_IFIFO;
+}
+
+pub fn S_ISCHR(m: u32) bool {
+ return m & S_IFMT == S_IFCHR;
+}
+
+pub fn S_ISDIR(m: u32) bool {
+ return m & S_IFMT == S_IFDIR;
+}
+
+pub fn S_ISBLK(m: u32) bool {
+ return m & S_IFMT == S_IFBLK;
+}
+
+pub fn S_ISREG(m: u32) bool {
+ return m & S_IFMT == S_IFREG;
+}
+
+pub fn S_ISLNK(m: u32) bool {
+ return m & S_IFMT == S_IFLNK;
+}
+
+pub fn S_ISSOCK(m: u32) bool {
+ return m & S_IFMT == S_IFSOCK;
+}
+
+pub fn S_IWHT(m: u32) bool {
+ return m & S_IFMT == S_IFWHT;
+}
+
+pub const HOST_NAME_MAX = 255;
+
+/// 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 AT_FDCWD = -100;
+
+/// Check access using effective user and group ID
+pub const AT_EACCESS = 0x0100;
+
+/// Do not follow symbolic links
+pub const AT_SYMLINK_NOFOLLOW = 0x0200;
+
+/// Follow symbolic link
+pub const AT_SYMLINK_FOLLOW = 0x0400;
+
+/// Remove directory instead of file
+pub const AT_REMOVEDIR = 0x0800;
+
+pub const addrinfo = extern struct {
+ flags: i32,
+ family: i32,
+ socktype: i32,
+ protocol: i32,
+ addrlen: socklen_t,
+ canonname: ?[*:0]u8,
+ addr: ?*sockaddr,
+ next: ?*addrinfo,
+};
+
+/// Fail if not under dirfd
+pub const AT_BENEATH = 0x1000;
+
+/// dummy for IP
+pub const IPPROTO_IP = 0;
+
+/// control message protocol
+pub const IPPROTO_ICMP = 1;
+
+/// tcp
+pub const IPPROTO_TCP = 6;
+
+/// user datagram protocol
+pub const IPPROTO_UDP = 17;
+
+/// IP6 header
+pub const IPPROTO_IPV6 = 41;
+
+/// raw IP packet
+pub const IPPROTO_RAW = 255;
+
+/// IP6 hop-by-hop options
+pub const IPPROTO_HOPOPTS = 0;
+
+/// group mgmt protocol
+pub const IPPROTO_IGMP = 2;
+
+/// gateway^2 (deprecated)
+pub const IPPROTO_GGP = 3;
+
+/// IPv4 encapsulation
+pub const IPPROTO_IPV4 = 4;
+
+/// for compatibility
+pub const IPPROTO_IPIP = IPPROTO_IPV4;
+
+/// Stream protocol II
+pub const IPPROTO_ST = 7;
+
+/// exterior gateway protocol
+pub const IPPROTO_EGP = 8;
+
+/// private interior gateway
+pub const IPPROTO_PIGP = 9;
+
+/// BBN RCC Monitoring
+pub const IPPROTO_RCCMON = 10;
+
+/// network voice protocol
+pub const IPPROTO_NVPII = 11;
+
+/// pup
+pub const IPPROTO_PUP = 12;
+
+/// Argus
+pub const IPPROTO_ARGUS = 13;
+
+/// EMCON
+pub const IPPROTO_EMCON = 14;
+
+/// Cross Net Debugger
+pub const IPPROTO_XNET = 15;
+
+/// Chaos
+pub const IPPROTO_CHAOS = 16;
+
+/// Multiplexing
+pub const IPPROTO_MUX = 18;
+
+/// DCN Measurement Subsystems
+pub const IPPROTO_MEAS = 19;
+
+/// Host Monitoring
+pub const IPPROTO_HMP = 20;
+
+/// Packet Radio Measurement
+pub const IPPROTO_PRM = 21;
+
+/// xns idp
+pub const IPPROTO_IDP = 22;
+
+/// Trunk-1
+pub const IPPROTO_TRUNK1 = 23;
+
+/// Trunk-2
+pub const IPPROTO_TRUNK2 = 24;
+
+/// Leaf-1
+pub const IPPROTO_LEAF1 = 25;
+
+/// Leaf-2
+pub const IPPROTO_LEAF2 = 26;
+
+/// Reliable Data
+pub const IPPROTO_RDP = 27;
+
+/// Reliable Transaction
+pub const IPPROTO_IRTP = 28;
+
+/// tp-4 w/ class negotiation
+pub const IPPROTO_TP = 29;
+
+/// Bulk Data Transfer
+pub const IPPROTO_BLT = 30;
+
+/// Network Services
+pub const IPPROTO_NSP = 31;
+
+/// Merit Internodal
+pub const IPPROTO_INP = 32;
+
+/// Datagram Congestion Control Protocol
+pub const IPPROTO_DCCP = 33;
+
+/// Third Party Connect
+pub const IPPROTO_3PC = 34;
+
+/// InterDomain Policy Routing
+pub const IPPROTO_IDPR = 35;
+
+/// XTP
+pub const IPPROTO_XTP = 36;
+
+/// Datagram Delivery
+pub const IPPROTO_DDP = 37;
+
+/// Control Message Transport
+pub const IPPROTO_CMTP = 38;
+
+/// TP++ Transport
+pub const IPPROTO_TPXX = 39;
+
+/// IL transport protocol
+pub const IPPROTO_IL = 40;
+
+/// Source Demand Routing
+pub const IPPROTO_SDRP = 42;
+
+/// IP6 routing header
+pub const IPPROTO_ROUTING = 43;
+
+/// IP6 fragmentation header
+pub const IPPROTO_FRAGMENT = 44;
+
+/// InterDomain Routing
+pub const IPPROTO_IDRP = 45;
+
+/// resource reservation
+pub const IPPROTO_RSVP = 46;
+
+/// General Routing Encap.
+pub const IPPROTO_GRE = 47;
+
+/// Mobile Host Routing
+pub const IPPROTO_MHRP = 48;
+
+/// BHA
+pub const IPPROTO_BHA = 49;
+
+/// IP6 Encap Sec. Payload
+pub const IPPROTO_ESP = 50;
+
+/// IP6 Auth Header
+pub const IPPROTO_AH = 51;
+
+/// Integ. Net Layer Security
+pub const IPPROTO_INLSP = 52;
+
+/// IP with encryption
+pub const IPPROTO_SWIPE = 53;
+
+/// Next Hop Resolution
+pub const IPPROTO_NHRP = 54;
+
+/// IP Mobility
+pub const IPPROTO_MOBILE = 55;
+
+/// Transport Layer Security
+pub const IPPROTO_TLSP = 56;
+
+/// SKIP
+pub const IPPROTO_SKIP = 57;
+
+/// ICMP6
+pub const IPPROTO_ICMPV6 = 58;
+
+/// IP6 no next header
+pub const IPPROTO_NONE = 59;
+
+/// IP6 destination option
+pub const IPPROTO_DSTOPTS = 60;
+
+/// any host internal protocol
+pub const IPPROTO_AHIP = 61;
+
+/// CFTP
+pub const IPPROTO_CFTP = 62;
+
+/// "hello" routing protocol
+pub const IPPROTO_HELLO = 63;
+
+/// SATNET/Backroom EXPAK
+pub const IPPROTO_SATEXPAK = 64;
+
+/// Kryptolan
+pub const IPPROTO_KRYPTOLAN = 65;
+
+/// Remote Virtual Disk
+pub const IPPROTO_RVD = 66;
+
+/// Pluribus Packet Core
+pub const IPPROTO_IPPC = 67;
+
+/// Any distributed FS
+pub const IPPROTO_ADFS = 68;
+
+/// Satnet Monitoring
+pub const IPPROTO_SATMON = 69;
+
+/// VISA Protocol
+pub const IPPROTO_VISA = 70;
+
+/// Packet Core Utility
+pub const IPPROTO_IPCV = 71;
+
+/// Comp. Prot. Net. Executive
+pub const IPPROTO_CPNX = 72;
+
+/// Comp. Prot. HeartBeat
+pub const IPPROTO_CPHB = 73;
+
+/// Wang Span Network
+pub const IPPROTO_WSN = 74;
+
+/// Packet Video Protocol
+pub const IPPROTO_PVP = 75;
+
+/// BackRoom SATNET Monitoring
+pub const IPPROTO_BRSATMON = 76;
+
+/// Sun net disk proto (temp.)
+pub const IPPROTO_ND = 77;
+
+/// WIDEBAND Monitoring
+pub const IPPROTO_WBMON = 78;
+
+/// WIDEBAND EXPAK
+pub const IPPROTO_WBEXPAK = 79;
+
+/// ISO cnlp
+pub const IPPROTO_EON = 80;
+
+/// VMTP
+pub const IPPROTO_VMTP = 81;
+
+/// Secure VMTP
+pub const IPPROTO_SVMTP = 82;
+
+/// Banyon VINES
+pub const IPPROTO_VINES = 83;
+
+/// TTP
+pub const IPPROTO_TTP = 84;
+
+/// NSFNET-IGP
+pub const IPPROTO_IGP = 85;
+
+/// dissimilar gateway prot.
+pub const IPPROTO_DGP = 86;
+
+/// TCF
+pub const IPPROTO_TCF = 87;
+
+/// Cisco/GXS IGRP
+pub const IPPROTO_IGRP = 88;
+
+/// OSPFIGP
+pub const IPPROTO_OSPFIGP = 89;
+
+/// Strite RPC protocol
+pub const IPPROTO_SRPC = 90;
+
+/// Locus Address Resoloution
+pub const IPPROTO_LARP = 91;
+
+/// Multicast Transport
+pub const IPPROTO_MTP = 92;
+
+/// AX.25 Frames
+pub const IPPROTO_AX25 = 93;
+
+/// IP encapsulated in IP
+pub const IPPROTO_IPEIP = 94;
+
+/// Mobile Int.ing control
+pub const IPPROTO_MICP = 95;
+
+/// Semaphore Comm. security
+pub const IPPROTO_SCCSP = 96;
+
+/// Ethernet IP encapsulation
+pub const IPPROTO_ETHERIP = 97;
+
+/// encapsulation header
+pub const IPPROTO_ENCAP = 98;
+
+/// any private encr. scheme
+pub const IPPROTO_APES = 99;
+
+/// GMTP
+pub const IPPROTO_GMTP = 100;
+
+/// payload compression (IPComp)
+pub const IPPROTO_IPCOMP = 108;
+
+/// SCTP
+pub const IPPROTO_SCTP = 132;
+
+/// IPv6 Mobility Header
+pub const IPPROTO_MH = 135;
+
+/// UDP-Lite
+pub const IPPROTO_UDPLITE = 136;
+
+/// IP6 Host Identity Protocol
+pub const IPPROTO_HIP = 139;
+
+/// IP6 Shim6 Protocol
+pub const IPPROTO_SHIM6 = 140;
+
+/// Protocol Independent Mcast
+pub const IPPROTO_PIM = 103;
+
+/// CARP
+pub const IPPROTO_CARP = 112;
+
+/// PGM
+pub const IPPROTO_PGM = 113;
+
+/// MPLS-in-IP
+pub const IPPROTO_MPLS = 137;
+
+/// PFSYNC
+pub const IPPROTO_PFSYNC = 240;
+
+/// Reserved
+pub const IPPROTO_RESERVED_253 = 253;
+
+/// Reserved
+pub const IPPROTO_RESERVED_254 = 254;
+
+pub const rlimit_resource = enum(c_int) {
+ CPU = 0,
+ FSIZE = 1,
+ DATA = 2,
+ STACK = 3,
+ CORE = 4,
+ RSS = 5,
+ MEMLOCK = 6,
+ NPROC = 7,
+ NOFILE = 8,
+ SBSIZE = 9,
+ VMEM = 10,
+ NPTS = 11,
+ SWAP = 12,
+ KQUEUES = 13,
+ UMTXP = 14,
+ _,
+
+ pub const AS: rlimit_resource = .VMEM;
+};
+
+pub const rlim_t = i64;
+
+/// No limit
+pub const RLIM_INFINITY: rlim_t = (1 << 63) - 1;
+
+pub const RLIM_SAVED_MAX = RLIM_INFINITY;
+pub const RLIM_SAVED_CUR = RLIM_INFINITY;
+
+pub const rlimit = extern struct {
+ /// Soft limit
+ cur: rlim_t,
+ /// Hard limit
+ max: rlim_t,
+};
+
+pub const SHUT_RD = 0;
+pub const SHUT_WR = 1;
+pub const SHUT_RDWR = 2;
+
+// TODO fill out if needed
+pub const directory_which = enum(c_int) {
+ B_USER_SETTINGS_DIRECTORY = 0xbbe,
+
+ _,
+};
+
+pub const cc_t = u8;
+pub const speed_t = u8;
+pub const tcflag_t = u32;
+
+pub const NCCS = 32;
+
+pub const termios = extern struct {
+ c_iflag: tcflag_t,
+ c_oflag: tcflag_t,
+ c_cflag: tcflag_t,
+ c_lflag: tcflag_t,
+ c_line: cc_t,
+ c_ispeed: speed_t,
+ c_ospeed: speed_t,
+ cc_t: [NCCS]cc_t,
+};
diff --git a/lib/std/c/linux.zig b/lib/std/c/linux.zig
index 808b05bd6d..166838f128 100644
--- a/lib/std/c/linux.zig
+++ b/lib/std/c/linux.zig
@@ -1,11 +1,66 @@
const std = @import("../std.zig");
+const builtin = @import("builtin");
const maxInt = std.math.maxInt;
-const abi = std.Target.current.abi;
-const arch = std.Target.current.cpu.arch;
-const os_tag = std.Target.current.os.tag;
-usingnamespace std.c;
+const native_abi = builtin.abi;
+const native_arch = builtin.cpu.arch;
+const linux = std.os.linux;
-pub const _errno = switch (abi) {
+pub const E = linux.E;
+pub const Sigaction = linux.Sigaction;
+pub const dl_phdr_info = linux.dl_phdr_info;
+pub const fd_t = linux.fd_t;
+pub const rlimit = linux.rlimit;
+pub const rlimit_resource = linux.rlimit_resource;
+pub const timespec = linux.timespec;
+pub const NAME_MAX = linux.NAME_MAX;
+pub const PATH_MAX = linux.PATH_MAX;
+pub const IOV_MAX = linux.IOV_MAX;
+pub const STDIN_FILENO = linux.STDIN_FILENO;
+pub const STDOUT_FILENO = linux.STDIN_FILENO;
+pub const STDERR_FILENO = linux.STDIN_FILENO;
+pub const AT = linux.AT;
+pub const PROT = linux.PROT;
+pub const CLOCK = linux.CLOCK;
+pub const SIG = linux.SIG;
+pub const empty_sigset = linux.empty_sigset;
+pub const S = linux.S;
+pub const siginfo_t = linux.siginfo_t;
+pub const SA = linux.SA;
+pub const pollfd = linux.pollfd;
+pub const sigset_t = linux.sigset_t;
+pub const ARCH = linux.ARCH;
+pub const Elf_Symndx = linux.Elf_Symndx;
+pub const F = linux.F;
+pub const Flock = linux.Flock;
+pub const LOCK = linux.LOCK;
+pub const MAP = linux.MAP;
+pub const MMAP2_UNIT = linux.MMAP2_UNIT;
+pub const O = linux.O;
+pub const REG = linux.REG;
+pub const SC = linux.SC;
+pub const SYS = linux.SYS;
+pub const VDSO = linux.VDSO;
+pub const blkcnt_t = linux.blkcnt_t;
+pub const blksize_t = linux.blksize_t;
+pub const dev_t = linux.dev_t;
+pub const ino_t = linux.ino_t;
+pub const mcontext_t = linux.mcontext_t;
+pub const mode_t = linux.mode_t;
+pub const msghdr = linux.msghdr;
+pub const msghdr_const = linux.msghdr_const;
+pub const nlink_t = linux.nlink_t;
+pub const off_t = linux.off_t;
+pub const time_t = linux.time_t;
+pub const timeval = linux.timeval;
+pub const timezone = linux.timezone;
+pub const ucontext_t = linux.ucontext_t;
+pub const user_desc = linux.user_desc;
+pub const pid_t = linux.pid_t;
+pub const uid_t = linux.uid_t;
+pub const gid_t = linux.gid_t;
+pub const clock_t = linux.clock_t;
+
+pub const _errno = switch (native_abi) {
.android => struct {
extern "c" var __errno: c_int;
fn getErrno() *c_int {
@@ -17,22 +72,94 @@ pub const _errno = switch (abi) {
}.__errno_location,
};
+pub const Stat = switch (native_arch) {
+ .sparcv9 => extern struct {
+ dev: u64,
+ ino: ino_t,
+ mode: u32,
+ nlink: usize,
+
+ uid: u32,
+ gid: u32,
+ rdev: u64,
+ __pad0: u32,
+
+ size: off_t,
+ blksize: isize,
+ blocks: i64,
+
+ atim: timespec,
+ mtim: timespec,
+ ctim: timespec,
+ __unused: [2]isize,
+
+ pub fn atime(self: @This()) timespec {
+ return self.atim;
+ }
+
+ pub fn mtime(self: @This()) timespec {
+ return self.mtim;
+ }
+
+ pub fn ctime(self: @This()) timespec {
+ return self.ctim;
+ }
+ },
+ .mips, .mipsel => extern struct {
+ dev: dev_t,
+ __pad0: [2]u32,
+ ino: ino_t,
+ mode: mode_t,
+ nlink: nlink_t,
+ uid: uid_t,
+ gid: gid_t,
+ rdev: dev_t,
+ __pad1: [2]u32,
+ size: off_t,
+ atim: timespec,
+ mtim: timespec,
+ ctim: timespec,
+ blksize: blksize_t,
+ __pad3: u32,
+ blocks: blkcnt_t,
+ __pad4: [14]u32,
+
+ pub fn atime(self: @This()) timespec {
+ return self.atim;
+ }
+
+ pub fn mtime(self: @This()) timespec {
+ return self.mtim;
+ }
+
+ pub fn ctime(self: @This()) timespec {
+ return self.ctim;
+ }
+ },
+
+ else => std.os.linux.Stat, // libc stat is the same as kernel stat.
+};
+
pub const MAP_FAILED = @intToPtr(*c_void, maxInt(usize));
-pub const AI_PASSIVE = 0x01;
-pub const AI_CANONNAME = 0x02;
-pub const AI_NUMERICHOST = 0x04;
-pub const AI_V4MAPPED = 0x08;
-pub const AI_ALL = 0x10;
-pub const AI_ADDRCONFIG = 0x20;
-pub const AI_NUMERICSERV = 0x400;
-
-pub const NI_NUMERICHOST = 0x01;
-pub const NI_NUMERICSERV = 0x02;
-pub const NI_NOFQDN = 0x04;
-pub const NI_NAMEREQD = 0x08;
-pub const NI_DGRAM = 0x10;
-pub const NI_NUMERICSCOPE = 0x100;
+pub const AI = struct {
+ pub const PASSIVE = 0x01;
+ pub const CANONNAME = 0x02;
+ pub const NUMERICHOST = 0x04;
+ pub const V4MAPPED = 0x08;
+ pub const ALL = 0x10;
+ pub const ADDRCONFIG = 0x20;
+ pub const NUMERICSERV = 0x400;
+};
+
+pub const NI = struct {
+ pub const NUMERICHOST = 0x01;
+ pub const NUMERICSERV = 0x02;
+ pub const NOFQDN = 0x04;
+ pub const NAMEREQD = 0x08;
+ pub const DGRAM = 0x10;
+ pub const NUMERICSCOPE = 0x100;
+};
pub const EAI = enum(c_int) {
BADFLAGS = -1,
@@ -60,8 +187,8 @@ pub const EAI = enum(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 fstat64(fd: fd_t, buf: *libc_stat) c_int;
-pub extern "c" fn fstatat64(dirfd: fd_t, path: [*:0]const u8, stat_buf: *libc_stat, flags: u32) c_int;
+pub extern "c" fn fstat64(fd: fd_t, buf: *Stat) c_int;
+pub extern "c" fn fstatat64(dirfd: fd_t, path: [*:0]const u8, stat_buf: *Stat, flags: u32) c_int;
pub extern "c" fn ftruncate64(fd: c_int, length: off_t) c_int;
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;
@@ -137,7 +264,7 @@ pub const pthread_mutex_t = extern struct {
pub const pthread_cond_t = extern struct {
size: [__SIZEOF_PTHREAD_COND_T]u8 align(@alignOf(usize)) = [_]u8{0} ** __SIZEOF_PTHREAD_COND_T,
};
-pub const pthread_rwlock_t = switch (abi) {
+pub const pthread_rwlock_t = switch (native_abi) {
.android => switch (@sizeOf(usize)) {
4 => extern struct {
lock: std.c.pthread_mutex_t = std.c.PTHREAD_MUTEX_INITIALIZER,
@@ -168,11 +295,11 @@ pub const sem_t = extern struct {
};
const __SIZEOF_PTHREAD_COND_T = 48;
-const __SIZEOF_PTHREAD_MUTEX_T = if (os_tag == .fuchsia) 40 else switch (abi) {
+const __SIZEOF_PTHREAD_MUTEX_T = switch (native_abi) {
.musl, .musleabi, .musleabihf => if (@sizeOf(usize) == 8) 40 else 24,
- .gnu, .gnuabin32, .gnuabi64, .gnueabi, .gnueabihf, .gnux32 => switch (arch) {
+ .gnu, .gnuabin32, .gnuabi64, .gnueabi, .gnueabihf, .gnux32 => switch (native_arch) {
.aarch64 => 48,
- .x86_64 => if (abi == .gnux32) 40 else 32,
+ .x86_64 => if (native_abi == .gnux32) 40 else 32,
.mips64, .powerpc64, .powerpc64le, .sparcv9 => 40,
else => if (@sizeOf(usize) == 8) 40 else 24,
},
@@ -184,9 +311,11 @@ const __SIZEOF_SEM_T = 4 * @sizeOf(usize);
pub extern "c" fn pthread_setname_np(thread: std.c.pthread_t, name: [*:0]const u8) E;
pub extern "c" fn pthread_getname_np(thread: std.c.pthread_t, name: [*:0]u8, len: usize) E;
-pub const RTLD_LAZY = 1;
-pub const RTLD_NOW = 2;
-pub const RTLD_NOLOAD = 4;
-pub const RTLD_NODELETE = 4096;
-pub const RTLD_GLOBAL = 256;
-pub const RTLD_LOCAL = 0;
+pub const RTLD = struct {
+ pub const LAZY = 1;
+ pub const NOW = 2;
+ pub const NOLOAD = 4;
+ pub const NODELETE = 4096;
+ pub const GLOBAL = 256;
+ pub const LOCAL = 0;
+};
diff --git a/lib/std/c/netbsd.zig b/lib/std/c/netbsd.zig
index e45dc85d34..d9b23aed7b 100644
--- a/lib/std/c/netbsd.zig
+++ b/lib/std/c/netbsd.zig
@@ -1,5 +1,6 @@
const std = @import("../std.zig");
-const builtin = std.builtin;
+const builtin = @import("builtin");
+const maxInt = std.math.maxInt;
usingnamespace std.c;
@@ -13,8 +14,8 @@ pub extern "c" fn _lwp_self() lwpid_t;
pub extern "c" fn pipe2(fds: *[2]fd_t, flags: u32) c_int;
pub extern "c" fn arc4random_buf(buf: [*]u8, len: usize) void;
-pub extern "c" fn __fstat50(fd: fd_t, buf: *libc_stat) c_int;
-pub extern "c" fn __stat50(path: [*:0]const u8, buf: *libc_stat) c_int;
+pub extern "c" fn __fstat50(fd: fd_t, buf: *Stat) c_int;
+pub extern "c" fn __stat50(path: [*:0]const u8, buf: *Stat) c_int;
pub extern "c" fn __clock_gettime50(clk_id: c_int, tp: *timespec) c_int;
pub extern "c" fn __clock_getres50(clk_id: c_int, tp: *timespec) c_int;
pub extern "c" fn __getdents30(fd: c_int, buf_ptr: [*]u8, nbytes: usize) c_int;
@@ -51,7 +52,7 @@ pub const pthread_cond_t = extern struct {
pub const pthread_rwlock_t = extern struct {
ptr_magic: c_uint = 0x99990009,
- ptr_interlock: switch (std.builtin.cpu.arch) {
+ ptr_interlock: switch (builtin.cpu.arch) {
.aarch64, .sparc, .x86_64, .i386 => u8,
.arm, .powerpc => c_int,
else => unreachable,
@@ -92,3 +93,1341 @@ pub const sem_t = ?*opaque {};
pub extern "c" fn pthread_setname_np(thread: std.c.pthread_t, name: [*:0]const u8, arg: ?*c_void) E;
pub extern "c" fn pthread_getname_np(thread: std.c.pthread_t, name: [*:0]u8, len: usize) E;
+
+pub const clock_getres = __clock_getres50;
+pub const clock_gettime = __clock_gettime50;
+pub const fstat = __fstat50;
+pub const getdents = __getdents30;
+pub const getrusage = __getrusage50;
+pub const gettimeofday = __gettimeofday50;
+pub const nanosleep = __nanosleep50;
+pub const sched_yield = __libc_thr_yield;
+pub const sigaction = __sigaction14;
+pub const sigaltstack = __sigaltstack14;
+pub const sigprocmask = __sigprocmask14;
+pub const socket = __socket30;
+pub const stat = __stat50;
+
+pub const blkcnt_t = i64;
+pub const blksize_t = i32;
+pub const clock_t = u32;
+pub const dev_t = u64;
+pub const fd_t = i32;
+pub const gid_t = u32;
+pub const ino_t = u64;
+pub const mode_t = u32;
+pub const nlink_t = u32;
+pub const off_t = i64;
+pub const pid_t = i32;
+pub const socklen_t = u32;
+pub const time_t = i64;
+pub const uid_t = u32;
+pub const lwpid_t = i32;
+pub const suseconds_t = c_int;
+
+/// Renamed from `kevent` to `Kevent` to avoid conflict with function name.
+pub const Kevent = extern struct {
+ ident: usize,
+ filter: i32,
+ flags: u32,
+ fflags: u32,
+ data: i64,
+ udata: usize,
+};
+
+pub const RTLD_LAZY = 1;
+pub const RTLD_NOW = 2;
+pub const RTLD_GLOBAL = 0x100;
+pub const RTLD_LOCAL = 0x200;
+pub const RTLD_NODELETE = 0x01000;
+pub const RTLD_NOLOAD = 0x02000;
+
+pub const RTLD_NEXT = @intToPtr(*c_void, @bitCast(usize, @as(isize, -1)));
+pub const RTLD_DEFAULT = @intToPtr(*c_void, @bitCast(usize, @as(isize, -2)));
+pub const RTLD_SELF = @intToPtr(*c_void, @bitCast(usize, @as(isize, -3)));
+
+pub const dl_phdr_info = extern struct {
+ dlpi_addr: usize,
+ dlpi_name: ?[*:0]const u8,
+ dlpi_phdr: [*]std.elf.Phdr,
+ dlpi_phnum: u16,
+};
+
+pub const Flock = extern struct {
+ l_start: off_t,
+ l_len: off_t,
+ l_pid: pid_t,
+ l_type: i16,
+ l_whence: i16,
+};
+
+pub const addrinfo = extern struct {
+ flags: i32,
+ family: i32,
+ socktype: i32,
+ protocol: i32,
+ addrlen: socklen_t,
+ canonname: ?[*:0]u8,
+ addr: ?*sockaddr,
+ next: ?*addrinfo,
+};
+
+pub const EAI = 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,
+
+ /// invalid value for hints
+ BADHINTS = 12,
+
+ /// resolved protocol is unknown
+ PROTOCOL = 13,
+
+ /// argument buffer overflow
+ OVERFLOW = 14,
+
+ _,
+};
+
+pub const EAI_MAX = 15;
+
+pub const msghdr = extern struct {
+ /// optional address
+ msg_name: ?*sockaddr,
+
+ /// size of address
+ msg_namelen: socklen_t,
+
+ /// scatter/gather array
+ msg_iov: [*]iovec,
+
+ /// # elements in msg_iov
+ msg_iovlen: i32,
+
+ /// ancillary data
+ msg_control: ?*c_void,
+
+ /// ancillary data buffer len
+ msg_controllen: socklen_t,
+
+ /// flags on received message
+ msg_flags: i32,
+};
+
+pub const msghdr_const = extern struct {
+ /// optional address
+ msg_name: ?*const sockaddr,
+
+ /// size of address
+ msg_namelen: socklen_t,
+
+ /// scatter/gather array
+ msg_iov: [*]iovec_const,
+
+ /// # elements in msg_iov
+ msg_iovlen: i32,
+
+ /// ancillary data
+ msg_control: ?*c_void,
+
+ /// ancillary data buffer len
+ msg_controllen: socklen_t,
+
+ /// flags on received message
+ msg_flags: i32,
+};
+
+/// The stat structure used by libc.
+pub const Stat = extern struct {
+ dev: dev_t,
+ mode: mode_t,
+ ino: ino_t,
+ nlink: nlink_t,
+ uid: uid_t,
+ gid: gid_t,
+ rdev: dev_t,
+ atim: timespec,
+ mtim: timespec,
+ ctim: timespec,
+ birthtim: timespec,
+ size: off_t,
+ blocks: blkcnt_t,
+ blksize: blksize_t,
+ flags: u32,
+ gen: u32,
+ __spare: [2]u32,
+
+ pub fn atime(self: @This()) timespec {
+ return self.atim;
+ }
+
+ pub fn mtime(self: @This()) timespec {
+ return self.mtim;
+ }
+
+ pub fn ctime(self: @This()) timespec {
+ return self.ctim;
+ }
+};
+
+pub const timespec = extern struct {
+ tv_sec: i64,
+ tv_nsec: isize,
+};
+
+pub const timeval = extern struct {
+ /// seconds
+ tv_sec: time_t,
+ /// microseconds
+ tv_usec: suseconds_t,
+};
+
+pub const MAXNAMLEN = 511;
+
+pub const dirent = extern struct {
+ d_fileno: ino_t,
+ d_reclen: u16,
+ d_namlen: u16,
+ d_type: u8,
+ d_name: [MAXNAMLEN:0]u8,
+
+ pub fn reclen(self: dirent) u16 {
+ return self.d_reclen;
+ }
+};
+
+pub const SOCK_STREAM = 1;
+pub const SOCK_DGRAM = 2;
+pub const SOCK_RAW = 3;
+pub const SOCK_RDM = 4;
+pub const SOCK_SEQPACKET = 5;
+pub const SOCK_CONN_DGRAM = 6;
+pub const SOCK_DCCP = SOCK_CONN_DGRAM;
+
+pub const SOCK_CLOEXEC = 0x10000000;
+pub const SOCK_NONBLOCK = 0x20000000;
+pub const SOCK_NOSIGPIPE = 0x40000000;
+pub const SOCK_FLAGS_MASK = 0xf0000000;
+
+pub const SO_DEBUG = 0x0001;
+pub const SO_ACCEPTCONN = 0x0002;
+pub const SO_REUSEADDR = 0x0004;
+pub const SO_KEEPALIVE = 0x0008;
+pub const SO_DONTROUTE = 0x0010;
+pub const SO_BROADCAST = 0x0020;
+pub const SO_USELOOPBACK = 0x0040;
+pub const SO_LINGER = 0x0080;
+pub const SO_OOBINLINE = 0x0100;
+pub const SO_REUSEPORT = 0x0200;
+pub const SO_NOSIGPIPE = 0x0800;
+pub const SO_ACCEPTFILTER = 0x1000;
+pub const SO_TIMESTAMP = 0x2000;
+pub const SO_RERROR = 0x4000;
+
+pub const SO_SNDBUF = 0x1001;
+pub const SO_RCVBUF = 0x1002;
+pub const SO_SNDLOWAT = 0x1003;
+pub const SO_RCVLOWAT = 0x1004;
+pub const SO_ERROR = 0x1007;
+pub const SO_TYPE = 0x1008;
+pub const SO_OVERFLOWED = 0x1009;
+
+pub const SO_NOHEADER = 0x100a;
+pub const SO_SNDTIMEO = 0x100b;
+pub const SO_RCVTIMEO = 0x100c;
+
+pub const SOL_SOCKET = 0xffff;
+
+pub const PF_UNSPEC = AF_UNSPEC;
+pub const PF_LOCAL = AF_LOCAL;
+pub const PF_UNIX = PF_LOCAL;
+pub const PF_INET = AF_INET;
+pub const PF_IMPLINK = AF_IMPLINK;
+pub const PF_PUP = AF_PUP;
+pub const PF_CHAOS = AF_CHAOS;
+pub const PF_NS = AF_NS;
+pub const PF_ISO = AF_ISO;
+pub const PF_OSI = AF_ISO;
+pub const PF_ECMA = AF_ECMA;
+pub const PF_DATAKIT = AF_DATAKIT;
+pub const PF_CCITT = AF_CCITT;
+pub const PF_SNA = AF_SNA;
+pub const PF_DECnet = AF_DECnet;
+pub const PF_DLI = AF_DLI;
+pub const PF_LAT = AF_LAT;
+pub const PF_HYLINK = AF_HYLINK;
+pub const PF_APPLETALK = AF_APPLETALK;
+pub const PF_OROUTE = AF_OROUTE;
+pub const PF_LINK = AF_LINK;
+pub const PF_COIP = AF_COIP;
+pub const PF_CNT = AF_CNT;
+pub const PF_INET6 = AF_INET6;
+pub const PF_IPX = AF_IPX;
+pub const PF_ISDN = AF_ISDN;
+pub const PF_E164 = AF_E164;
+pub const PF_NATM = AF_NATM;
+pub const PF_ARP = AF_ARP;
+pub const PF_BLUETOOTH = AF_BLUETOOTH;
+pub const PF_MPLS = AF_MPLS;
+pub const PF_ROUTE = AF_ROUTE;
+pub const PF_CAN = AF_CAN;
+pub const PF_ETHER = AF_ETHER;
+pub const PF_MAX = AF_MAX;
+
+pub const AF_UNSPEC = 0;
+pub const AF_LOCAL = 1;
+pub const AF_UNIX = AF_LOCAL;
+pub const AF_INET = 2;
+pub const AF_IMPLINK = 3;
+pub const AF_PUP = 4;
+pub const AF_CHAOS = 5;
+pub const AF_NS = 6;
+pub const AF_ISO = 7;
+pub const AF_OSI = AF_ISO;
+pub const AF_ECMA = 8;
+pub const AF_DATAKIT = 9;
+pub const AF_CCITT = 10;
+pub const AF_SNA = 11;
+pub const AF_DECnet = 12;
+pub const AF_DLI = 13;
+pub const AF_LAT = 14;
+pub const AF_HYLINK = 15;
+pub const AF_APPLETALK = 16;
+pub const AF_OROUTE = 17;
+pub const AF_LINK = 18;
+pub const AF_COIP = 20;
+pub const AF_CNT = 21;
+pub const AF_IPX = 23;
+pub const AF_INET6 = 24;
+pub const AF_ISDN = 26;
+pub const AF_E164 = AF_ISDN;
+pub const AF_NATM = 27;
+pub const AF_ARP = 28;
+pub const AF_BLUETOOTH = 31;
+pub const AF_IEEE80211 = 32;
+pub const AF_MPLS = 33;
+pub const AF_ROUTE = 34;
+pub const AF_CAN = 35;
+pub const AF_ETHER = 36;
+pub const AF_MAX = 37;
+
+pub const in_port_t = u16;
+pub const sa_family_t = u8;
+
+pub const sockaddr = extern struct {
+ /// total length
+ len: u8,
+
+ /// address family
+ family: sa_family_t,
+
+ /// actually longer; address value
+ data: [14]u8,
+};
+
+pub const sockaddr_storage = std.x.os.Socket.Address.Native.Storage;
+
+pub const sockaddr_in = extern struct {
+ len: u8 = @sizeOf(sockaddr_in),
+ family: sa_family_t = AF_INET,
+ port: in_port_t,
+ addr: u32,
+ zero: [8]u8 = [8]u8{ 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+
+pub const sockaddr_in6 = extern struct {
+ len: u8 = @sizeOf(sockaddr_in6),
+ family: sa_family_t = AF_INET6,
+ port: in_port_t,
+ flowinfo: u32,
+ addr: [16]u8,
+ scope_id: u32,
+};
+
+/// Definitions for UNIX IPC domain.
+pub const sockaddr_un = extern struct {
+ /// total sockaddr length
+ len: u8 = @sizeOf(sockaddr_un),
+
+ /// AF_LOCAL
+ family: sa_family_t = AF_LOCAL,
+
+ /// path name
+ path: [104]u8,
+};
+
+/// get address to use bind()
+pub const AI_PASSIVE = 0x00000001;
+
+/// fill ai_canonname
+pub const AI_CANONNAME = 0x00000002;
+
+/// prevent host name resolution
+pub const AI_NUMERICHOST = 0x00000004;
+
+/// prevent service name resolution
+pub const AI_NUMERICSERV = 0x00000008;
+
+/// only if any address is assigned
+pub const AI_ADDRCONFIG = 0x00000400;
+
+pub const CTL_KERN = 1;
+pub const CTL_DEBUG = 5;
+
+pub const KERN_PROC_ARGS = 48; // struct: process argv/env
+pub const KERN_PROC_PATHNAME = 5; // path to executable
+pub const KERN_IOV_MAX = 38;
+
+pub const PATH_MAX = 1024;
+pub const IOV_MAX = KERN_IOV_MAX;
+
+pub const STDIN_FILENO = 0;
+pub const STDOUT_FILENO = 1;
+pub const STDERR_FILENO = 2;
+
+pub const PROT_NONE = 0;
+pub const PROT_READ = 1;
+pub const PROT_WRITE = 2;
+pub const PROT_EXEC = 4;
+
+pub const CLOCK_REALTIME = 0;
+pub const CLOCK_VIRTUAL = 1;
+pub const CLOCK_PROF = 2;
+pub const CLOCK_MONOTONIC = 3;
+pub const CLOCK_THREAD_CPUTIME_ID = 0x20000000;
+pub const CLOCK_PROCESS_CPUTIME_ID = 0x40000000;
+
+pub const MAP_FAILED = @intToPtr(*c_void, maxInt(usize));
+pub const MAP_SHARED = 0x0001;
+pub const MAP_PRIVATE = 0x0002;
+pub const MAP_REMAPDUP = 0x0004;
+pub const MAP_FIXED = 0x0010;
+pub const MAP_RENAME = 0x0020;
+pub const MAP_NORESERVE = 0x0040;
+pub const MAP_INHERIT = 0x0080;
+pub const MAP_HASSEMAPHORE = 0x0200;
+pub const MAP_TRYFIXED = 0x0400;
+pub const MAP_WIRED = 0x0800;
+
+pub const MAP_FILE = 0x0000;
+pub const MAP_NOSYNC = 0x0800;
+pub const MAP_ANON = 0x1000;
+pub const MAP_ANONYMOUS = MAP_ANON;
+pub const MAP_STACK = 0x2000;
+
+pub const WNOHANG = 0x00000001;
+pub const WUNTRACED = 0x00000002;
+pub const WSTOPPED = WUNTRACED;
+pub const WCONTINUED = 0x00000010;
+pub const WNOWAIT = 0x00010000;
+pub const WEXITED = 0x00000020;
+pub const WTRAPPED = 0x00000040;
+
+pub const SA_ONSTACK = 0x0001;
+pub const SA_RESTART = 0x0002;
+pub const SA_RESETHAND = 0x0004;
+pub const SA_NOCLDSTOP = 0x0008;
+pub const SA_NODEFER = 0x0010;
+pub const SA_NOCLDWAIT = 0x0020;
+pub const SA_SIGINFO = 0x0040;
+
+pub const SIGHUP = 1;
+pub const SIGINT = 2;
+pub const SIGQUIT = 3;
+pub const SIGILL = 4;
+pub const SIGTRAP = 5;
+pub const SIGABRT = 6;
+pub const SIGIOT = SIGABRT;
+pub const SIGEMT = 7;
+pub const SIGFPE = 8;
+pub const SIGKILL = 9;
+pub const SIGBUS = 10;
+pub const SIGSEGV = 11;
+pub const SIGSYS = 12;
+pub const SIGPIPE = 13;
+pub const SIGALRM = 14;
+pub const SIGTERM = 15;
+pub const SIGURG = 16;
+pub const SIGSTOP = 17;
+pub const SIGTSTP = 18;
+pub const SIGCONT = 19;
+pub const SIGCHLD = 20;
+pub const SIGTTIN = 21;
+pub const SIGTTOU = 22;
+pub const SIGIO = 23;
+pub const SIGXCPU = 24;
+pub const SIGXFSZ = 25;
+pub const SIGVTALRM = 26;
+pub const SIGPROF = 27;
+pub const SIGWINCH = 28;
+pub const SIGINFO = 29;
+pub const SIGUSR1 = 30;
+pub const SIGUSR2 = 31;
+pub const SIGPWR = 32;
+
+pub const SIGRTMIN = 33;
+pub const SIGRTMAX = 63;
+
+// access function
+pub const F_OK = 0; // test for existence of file
+pub const X_OK = 1; // test for execute or search permission
+pub const W_OK = 2; // test for write permission
+pub const R_OK = 4; // test for read permission
+
+/// open for reading only
+pub const O_RDONLY = 0x00000000;
+
+/// open for writing only
+pub const O_WRONLY = 0x00000001;
+
+/// open for reading and writing
+pub const O_RDWR = 0x00000002;
+
+/// mask for above modes
+pub const O_ACCMODE = 0x00000003;
+
+/// no delay
+pub const O_NONBLOCK = 0x00000004;
+
+/// set append mode
+pub const O_APPEND = 0x00000008;
+
+/// open with shared file lock
+pub const O_SHLOCK = 0x00000010;
+
+/// open with exclusive file lock
+pub const O_EXLOCK = 0x00000020;
+
+/// signal pgrp when data ready
+pub const O_ASYNC = 0x00000040;
+
+/// synchronous writes
+pub const O_SYNC = 0x00000080;
+
+/// don't follow symlinks on the last
+pub const O_NOFOLLOW = 0x00000100;
+
+/// create if nonexistent
+pub const O_CREAT = 0x00000200;
+
+/// truncate to zero length
+pub const O_TRUNC = 0x00000400;
+
+/// error if already exists
+pub const O_EXCL = 0x00000800;
+
+/// don't assign controlling terminal
+pub const O_NOCTTY = 0x00008000;
+
+/// write: I/O data completion
+pub const O_DSYNC = 0x00010000;
+
+/// read: I/O completion as for write
+pub const O_RSYNC = 0x00020000;
+
+/// use alternate i/o semantics
+pub const O_ALT_IO = 0x00040000;
+
+/// direct I/O hint
+pub const O_DIRECT = 0x00080000;
+
+/// fail if not a directory
+pub const O_DIRECTORY = 0x00200000;
+
+/// set close on exec
+pub const O_CLOEXEC = 0x00400000;
+
+/// skip search permission checks
+pub const O_SEARCH = 0x00800000;
+
+pub const F_DUPFD = 0;
+pub const F_GETFD = 1;
+pub const F_SETFD = 2;
+pub const F_GETFL = 3;
+pub const F_SETFL = 4;
+
+pub const F_GETOWN = 5;
+pub const F_SETOWN = 6;
+
+pub const F_GETLK = 7;
+pub const F_SETLK = 8;
+pub const F_SETLKW = 9;
+
+pub const F_RDLCK = 1;
+pub const F_WRLCK = 3;
+pub const F_UNLCK = 2;
+
+pub const LOCK_SH = 1;
+pub const LOCK_EX = 2;
+pub const LOCK_UN = 8;
+pub const LOCK_NB = 4;
+
+pub const FD_CLOEXEC = 1;
+
+pub const SEEK_SET = 0;
+pub const SEEK_CUR = 1;
+pub const SEEK_END = 2;
+
+pub const SIG_BLOCK = 1;
+pub const SIG_UNBLOCK = 2;
+pub const SIG_SETMASK = 3;
+
+pub const DT_UNKNOWN = 0;
+pub const DT_FIFO = 1;
+pub const DT_CHR = 2;
+pub const DT_DIR = 4;
+pub const DT_BLK = 6;
+pub const DT_REG = 8;
+pub const DT_LNK = 10;
+pub const DT_SOCK = 12;
+pub const DT_WHT = 14;
+
+/// add event to kq (implies enable)
+pub const EV_ADD = 0x0001;
+
+/// delete event from kq
+pub const EV_DELETE = 0x0002;
+
+/// enable event
+pub const EV_ENABLE = 0x0004;
+
+/// disable event (not reported)
+pub const EV_DISABLE = 0x0008;
+
+/// only report one occurrence
+pub const EV_ONESHOT = 0x0010;
+
+/// clear event state after reporting
+pub const EV_CLEAR = 0x0020;
+
+/// force immediate event output
+/// ... with or without EV_ERROR
+/// ... use KEVENT_FLAG_ERROR_EVENTS
+/// on syscalls supporting flags
+pub const EV_RECEIPT = 0x0040;
+
+/// disable event after reporting
+pub const EV_DISPATCH = 0x0080;
+
+pub const EVFILT_READ = 0;
+pub const EVFILT_WRITE = 1;
+
+/// attached to aio requests
+pub const EVFILT_AIO = 2;
+
+/// attached to vnodes
+pub const EVFILT_VNODE = 3;
+
+/// attached to struct proc
+pub const EVFILT_PROC = 4;
+
+/// attached to struct proc
+pub const EVFILT_SIGNAL = 5;
+
+/// timers
+pub const EVFILT_TIMER = 6;
+
+/// Filesystem events
+pub const EVFILT_FS = 7;
+
+/// On input, NOTE_TRIGGER causes the event to be triggered for output.
+pub const NOTE_TRIGGER = 0x08000000;
+
+/// low water mark
+pub const NOTE_LOWAT = 0x00000001;
+
+/// vnode was removed
+pub const NOTE_DELETE = 0x00000001;
+
+/// data contents changed
+pub const NOTE_WRITE = 0x00000002;
+
+/// size increased
+pub const NOTE_EXTEND = 0x00000004;
+
+/// attributes changed
+pub const NOTE_ATTRIB = 0x00000008;
+
+/// link count changed
+pub const NOTE_LINK = 0x00000010;
+
+/// vnode was renamed
+pub const NOTE_RENAME = 0x00000020;
+
+/// vnode access was revoked
+pub const NOTE_REVOKE = 0x00000040;
+
+/// process exited
+pub const NOTE_EXIT = 0x80000000;
+
+/// process forked
+pub const NOTE_FORK = 0x40000000;
+
+/// process exec'd
+pub const NOTE_EXEC = 0x20000000;
+
+/// mask for signal & exit status
+pub const NOTE_PDATAMASK = 0x000fffff;
+pub const NOTE_PCTRLMASK = 0xf0000000;
+
+pub const TIOCCBRK = 0x2000747a;
+pub const TIOCCDTR = 0x20007478;
+pub const TIOCCONS = 0x80047462;
+pub const TIOCDCDTIMESTAMP = 0x40107458;
+pub const TIOCDRAIN = 0x2000745e;
+pub const TIOCEXCL = 0x2000740d;
+pub const TIOCEXT = 0x80047460;
+pub const TIOCFLAG_CDTRCTS = 0x10;
+pub const TIOCFLAG_CLOCAL = 0x2;
+pub const TIOCFLAG_CRTSCTS = 0x4;
+pub const TIOCFLAG_MDMBUF = 0x8;
+pub const TIOCFLAG_SOFTCAR = 0x1;
+pub const TIOCFLUSH = 0x80047410;
+pub const TIOCGETA = 0x402c7413;
+pub const TIOCGETD = 0x4004741a;
+pub const TIOCGFLAGS = 0x4004745d;
+pub const TIOCGLINED = 0x40207442;
+pub const TIOCGPGRP = 0x40047477;
+pub const TIOCGQSIZE = 0x40047481;
+pub const TIOCGRANTPT = 0x20007447;
+pub const TIOCGSID = 0x40047463;
+pub const TIOCGSIZE = 0x40087468;
+pub const TIOCGWINSZ = 0x40087468;
+pub const TIOCMBIC = 0x8004746b;
+pub const TIOCMBIS = 0x8004746c;
+pub const TIOCMGET = 0x4004746a;
+pub const TIOCMSET = 0x8004746d;
+pub const TIOCM_CAR = 0x40;
+pub const TIOCM_CD = 0x40;
+pub const TIOCM_CTS = 0x20;
+pub const TIOCM_DSR = 0x100;
+pub const TIOCM_DTR = 0x2;
+pub const TIOCM_LE = 0x1;
+pub const TIOCM_RI = 0x80;
+pub const TIOCM_RNG = 0x80;
+pub const TIOCM_RTS = 0x4;
+pub const TIOCM_SR = 0x10;
+pub const TIOCM_ST = 0x8;
+pub const TIOCNOTTY = 0x20007471;
+pub const TIOCNXCL = 0x2000740e;
+pub const TIOCOUTQ = 0x40047473;
+pub const TIOCPKT = 0x80047470;
+pub const TIOCPKT_DATA = 0x0;
+pub const TIOCPKT_DOSTOP = 0x20;
+pub const TIOCPKT_FLUSHREAD = 0x1;
+pub const TIOCPKT_FLUSHWRITE = 0x2;
+pub const TIOCPKT_IOCTL = 0x40;
+pub const TIOCPKT_NOSTOP = 0x10;
+pub const TIOCPKT_START = 0x8;
+pub const TIOCPKT_STOP = 0x4;
+pub const TIOCPTMGET = 0x40287446;
+pub const TIOCPTSNAME = 0x40287448;
+pub const TIOCRCVFRAME = 0x80087445;
+pub const TIOCREMOTE = 0x80047469;
+pub const TIOCSBRK = 0x2000747b;
+pub const TIOCSCTTY = 0x20007461;
+pub const TIOCSDTR = 0x20007479;
+pub const TIOCSETA = 0x802c7414;
+pub const TIOCSETAF = 0x802c7416;
+pub const TIOCSETAW = 0x802c7415;
+pub const TIOCSETD = 0x8004741b;
+pub const TIOCSFLAGS = 0x8004745c;
+pub const TIOCSIG = 0x2000745f;
+pub const TIOCSLINED = 0x80207443;
+pub const TIOCSPGRP = 0x80047476;
+pub const TIOCSQSIZE = 0x80047480;
+pub const TIOCSSIZE = 0x80087467;
+pub const TIOCSTART = 0x2000746e;
+pub const TIOCSTAT = 0x80047465;
+pub const TIOCSTI = 0x80017472;
+pub const TIOCSTOP = 0x2000746f;
+pub const TIOCSWINSZ = 0x80087467;
+pub const TIOCUCNTL = 0x80047466;
+pub const TIOCXMTFRAME = 0x80087444;
+
+pub fn WEXITSTATUS(s: u32) u8 {
+ return @intCast(u8, (s >> 8) & 0xff);
+}
+pub fn WTERMSIG(s: u32) u32 {
+ return s & 0x7f;
+}
+pub fn WSTOPSIG(s: u32) u32 {
+ return WEXITSTATUS(s);
+}
+pub fn WIFEXITED(s: u32) bool {
+ return WTERMSIG(s) == 0;
+}
+
+pub fn WIFCONTINUED(s: u32) bool {
+ return ((s & 0x7f) == 0xffff);
+}
+
+pub fn WIFSTOPPED(s: u32) bool {
+ return ((s & 0x7f != 0x7f) and !WIFCONTINUED(s));
+}
+
+pub fn WIFSIGNALED(s: u32) bool {
+ return !WIFSTOPPED(s) and !WIFCONTINUED(s) and !WIFEXITED(s);
+}
+
+pub const winsize = extern struct {
+ ws_row: u16,
+ ws_col: u16,
+ ws_xpixel: u16,
+ ws_ypixel: u16,
+};
+
+const NSIG = 32;
+
+pub const SIG_DFL = @intToPtr(?Sigaction.sigaction_fn, 0);
+pub const SIG_IGN = @intToPtr(?Sigaction.sigaction_fn, 1);
+pub const SIG_ERR = @intToPtr(?Sigaction.sigaction_fn, maxInt(usize));
+
+/// Renamed from `sigaction` to `Sigaction` to avoid conflict with the syscall.
+pub const Sigaction = extern struct {
+ pub const handler_fn = fn (c_int) callconv(.C) void;
+ pub const sigaction_fn = fn (c_int, *const siginfo_t, ?*const c_void) callconv(.C) void;
+
+ /// signal handler
+ handler: extern union {
+ handler: ?handler_fn,
+ sigaction: ?sigaction_fn,
+ },
+ /// signal mask to apply
+ mask: sigset_t,
+ /// signal options
+ flags: c_uint,
+};
+
+pub const sigval_t = extern union {
+ int: i32,
+ ptr: ?*c_void,
+};
+
+pub const siginfo_t = extern union {
+ pad: [128]u8,
+ info: _ksiginfo,
+};
+
+pub const _ksiginfo = extern struct {
+ signo: i32,
+ code: i32,
+ errno: i32,
+ // 64bit architectures insert 4bytes of padding here, this is done by
+ // correctly aligning the reason field
+ reason: extern union {
+ rt: extern struct {
+ pid: pid_t,
+ uid: uid_t,
+ value: sigval_t,
+ },
+ child: extern struct {
+ pid: pid_t,
+ uid: uid_t,
+ status: i32,
+ utime: clock_t,
+ stime: clock_t,
+ },
+ fault: extern struct {
+ addr: ?*c_void,
+ trap: i32,
+ trap2: i32,
+ trap3: i32,
+ },
+ poll: extern struct {
+ band: i32,
+ fd: i32,
+ },
+ syscall: extern struct {
+ sysnum: i32,
+ retval: [2]i32,
+ @"error": i32,
+ args: [8]u64,
+ },
+ ptrace_state: extern struct {
+ pe_report_event: i32,
+ option: extern union {
+ pe_other_pid: pid_t,
+ pe_lwp: lwpid_t,
+ },
+ },
+ } align(@sizeOf(usize)),
+};
+
+pub const _SIG_WORDS = 4;
+pub const _SIG_MAXSIG = 128;
+
+pub inline fn _SIG_IDX(sig: usize) usize {
+ return sig - 1;
+}
+pub inline fn _SIG_WORD(sig: usize) usize {
+ return_SIG_IDX(sig) >> 5;
+}
+pub inline fn _SIG_BIT(sig: usize) usize {
+ return 1 << (_SIG_IDX(sig) & 31);
+}
+pub inline fn _SIG_VALID(sig: usize) usize {
+ return sig <= _SIG_MAXSIG and sig > 0;
+}
+
+pub const sigset_t = extern struct {
+ __bits: [_SIG_WORDS]u32,
+};
+
+pub const empty_sigset = sigset_t{ .__bits = [_]u32{0} ** _SIG_WORDS };
+
+// XXX x86_64 specific
+pub const mcontext_t = extern struct {
+ gregs: [26]u64,
+ mc_tlsbase: u64,
+ fpregs: [512]u8 align(8),
+};
+
+pub const REG_RBP = 12;
+pub const REG_RIP = 21;
+pub const REG_RSP = 24;
+
+pub const ucontext_t = extern struct {
+ flags: u32,
+ link: ?*ucontext_t,
+ sigmask: sigset_t,
+ stack: stack_t,
+ mcontext: mcontext_t,
+ __pad: [
+ switch (builtin.cpu.arch) {
+ .i386 => 4,
+ .mips, .mipsel, .mips64, .mips64el => 14,
+ .arm, .armeb, .thumb, .thumbeb => 1,
+ .sparc, .sparcel, .sparcv9 => if (@sizeOf(usize) == 4) 43 else 8,
+ else => 0,
+ }
+ ]u32,
+};
+
+pub const E = enum(u16) {
+ /// No error occurred.
+ SUCCESS = 0,
+ PERM = 1, // Operation not permitted
+ NOENT = 2, // No such file or directory
+ SRCH = 3, // No such process
+ INTR = 4, // Interrupted system call
+ IO = 5, // Input/output error
+ NXIO = 6, // Device not configured
+ @"2BIG" = 7, // Argument list too long
+ NOEXEC = 8, // Exec format error
+ BADF = 9, // Bad file descriptor
+ CHILD = 10, // No child processes
+ DEADLK = 11, // Resource deadlock avoided
+ // 11 was AGAIN
+ NOMEM = 12, // Cannot allocate memory
+ ACCES = 13, // Permission denied
+ FAULT = 14, // Bad address
+ NOTBLK = 15, // Block device required
+ BUSY = 16, // Device busy
+ EXIST = 17, // File exists
+ XDEV = 18, // Cross-device link
+ NODEV = 19, // Operation not supported by device
+ NOTDIR = 20, // Not a directory
+ ISDIR = 21, // Is a directory
+ INVAL = 22, // Invalid argument
+ NFILE = 23, // Too many open files in system
+ MFILE = 24, // Too many open files
+ NOTTY = 25, // Inappropriate ioctl for device
+ TXTBSY = 26, // Text file busy
+ FBIG = 27, // File too large
+ NOSPC = 28, // No space left on device
+ SPIPE = 29, // Illegal seek
+ ROFS = 30, // Read-only file system
+ MLINK = 31, // Too many links
+ PIPE = 32, // Broken pipe
+
+ // math software
+ DOM = 33, // Numerical argument out of domain
+ RANGE = 34, // Result too large or too small
+
+ // non-blocking and interrupt i/o
+ // also: WOULDBLOCK: operation would block
+ AGAIN = 35, // Resource temporarily unavailable
+ INPROGRESS = 36, // Operation now in progress
+ ALREADY = 37, // Operation already in progress
+
+ // ipc/network software -- argument errors
+ NOTSOCK = 38, // Socket operation on non-socket
+ DESTADDRREQ = 39, // Destination address required
+ MSGSIZE = 40, // Message too long
+ PROTOTYPE = 41, // Protocol wrong type for socket
+ NOPROTOOPT = 42, // Protocol option not available
+ PROTONOSUPPORT = 43, // Protocol not supported
+ SOCKTNOSUPPORT = 44, // Socket type not supported
+ OPNOTSUPP = 45, // Operation not supported
+ PFNOSUPPORT = 46, // Protocol family not supported
+ AFNOSUPPORT = 47, // Address family not supported by protocol family
+ ADDRINUSE = 48, // Address already in use
+ ADDRNOTAVAIL = 49, // Can't assign requested address
+
+ // ipc/network software -- operational errors
+ NETDOWN = 50, // Network is down
+ NETUNREACH = 51, // Network is unreachable
+ NETRESET = 52, // Network dropped connection on reset
+ CONNABORTED = 53, // Software caused connection abort
+ CONNRESET = 54, // Connection reset by peer
+ NOBUFS = 55, // No buffer space available
+ ISCONN = 56, // Socket is already connected
+ NOTCONN = 57, // Socket is not connected
+ SHUTDOWN = 58, // Can't send after socket shutdown
+ TOOMANYREFS = 59, // Too many references: can't splice
+ TIMEDOUT = 60, // Operation timed out
+ CONNREFUSED = 61, // Connection refused
+
+ LOOP = 62, // Too many levels of symbolic links
+ NAMETOOLONG = 63, // File name too long
+
+ // should be rearranged
+ HOSTDOWN = 64, // Host is down
+ HOSTUNREACH = 65, // No route to host
+ NOTEMPTY = 66, // Directory not empty
+
+ // quotas & mush
+ PROCLIM = 67, // Too many processes
+ USERS = 68, // Too many users
+ DQUOT = 69, // Disc quota exceeded
+
+ // Network File System
+ STALE = 70, // Stale NFS file handle
+ REMOTE = 71, // Too many levels of remote in path
+ BADRPC = 72, // RPC struct is bad
+ RPCMISMATCH = 73, // RPC version wrong
+ PROGUNAVAIL = 74, // RPC prog. not avail
+ PROGMISMATCH = 75, // Program version wrong
+ PROCUNAVAIL = 76, // Bad procedure for program
+
+ NOLCK = 77, // No locks available
+ NOSYS = 78, // Function not implemented
+
+ FTYPE = 79, // Inappropriate file type or format
+ AUTH = 80, // Authentication error
+ NEEDAUTH = 81, // Need authenticator
+
+ // SystemV IPC
+ IDRM = 82, // Identifier removed
+ NOMSG = 83, // No message of desired type
+ OVERFLOW = 84, // Value too large to be stored in data type
+
+ // Wide/multibyte-character handling, ISO/IEC 9899/AMD1:1995
+ ILSEQ = 85, // Illegal byte sequence
+
+ // From IEEE Std 1003.1-2001
+ // Base, Realtime, Threads or Thread Priority Scheduling option errors
+ NOTSUP = 86, // Not supported
+
+ // Realtime option errors
+ CANCELED = 87, // Operation canceled
+
+ // Realtime, XSI STREAMS option errors
+ BADMSG = 88, // Bad or Corrupt message
+
+ // XSI STREAMS option errors
+ NODATA = 89, // No message available
+ NOSR = 90, // No STREAM resources
+ NOSTR = 91, // Not a STREAM
+ TIME = 92, // STREAM ioctl timeout
+
+ // File system extended attribute errors
+ NOATTR = 93, // Attribute not found
+
+ // Realtime, XSI STREAMS option errors
+ MULTIHOP = 94, // Multihop attempted
+ NOLINK = 95, // Link has been severed
+ PROTO = 96, // Protocol error
+
+ _,
+};
+
+pub const MINSIGSTKSZ = 8192;
+pub const SIGSTKSZ = MINSIGSTKSZ + 32768;
+
+pub const SS_ONSTACK = 1;
+pub const SS_DISABLE = 4;
+
+pub const stack_t = extern struct {
+ ss_sp: [*]u8,
+ ss_size: isize,
+ ss_flags: i32,
+};
+
+pub const S_IFMT = 0o170000;
+
+pub const S_IFIFO = 0o010000;
+pub const S_IFCHR = 0o020000;
+pub const S_IFDIR = 0o040000;
+pub const S_IFBLK = 0o060000;
+pub const S_IFREG = 0o100000;
+pub const S_IFLNK = 0o120000;
+pub const S_IFSOCK = 0o140000;
+pub const S_IFWHT = 0o160000;
+
+pub const S_ISUID = 0o4000;
+pub const S_ISGID = 0o2000;
+pub const S_ISVTX = 0o1000;
+pub const S_IRWXU = 0o700;
+pub const S_IRUSR = 0o400;
+pub const S_IWUSR = 0o200;
+pub const S_IXUSR = 0o100;
+pub const S_IRWXG = 0o070;
+pub const S_IRGRP = 0o040;
+pub const S_IWGRP = 0o020;
+pub const S_IXGRP = 0o010;
+pub const S_IRWXO = 0o007;
+pub const S_IROTH = 0o004;
+pub const S_IWOTH = 0o002;
+pub const S_IXOTH = 0o001;
+
+pub fn S_ISFIFO(m: u32) bool {
+ return m & S_IFMT == S_IFIFO;
+}
+
+pub fn S_ISCHR(m: u32) bool {
+ return m & S_IFMT == S_IFCHR;
+}
+
+pub fn S_ISDIR(m: u32) bool {
+ return m & S_IFMT == S_IFDIR;
+}
+
+pub fn S_ISBLK(m: u32) bool {
+ return m & S_IFMT == S_IFBLK;
+}
+
+pub fn S_ISREG(m: u32) bool {
+ return m & S_IFMT == S_IFREG;
+}
+
+pub fn S_ISLNK(m: u32) bool {
+ return m & S_IFMT == S_IFLNK;
+}
+
+pub fn S_ISSOCK(m: u32) bool {
+ return m & S_IFMT == S_IFSOCK;
+}
+
+pub fn S_IWHT(m: u32) bool {
+ return m & S_IFMT == S_IFWHT;
+}
+
+/// 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 AT_FDCWD = -100;
+
+/// Check access using effective user and group ID
+pub const AT_EACCESS = 0x0100;
+
+/// Do not follow symbolic links
+pub const AT_SYMLINK_NOFOLLOW = 0x0200;
+
+/// Follow symbolic link
+pub const AT_SYMLINK_FOLLOW = 0x0400;
+
+/// Remove directory instead of file
+pub const AT_REMOVEDIR = 0x0800;
+
+pub const HOST_NAME_MAX = 255;
+
+/// dummy for IP
+pub const IPPROTO_IP = 0;
+
+/// IP6 hop-by-hop options
+pub const IPPROTO_HOPOPTS = 0;
+
+/// control message protocol
+pub const IPPROTO_ICMP = 1;
+
+/// group mgmt protocol
+pub const IPPROTO_IGMP = 2;
+
+/// gateway^2 (deprecated)
+pub const IPPROTO_GGP = 3;
+
+/// IP header
+pub const IPPROTO_IPV4 = 4;
+
+/// IP inside IP
+pub const IPPROTO_IPIP = 4;
+
+/// tcp
+pub const IPPROTO_TCP = 6;
+
+/// exterior gateway protocol
+pub const IPPROTO_EGP = 8;
+
+/// pup
+pub const IPPROTO_PUP = 12;
+
+/// user datagram protocol
+pub const IPPROTO_UDP = 17;
+
+/// xns idp
+pub const IPPROTO_IDP = 22;
+
+/// tp-4 w/ class negotiation
+pub const IPPROTO_TP = 29;
+
+/// DCCP
+pub const IPPROTO_DCCP = 33;
+
+/// IP6 header
+pub const IPPROTO_IPV6 = 41;
+
+/// IP6 routing header
+pub const IPPROTO_ROUTING = 43;
+
+/// IP6 fragmentation header
+pub const IPPROTO_FRAGMENT = 44;
+
+/// resource reservation
+pub const IPPROTO_RSVP = 46;
+
+/// GRE encaps RFC 1701
+pub const IPPROTO_GRE = 47;
+
+/// encap. security payload
+pub const IPPROTO_ESP = 50;
+
+/// authentication header
+pub const IPPROTO_AH = 51;
+
+/// IP Mobility RFC 2004
+pub const IPPROTO_MOBILE = 55;
+
+/// IPv6 ICMP
+pub const IPPROTO_IPV6_ICMP = 58;
+
+/// ICMP6
+pub const IPPROTO_ICMPV6 = 58;
+
+/// IP6 no next header
+pub const IPPROTO_NONE = 59;
+
+/// IP6 destination option
+pub const IPPROTO_DSTOPTS = 60;
+
+/// ISO cnlp
+pub const IPPROTO_EON = 80;
+
+/// Ethernet-in-IP
+pub const IPPROTO_ETHERIP = 97;
+
+/// encapsulation header
+pub const IPPROTO_ENCAP = 98;
+
+/// Protocol indep. multicast
+pub const IPPROTO_PIM = 103;
+
+/// IP Payload Comp. Protocol
+pub const IPPROTO_IPCOMP = 108;
+
+/// VRRP RFC 2338
+pub const IPPROTO_VRRP = 112;
+
+/// Common Address Resolution Protocol
+pub const IPPROTO_CARP = 112;
+
+/// L2TPv3
+pub const IPPROTO_L2TP = 115;
+
+/// SCTP
+pub const IPPROTO_SCTP = 132;
+
+/// PFSYNC
+pub const IPPROTO_PFSYNC = 240;
+
+/// raw IP packet
+pub const IPPROTO_RAW = 255;
+
+pub const rlimit_resource = enum(c_int) {
+ CPU = 0,
+ FSIZE = 1,
+ DATA = 2,
+ STACK = 3,
+ CORE = 4,
+ RSS = 5,
+ MEMLOCK = 6,
+ NPROC = 7,
+ NOFILE = 8,
+ SBSIZE = 9,
+ VMEM = 10,
+ NTHR = 11,
+ _,
+
+ pub const AS: rlimit_resource = .VMEM;
+};
+
+pub const rlim_t = u64;
+
+/// No limit
+pub const RLIM_INFINITY: rlim_t = (1 << 63) - 1;
+
+pub const RLIM_SAVED_MAX = RLIM_INFINITY;
+pub const RLIM_SAVED_CUR = RLIM_INFINITY;
+
+pub const rlimit = extern struct {
+ /// Soft limit
+ cur: rlim_t,
+ /// Hard limit
+ max: rlim_t,
+};
+
+pub const SHUT_RD = 0;
+pub const SHUT_WR = 1;
+pub const SHUT_RDWR = 2;
+
+pub const nfds_t = u32;
+
+pub const pollfd = extern struct {
+ fd: fd_t,
+ events: i16,
+ revents: i16,
+};
+
+/// Testable events (may be specified in events field).
+pub const POLLIN = 0x0001;
+pub const POLLPRI = 0x0002;
+pub const POLLOUT = 0x0004;
+pub const POLLRDNORM = 0x0040;
+pub const POLLWRNORM = POLLOUT;
+pub const POLLRDBAND = 0x0080;
+pub const POLLWRBAND = 0x0100;
+
+/// Non-testable events (may not be specified in events field).
+pub const POLLERR = 0x0008;
+pub const POLLHUP = 0x0010;
+pub const POLLNVAL = 0x0020;
diff --git a/lib/std/c/openbsd.zig b/lib/std/c/openbsd.zig
index e5ded7f3fb..589dd9dc69 100644
--- a/lib/std/c/openbsd.zig
+++ b/lib/std/c/openbsd.zig
@@ -1,7 +1,6 @@
const std = @import("../std.zig");
-const builtin = std.builtin;
-
-usingnamespace std.c;
+const maxInt = std.math.maxInt;
+const builtin = @import("builtin");
extern "c" fn __errno() *c_int;
pub const _errno = __errno;
@@ -43,3 +42,1328 @@ pub extern "c" fn unveil(path: ?[*:0]const u8, permissions: ?[*:0]const u8) c_in
pub extern "c" fn pthread_set_name_np(thread: std.c.pthread_t, name: [*:0]const u8) void;
pub extern "c" fn pthread_get_name_np(thread: std.c.pthread_t, name: [*:0]u8, len: usize) void;
+
+pub const blkcnt_t = i64;
+pub const blksize_t = i32;
+pub const clock_t = i64;
+pub const dev_t = i32;
+pub const fd_t = c_int;
+pub const gid_t = u32;
+pub const ino_t = u64;
+pub const mode_t = u32;
+pub const nlink_t = u32;
+pub const off_t = i64;
+pub const pid_t = i32;
+pub const socklen_t = u32;
+pub const time_t = i64;
+pub const uid_t = u32;
+
+/// Renamed from `kevent` to `Kevent` to avoid conflict with function name.
+pub const Kevent = extern struct {
+ ident: usize,
+ filter: c_short,
+ flags: u16,
+ fflags: c_uint,
+ data: i64,
+ udata: usize,
+};
+
+// Modes and flags for dlopen()
+// include/dlfcn.h
+
+/// Bind function calls lazily.
+pub const RTLD_LAZY = 1;
+
+/// Bind function calls immediately.
+pub const RTLD_NOW = 2;
+
+/// Make symbols globally available.
+pub const RTLD_GLOBAL = 0x100;
+
+/// Opposite of RTLD_GLOBAL, and the default.
+pub const RTLD_LOCAL = 0x000;
+
+/// Trace loaded objects and exit.
+pub const RTLD_TRACE = 0x200;
+
+pub const dl_phdr_info = extern struct {
+ dlpi_addr: std.elf.Addr,
+ dlpi_name: ?[*:0]const u8,
+ dlpi_phdr: [*]std.elf.Phdr,
+ dlpi_phnum: std.elf.Half,
+};
+
+pub const Flock = extern struct {
+ l_start: off_t,
+ l_len: off_t,
+ l_pid: pid_t,
+ l_type: c_short,
+ l_whence: c_short,
+};
+
+pub const addrinfo = extern struct {
+ flags: c_int,
+ family: c_int,
+ socktype: c_int,
+ protocol: c_int,
+ addrlen: socklen_t,
+ addr: ?*sockaddr,
+ canonname: ?[*:0]u8,
+ next: ?*addrinfo,
+};
+
+pub const EAI = 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,
+
+ _,
+};
+
+pub const EAI_MAX = 15;
+
+pub const msghdr = extern struct {
+ /// optional address
+ msg_name: ?*sockaddr,
+
+ /// size of address
+ msg_namelen: socklen_t,
+
+ /// scatter/gather array
+ msg_iov: [*]iovec,
+
+ /// # elements in msg_iov
+ msg_iovlen: c_uint,
+
+ /// ancillary data
+ msg_control: ?*c_void,
+
+ /// ancillary data buffer len
+ msg_controllen: socklen_t,
+
+ /// flags on received message
+ msg_flags: c_int,
+};
+
+pub const msghdr_const = extern struct {
+ /// optional address
+ msg_name: ?*const sockaddr,
+
+ /// size of address
+ msg_namelen: socklen_t,
+
+ /// scatter/gather array
+ msg_iov: [*]iovec_const,
+
+ /// # elements in msg_iov
+ msg_iovlen: c_uint,
+
+ /// ancillary data
+ msg_control: ?*c_void,
+
+ /// ancillary data buffer len
+ msg_controllen: socklen_t,
+
+ /// flags on received message
+ msg_flags: c_int,
+};
+
+pub const Stat = extern struct {
+ mode: mode_t,
+ dev: dev_t,
+ ino: ino_t,
+ nlink: nlink_t,
+ uid: uid_t,
+ gid: gid_t,
+ rdev: dev_t,
+ atim: timespec,
+ mtim: timespec,
+ ctim: timespec,
+ size: off_t,
+ blocks: blkcnt_t,
+ blksize: blksize_t,
+ flags: u32,
+ gen: u32,
+ birthtim: timespec,
+
+ pub fn atime(self: @This()) timespec {
+ return self.atim;
+ }
+
+ pub fn mtime(self: @This()) timespec {
+ return self.mtim;
+ }
+
+ pub fn ctime(self: @This()) timespec {
+ return self.ctim;
+ }
+};
+
+pub const timespec = extern struct {
+ tv_sec: time_t,
+ tv_nsec: c_long,
+};
+
+pub const timeval = extern struct {
+ tv_sec: time_t,
+ tv_usec: c_long,
+};
+
+pub const timezone = extern struct {
+ tz_minuteswest: c_int,
+ tz_dsttime: c_int,
+};
+
+pub const MAXNAMLEN = 255;
+
+pub const dirent = extern struct {
+ d_fileno: ino_t,
+ d_off: off_t,
+ d_reclen: u16,
+ d_type: u8,
+ d_namlen: u8,
+ __d_padding: [4]u8,
+ d_name: [MAXNAMLEN + 1]u8,
+
+ pub fn reclen(self: dirent) u16 {
+ return self.d_reclen;
+ }
+};
+
+pub const in_port_t = u16;
+pub const sa_family_t = u8;
+
+pub const sockaddr = extern struct {
+ /// total length
+ len: u8,
+
+ /// address family
+ family: sa_family_t,
+
+ /// actually longer; address value
+ data: [14]u8,
+};
+
+pub const sockaddr_storage = std.x.os.Socket.Address.Native.Storage;
+
+pub const sockaddr_in = extern struct {
+ len: u8 = @sizeOf(sockaddr_in),
+ family: sa_family_t = AF_INET,
+ port: in_port_t,
+ addr: u32,
+ zero: [8]u8 = [8]u8{ 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+
+pub const sockaddr_in6 = extern struct {
+ len: u8 = @sizeOf(sockaddr_in6),
+ family: sa_family_t = AF_INET6,
+ port: in_port_t,
+ flowinfo: u32,
+ addr: [16]u8,
+ scope_id: u32,
+};
+
+/// Definitions for UNIX IPC domain.
+pub const sockaddr_un = extern struct {
+ /// total sockaddr length
+ len: u8 = @sizeOf(sockaddr_un),
+
+ /// AF_LOCAL
+ family: sa_family_t = AF_LOCAL,
+
+ /// path name
+ path: [104]u8,
+};
+
+/// get address to use bind()
+pub const AI_PASSIVE = 1;
+
+/// fill ai_canonname
+pub const AI_CANONNAME = 2;
+
+/// prevent host name resolution
+pub const AI_NUMERICHOST = 4;
+
+/// prevent service name resolution
+pub const AI_NUMERICSERV = 16;
+
+/// only if any address is assigned
+pub const AI_ADDRCONFIG = 64;
+
+pub const PATH_MAX = 1024;
+pub const IOV_MAX = 1024;
+
+pub const STDIN_FILENO = 0;
+pub const STDOUT_FILENO = 1;
+pub const STDERR_FILENO = 2;
+
+pub const PROT_NONE = 0;
+pub const PROT_READ = 1;
+pub const PROT_WRITE = 2;
+pub const PROT_EXEC = 4;
+
+pub const CLOCK_REALTIME = 0;
+pub const CLOCK_PROCESS_CPUTIME_ID = 2;
+pub const CLOCK_MONOTONIC = 3;
+pub const CLOCK_THREAD_CPUTIME_ID = 4;
+
+pub const MAP_FAILED = @intToPtr(*c_void, maxInt(usize));
+pub const MAP_SHARED = 0x0001;
+pub const MAP_PRIVATE = 0x0002;
+pub const MAP_FIXED = 0x0010;
+pub const MAP_RENAME = 0;
+pub const MAP_NORESERVE = 0;
+pub const MAP_INHERIT = 0;
+pub const MAP_HASSEMAPHORE = 0;
+pub const MAP_TRYFIXED = 0;
+
+pub const MAP_FILE = 0;
+pub const MAP_ANON = 0x1000;
+pub const MAP_ANONYMOUS = MAP_ANON;
+pub const MAP_STACK = 0x4000;
+pub const MAP_CONCEAL = 0x8000;
+
+pub const WNOHANG = 1;
+pub const WUNTRACED = 2;
+pub const WCONTINUED = 8;
+
+pub const SA_ONSTACK = 0x0001;
+pub const SA_RESTART = 0x0002;
+pub const SA_RESETHAND = 0x0004;
+pub const SA_NOCLDSTOP = 0x0008;
+pub const SA_NODEFER = 0x0010;
+pub const SA_NOCLDWAIT = 0x0020;
+pub const SA_SIGINFO = 0x0040;
+
+pub const SIGHUP = 1;
+pub const SIGINT = 2;
+pub const SIGQUIT = 3;
+pub const SIGILL = 4;
+pub const SIGTRAP = 5;
+pub const SIGABRT = 6;
+pub const SIGIOT = SIGABRT;
+pub const SIGEMT = 7;
+pub const SIGFPE = 8;
+pub const SIGKILL = 9;
+pub const SIGBUS = 10;
+pub const SIGSEGV = 11;
+pub const SIGSYS = 12;
+pub const SIGPIPE = 13;
+pub const SIGALRM = 14;
+pub const SIGTERM = 15;
+pub const SIGURG = 16;
+pub const SIGSTOP = 17;
+pub const SIGTSTP = 18;
+pub const SIGCONT = 19;
+pub const SIGCHLD = 20;
+pub const SIGTTIN = 21;
+pub const SIGTTOU = 22;
+pub const SIGIO = 23;
+pub const SIGXCPU = 24;
+pub const SIGXFSZ = 25;
+pub const SIGVTALRM = 26;
+pub const SIGPROF = 27;
+pub const SIGWINCH = 28;
+pub const SIGINFO = 29;
+pub const SIGUSR1 = 30;
+pub const SIGUSR2 = 31;
+pub const SIGPWR = 32;
+
+// access function
+pub const F_OK = 0; // test for existence of file
+pub const X_OK = 1; // test for execute or search permission
+pub const W_OK = 2; // test for write permission
+pub const R_OK = 4; // test for read permission
+
+/// open for reading only
+pub const O_RDONLY = 0x00000000;
+
+/// open for writing only
+pub const O_WRONLY = 0x00000001;
+
+/// open for reading and writing
+pub const O_RDWR = 0x00000002;
+
+/// mask for above modes
+pub const O_ACCMODE = 0x00000003;
+
+/// no delay
+pub const O_NONBLOCK = 0x00000004;
+
+/// set append mode
+pub const O_APPEND = 0x00000008;
+
+/// open with shared file lock
+pub const O_SHLOCK = 0x00000010;
+
+/// open with exclusive file lock
+pub const O_EXLOCK = 0x00000020;
+
+/// signal pgrp when data ready
+pub const O_ASYNC = 0x00000040;
+
+/// synchronous writes
+pub const O_SYNC = 0x00000080;
+
+/// don't follow symlinks on the last
+pub const O_NOFOLLOW = 0x00000100;
+
+/// create if nonexistent
+pub const O_CREAT = 0x00000200;
+
+/// truncate to zero length
+pub const O_TRUNC = 0x00000400;
+
+/// error if already exists
+pub const O_EXCL = 0x00000800;
+
+/// don't assign controlling terminal
+pub const O_NOCTTY = 0x00008000;
+
+/// write: I/O data completion
+pub const O_DSYNC = O_SYNC;
+
+/// read: I/O completion as for write
+pub const O_RSYNC = O_SYNC;
+
+/// fail if not a directory
+pub const O_DIRECTORY = 0x20000;
+
+/// set close on exec
+pub const O_CLOEXEC = 0x10000;
+
+pub const F_DUPFD = 0;
+pub const F_GETFD = 1;
+pub const F_SETFD = 2;
+pub const F_GETFL = 3;
+pub const F_SETFL = 4;
+
+pub const F_GETOWN = 5;
+pub const F_SETOWN = 6;
+
+pub const F_GETLK = 7;
+pub const F_SETLK = 8;
+pub const F_SETLKW = 9;
+
+pub const F_RDLCK = 1;
+pub const F_UNLCK = 2;
+pub const F_WRLCK = 3;
+
+pub const LOCK_SH = 0x01;
+pub const LOCK_EX = 0x02;
+pub const LOCK_NB = 0x04;
+pub const LOCK_UN = 0x08;
+
+pub const FD_CLOEXEC = 1;
+
+pub const SEEK_SET = 0;
+pub const SEEK_CUR = 1;
+pub const SEEK_END = 2;
+
+pub const SIG_BLOCK = 1;
+pub const SIG_UNBLOCK = 2;
+pub const SIG_SETMASK = 3;
+
+pub const SOCK_STREAM = 1;
+pub const SOCK_DGRAM = 2;
+pub const SOCK_RAW = 3;
+pub const SOCK_RDM = 4;
+pub const SOCK_SEQPACKET = 5;
+
+pub const SOCK_CLOEXEC = 0x8000;
+pub const SOCK_NONBLOCK = 0x4000;
+
+pub const SO_DEBUG = 0x0001;
+pub const SO_ACCEPTCONN = 0x0002;
+pub const SO_REUSEADDR = 0x0004;
+pub const SO_KEEPALIVE = 0x0008;
+pub const SO_DONTROUTE = 0x0010;
+pub const SO_BROADCAST = 0x0020;
+pub const SO_USELOOPBACK = 0x0040;
+pub const SO_LINGER = 0x0080;
+pub const SO_OOBINLINE = 0x0100;
+pub const SO_REUSEPORT = 0x0200;
+pub const SO_TIMESTAMP = 0x0800;
+pub const SO_BINDANY = 0x1000;
+pub const SO_ZEROIZE = 0x2000;
+pub const SO_SNDBUF = 0x1001;
+pub const SO_RCVBUF = 0x1002;
+pub const SO_SNDLOWAT = 0x1003;
+pub const SO_RCVLOWAT = 0x1004;
+pub const SO_SNDTIMEO = 0x1005;
+pub const SO_RCVTIMEO = 0x1006;
+pub const SO_ERROR = 0x1007;
+pub const SO_TYPE = 0x1008;
+pub const SO_NETPROC = 0x1020;
+pub const SO_RTABLE = 0x1021;
+pub const SO_PEERCRED = 0x1022;
+pub const SO_SPLICE = 0x1023;
+pub const SO_DOMAIN = 0x1024;
+pub const SO_PROTOCOL = 0x1025;
+
+pub const SOL_SOCKET = 0xffff;
+
+pub const PF_UNSPEC = AF_UNSPEC;
+pub const PF_LOCAL = AF_LOCAL;
+pub const PF_UNIX = AF_UNIX;
+pub const PF_INET = AF_INET;
+pub const PF_APPLETALK = AF_APPLETALK;
+pub const PF_INET6 = AF_INET6;
+pub const PF_DECnet = AF_DECnet;
+pub const PF_KEY = AF_KEY;
+pub const PF_ROUTE = AF_ROUTE;
+pub const PF_SNA = AF_SNA;
+pub const PF_MPLS = AF_MPLS;
+pub const PF_BLUETOOTH = AF_BLUETOOTH;
+pub const PF_ISDN = AF_ISDN;
+pub const PF_MAX = AF_MAX;
+
+pub const AF_UNSPEC = 0;
+pub const AF_UNIX = 1;
+pub const AF_LOCAL = AF_UNIX;
+pub const AF_INET = 2;
+pub const AF_APPLETALK = 16;
+pub const AF_INET6 = 24;
+pub const AF_KEY = 30;
+pub const AF_ROUTE = 17;
+pub const AF_SNA = 11;
+pub const AF_MPLS = 33;
+pub const AF_BLUETOOTH = 32;
+pub const AF_ISDN = 26;
+pub const AF_MAX = 36;
+
+pub const DT_UNKNOWN = 0;
+pub const DT_FIFO = 1;
+pub const DT_CHR = 2;
+pub const DT_DIR = 4;
+pub const DT_BLK = 6;
+pub const DT_REG = 8;
+pub const DT_LNK = 10;
+pub const DT_SOCK = 12;
+pub const DT_WHT = 14; // XXX
+
+pub const EV_ADD = 0x0001;
+pub const EV_DELETE = 0x0002;
+pub const EV_ENABLE = 0x0004;
+pub const EV_DISABLE = 0x0008;
+pub const EV_ONESHOT = 0x0010;
+pub const EV_CLEAR = 0x0020;
+pub const EV_RECEIPT = 0x0040;
+pub const EV_DISPATCH = 0x0080;
+pub const EV_FLAG1 = 0x2000;
+pub const EV_ERROR = 0x4000;
+pub const EV_EOF = 0x8000;
+
+pub const EVFILT_READ = -1;
+pub const EVFILT_WRITE = -2;
+pub const EVFILT_AIO = -3;
+pub const EVFILT_VNODE = -4;
+pub const EVFILT_PROC = -5;
+pub const EVFILT_SIGNAL = -6;
+pub const EVFILT_TIMER = -7;
+pub const EVFILT_EXCEPT = -9;
+
+// data/hint flags for EVFILT_{READ|WRITE}
+pub const NOTE_LOWAT = 0x0001;
+pub const NOTE_EOF = 0x0002;
+
+// data/hint flags for EVFILT_EXCEPT and EVFILT_{READ|WRITE}
+pub const NOTE_OOB = 0x0004;
+
+// data/hint flags for EVFILT_VNODE
+pub const NOTE_DELETE = 0x0001;
+pub const NOTE_WRITE = 0x0002;
+pub const NOTE_EXTEND = 0x0004;
+pub const NOTE_ATTRIB = 0x0008;
+pub const NOTE_LINK = 0x0010;
+pub const NOTE_RENAME = 0x0020;
+pub const NOTE_REVOKE = 0x0040;
+pub const NOTE_TRUNCATE = 0x0080;
+
+// data/hint flags for EVFILT_PROC
+pub const NOTE_EXIT = 0x80000000;
+pub const NOTE_FORK = 0x40000000;
+pub const NOTE_EXEC = 0x20000000;
+pub const NOTE_PDATAMASK = 0x000fffff;
+pub const NOTE_PCTRLMASK = 0xf0000000;
+pub const NOTE_TRACK = 0x00000001;
+pub const NOTE_TRACKERR = 0x00000002;
+pub const NOTE_CHILD = 0x00000004;
+
+// data/hint flags for EVFILT_DEVICE
+pub const NOTE_CHANGE = 0x00000001;
+
+pub const TIOCCBRK = 0x2000747a;
+pub const TIOCCDTR = 0x20007478;
+pub const TIOCCONS = 0x80047462;
+pub const TIOCDCDTIMESTAMP = 0x40107458;
+pub const TIOCDRAIN = 0x2000745e;
+pub const TIOCEXCL = 0x2000740d;
+pub const TIOCEXT = 0x80047460;
+pub const TIOCFLAG_CDTRCTS = 0x10;
+pub const TIOCFLAG_CLOCAL = 0x2;
+pub const TIOCFLAG_CRTSCTS = 0x4;
+pub const TIOCFLAG_MDMBUF = 0x8;
+pub const TIOCFLAG_SOFTCAR = 0x1;
+pub const TIOCFLUSH = 0x80047410;
+pub const TIOCGETA = 0x402c7413;
+pub const TIOCGETD = 0x4004741a;
+pub const TIOCGFLAGS = 0x4004745d;
+pub const TIOCGLINED = 0x40207442;
+pub const TIOCGPGRP = 0x40047477;
+pub const TIOCGQSIZE = 0x40047481;
+pub const TIOCGRANTPT = 0x20007447;
+pub const TIOCGSID = 0x40047463;
+pub const TIOCGSIZE = 0x40087468;
+pub const TIOCGWINSZ = 0x40087468;
+pub const TIOCMBIC = 0x8004746b;
+pub const TIOCMBIS = 0x8004746c;
+pub const TIOCMGET = 0x4004746a;
+pub const TIOCMSET = 0x8004746d;
+pub const TIOCM_CAR = 0x40;
+pub const TIOCM_CD = 0x40;
+pub const TIOCM_CTS = 0x20;
+pub const TIOCM_DSR = 0x100;
+pub const TIOCM_DTR = 0x2;
+pub const TIOCM_LE = 0x1;
+pub const TIOCM_RI = 0x80;
+pub const TIOCM_RNG = 0x80;
+pub const TIOCM_RTS = 0x4;
+pub const TIOCM_SR = 0x10;
+pub const TIOCM_ST = 0x8;
+pub const TIOCNOTTY = 0x20007471;
+pub const TIOCNXCL = 0x2000740e;
+pub const TIOCOUTQ = 0x40047473;
+pub const TIOCPKT = 0x80047470;
+pub const TIOCPKT_DATA = 0x0;
+pub const TIOCPKT_DOSTOP = 0x20;
+pub const TIOCPKT_FLUSHREAD = 0x1;
+pub const TIOCPKT_FLUSHWRITE = 0x2;
+pub const TIOCPKT_IOCTL = 0x40;
+pub const TIOCPKT_NOSTOP = 0x10;
+pub const TIOCPKT_START = 0x8;
+pub const TIOCPKT_STOP = 0x4;
+pub const TIOCPTMGET = 0x40287446;
+pub const TIOCPTSNAME = 0x40287448;
+pub const TIOCRCVFRAME = 0x80087445;
+pub const TIOCREMOTE = 0x80047469;
+pub const TIOCSBRK = 0x2000747b;
+pub const TIOCSCTTY = 0x20007461;
+pub const TIOCSDTR = 0x20007479;
+pub const TIOCSETA = 0x802c7414;
+pub const TIOCSETAF = 0x802c7416;
+pub const TIOCSETAW = 0x802c7415;
+pub const TIOCSETD = 0x8004741b;
+pub const TIOCSFLAGS = 0x8004745c;
+pub const TIOCSIG = 0x2000745f;
+pub const TIOCSLINED = 0x80207443;
+pub const TIOCSPGRP = 0x80047476;
+pub const TIOCSQSIZE = 0x80047480;
+pub const TIOCSSIZE = 0x80087467;
+pub const TIOCSTART = 0x2000746e;
+pub const TIOCSTAT = 0x80047465;
+pub const TIOCSTI = 0x80017472;
+pub const TIOCSTOP = 0x2000746f;
+pub const TIOCSWINSZ = 0x80087467;
+pub const TIOCUCNTL = 0x80047466;
+pub const TIOCXMTFRAME = 0x80087444;
+
+pub fn WEXITSTATUS(s: u32) u8 {
+ return @intCast(u8, (s >> 8) & 0xff);
+}
+pub fn WTERMSIG(s: u32) u32 {
+ return (s & 0x7f);
+}
+pub fn WSTOPSIG(s: u32) u32 {
+ return WEXITSTATUS(s);
+}
+pub fn WIFEXITED(s: u32) bool {
+ return WTERMSIG(s) == 0;
+}
+
+pub fn WIFCONTINUED(s: u32) bool {
+ return ((s & 0o177777) == 0o177777);
+}
+
+pub fn WIFSTOPPED(s: u32) bool {
+ return (s & 0xff == 0o177);
+}
+
+pub fn WIFSIGNALED(s: u32) bool {
+ return (((s) & 0o177) != 0o177) and (((s) & 0o177) != 0);
+}
+
+pub const winsize = extern struct {
+ ws_row: c_ushort,
+ ws_col: c_ushort,
+ ws_xpixel: c_ushort,
+ ws_ypixel: c_ushort,
+};
+
+const NSIG = 33;
+
+pub const SIG_DFL = @intToPtr(?Sigaction.sigaction_fn, 0);
+pub const SIG_IGN = @intToPtr(?Sigaction.sigaction_fn, 1);
+pub const SIG_ERR = @intToPtr(?Sigaction.sigaction_fn, maxInt(usize));
+pub const SIG_CATCH = @intToPtr(?Sigaction.sigaction_fn, 2);
+pub const SIG_HOLD = @intToPtr(?Sigaction.sigaction_fn, 3);
+
+/// Renamed from `sigaction` to `Sigaction` to avoid conflict with the syscall.
+pub const Sigaction = extern struct {
+ pub const handler_fn = fn (c_int) callconv(.C) void;
+ pub const sigaction_fn = fn (c_int, *const siginfo_t, ?*const c_void) callconv(.C) void;
+
+ /// signal handler
+ handler: extern union {
+ handler: ?handler_fn,
+ sigaction: ?sigaction_fn,
+ },
+ /// signal mask to apply
+ mask: sigset_t,
+ /// signal options
+ flags: c_uint,
+};
+
+pub const sigval = extern union {
+ int: c_int,
+ ptr: ?*c_void,
+};
+
+pub const siginfo_t = 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: ?*c_void,
+ trapno: c_int,
+ },
+ __pad: [128 - 3 * @sizeOf(c_int)]u8,
+ },
+};
+
+comptime {
+ if (@sizeOf(usize) == 4)
+ std.debug.assert(@sizeOf(siginfo_t) == 128)
+ else
+ // Take into account the padding between errno and data fields.
+ std.debug.assert(@sizeOf(siginfo_t) == 136);
+}
+
+pub usingnamespace switch (builtin.cpu.arch) {
+ .x86_64 => struct {
+ pub const ucontext_t = extern struct {
+ sc_rdi: c_long,
+ sc_rsi: c_long,
+ sc_rdx: c_long,
+ sc_rcx: c_long,
+ sc_r8: c_long,
+ sc_r9: c_long,
+ sc_r10: c_long,
+ sc_r11: c_long,
+ sc_r12: c_long,
+ sc_r13: c_long,
+ sc_r14: c_long,
+ sc_r15: c_long,
+ sc_rbp: c_long,
+ sc_rbx: c_long,
+ sc_rax: c_long,
+ sc_gs: c_long,
+ sc_fs: c_long,
+ sc_es: c_long,
+ sc_ds: c_long,
+ sc_trapno: c_long,
+ sc_err: c_long,
+ sc_rip: c_long,
+ sc_cs: c_long,
+ sc_rflags: c_long,
+ sc_rsp: c_long,
+ sc_ss: c_long,
+
+ sc_fpstate: fxsave64,
+ __sc_unused: c_int,
+ sc_mask: c_int,
+ sc_cookie: c_long,
+ };
+
+ pub const fxsave64 = packed struct {
+ fx_fcw: u16,
+ fx_fsw: u16,
+ fx_ftw: u8,
+ fx_unused1: u8,
+ fx_fop: u16,
+ fx_rip: u64,
+ fx_rdp: u64,
+ fx_mxcsr: u32,
+ fx_mxcsr_mask: u32,
+ fx_st: [8][2]u64,
+ fx_xmm: [16][2]u64,
+ fx_unused3: [96]u8,
+ };
+ },
+ else => struct {},
+};
+
+pub const sigset_t = c_uint;
+pub const empty_sigset: sigset_t = 0;
+
+pub const E = enum(u16) {
+ /// No error occurred.
+ SUCCESS = 0,
+ PERM = 1, // Operation not permitted
+ NOENT = 2, // No such file or directory
+ SRCH = 3, // No such process
+ INTR = 4, // Interrupted system call
+ IO = 5, // Input/output error
+ NXIO = 6, // Device not configured
+ @"2BIG" = 7, // Argument list too long
+ NOEXEC = 8, // Exec format error
+ BADF = 9, // Bad file descriptor
+ CHILD = 10, // No child processes
+ DEADLK = 11, // Resource deadlock avoided
+ // 11 was AGAIN
+ NOMEM = 12, // Cannot allocate memory
+ ACCES = 13, // Permission denied
+ FAULT = 14, // Bad address
+ NOTBLK = 15, // Block device required
+ BUSY = 16, // Device busy
+ EXIST = 17, // File exists
+ XDEV = 18, // Cross-device link
+ NODEV = 19, // Operation not supported by device
+ NOTDIR = 20, // Not a directory
+ ISDIR = 21, // Is a directory
+ INVAL = 22, // Invalid argument
+ NFILE = 23, // Too many open files in system
+ MFILE = 24, // Too many open files
+ NOTTY = 25, // Inappropriate ioctl for device
+ TXTBSY = 26, // Text file busy
+ FBIG = 27, // File too large
+ NOSPC = 28, // No space left on device
+ SPIPE = 29, // Illegal seek
+ ROFS = 30, // Read-only file system
+ MLINK = 31, // Too many links
+ PIPE = 32, // Broken pipe
+
+ // math software
+ DOM = 33, // Numerical argument out of domain
+ RANGE = 34, // Result too large or too small
+
+ // non-blocking and interrupt i/o
+ // also: WOULDBLOCK: operation would block
+ AGAIN = 35, // Resource temporarily unavailable
+ INPROGRESS = 36, // Operation now in progress
+ ALREADY = 37, // Operation already in progress
+
+ // ipc/network software -- argument errors
+ NOTSOCK = 38, // Socket operation on non-socket
+ DESTADDRREQ = 39, // Destination address required
+ MSGSIZE = 40, // Message too long
+ PROTOTYPE = 41, // Protocol wrong type for socket
+ NOPROTOOPT = 42, // Protocol option not available
+ PROTONOSUPPORT = 43, // Protocol not supported
+ SOCKTNOSUPPORT = 44, // Socket type not supported
+ OPNOTSUPP = 45, // Operation not supported
+ PFNOSUPPORT = 46, // Protocol family not supported
+ AFNOSUPPORT = 47, // Address family not supported by protocol family
+ ADDRINUSE = 48, // Address already in use
+ ADDRNOTAVAIL = 49, // Can't assign requested address
+
+ // ipc/network software -- operational errors
+ NETDOWN = 50, // Network is down
+ NETUNREACH = 51, // Network is unreachable
+ NETRESET = 52, // Network dropped connection on reset
+ CONNABORTED = 53, // Software caused connection abort
+ CONNRESET = 54, // Connection reset by peer
+ NOBUFS = 55, // No buffer space available
+ ISCONN = 56, // Socket is already connected
+ NOTCONN = 57, // Socket is not connected
+ SHUTDOWN = 58, // Can't send after socket shutdown
+ TOOMANYREFS = 59, // Too many references: can't splice
+ TIMEDOUT = 60, // Operation timed out
+ CONNREFUSED = 61, // Connection refused
+
+ LOOP = 62, // Too many levels of symbolic links
+ NAMETOOLONG = 63, // File name too long
+
+ // should be rearranged
+ HOSTDOWN = 64, // Host is down
+ HOSTUNREACH = 65, // No route to host
+ NOTEMPTY = 66, // Directory not empty
+
+ // quotas & mush
+ PROCLIM = 67, // Too many processes
+ USERS = 68, // Too many users
+ DQUOT = 69, // Disc quota exceeded
+
+ // Network File System
+ STALE = 70, // Stale NFS file handle
+ REMOTE = 71, // Too many levels of remote in path
+ BADRPC = 72, // RPC struct is bad
+ RPCMISMATCH = 73, // RPC version wrong
+ PROGUNAVAIL = 74, // RPC prog. not avail
+ PROGMISMATCH = 75, // Program version wrong
+ PROCUNAVAIL = 76, // Bad procedure for program
+
+ NOLCK = 77, // No locks available
+ NOSYS = 78, // Function not implemented
+
+ FTYPE = 79, // Inappropriate file type or format
+ AUTH = 80, // Authentication error
+ NEEDAUTH = 81, // Need authenticator
+ IPSEC = 82, // IPsec processing failure
+ NOATTR = 83, // Attribute not found
+
+ // Wide/multibyte-character handling, ISO/IEC 9899/AMD1:1995
+ ILSEQ = 84, // Illegal byte sequence
+
+ NOMEDIUM = 85, // No medium found
+ MEDIUMTYPE = 86, // Wrong medium type
+ OVERFLOW = 87, // Value too large to be stored in data type
+ CANCELED = 88, // Operation canceled
+ IDRM = 89, // Identifier removed
+ NOMSG = 90, // No message of desired type
+ NOTSUP = 91, // Not supported
+ BADMSG = 92, // Bad or Corrupt message
+ NOTRECOVERABLE = 93, // State not recoverable
+ OWNERDEAD = 94, // Previous owner died
+ PROTO = 95, // Protocol error
+
+ _,
+};
+
+const _MAX_PAGE_SHIFT = switch (builtin.cpu.arch) {
+ .i386 => 12,
+ .sparcv9 => 13,
+};
+pub const MINSIGSTKSZ = 1 << _MAX_PAGE_SHIFT;
+pub const SIGSTKSZ = MINSIGSTKSZ + (1 << _MAX_PAGE_SHIFT) * 4;
+
+pub const SS_ONSTACK = 0x0001;
+pub const SS_DISABLE = 0x0004;
+
+pub const stack_t = extern struct {
+ ss_sp: [*]u8,
+ ss_size: usize,
+ ss_flags: c_int,
+};
+
+pub const S_IFMT = 0o170000;
+
+pub const S_IFIFO = 0o010000;
+pub const S_IFCHR = 0o020000;
+pub const S_IFDIR = 0o040000;
+pub const S_IFBLK = 0o060000;
+pub const S_IFREG = 0o100000;
+pub const S_IFLNK = 0o120000;
+pub const S_IFSOCK = 0o140000;
+
+pub const S_ISUID = 0o4000;
+pub const S_ISGID = 0o2000;
+pub const S_ISVTX = 0o1000;
+pub const S_IRWXU = 0o700;
+pub const S_IRUSR = 0o400;
+pub const S_IWUSR = 0o200;
+pub const S_IXUSR = 0o100;
+pub const S_IRWXG = 0o070;
+pub const S_IRGRP = 0o040;
+pub const S_IWGRP = 0o020;
+pub const S_IXGRP = 0o010;
+pub const S_IRWXO = 0o007;
+pub const S_IROTH = 0o004;
+pub const S_IWOTH = 0o002;
+pub const S_IXOTH = 0o001;
+
+pub fn S_ISFIFO(m: u32) bool {
+ return m & S_IFMT == S_IFIFO;
+}
+
+pub fn S_ISCHR(m: u32) bool {
+ return m & S_IFMT == S_IFCHR;
+}
+
+pub fn S_ISDIR(m: u32) bool {
+ return m & S_IFMT == S_IFDIR;
+}
+
+pub fn S_ISBLK(m: u32) bool {
+ return m & S_IFMT == S_IFBLK;
+}
+
+pub fn S_ISREG(m: u32) bool {
+ return m & S_IFMT == S_IFREG;
+}
+
+pub fn S_ISLNK(m: u32) bool {
+ return m & S_IFMT == S_IFLNK;
+}
+
+pub fn S_ISSOCK(m: u32) bool {
+ return m & S_IFMT == S_IFSOCK;
+}
+
+/// 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 AT_FDCWD = -100;
+
+/// Check access using effective user and group ID
+pub const AT_EACCESS = 0x01;
+
+/// Do not follow symbolic links
+pub const AT_SYMLINK_NOFOLLOW = 0x02;
+
+/// Follow symbolic link
+pub const AT_SYMLINK_FOLLOW = 0x04;
+
+/// Remove directory instead of file
+pub const AT_REMOVEDIR = 0x08;
+
+pub const HOST_NAME_MAX = 255;
+
+/// dummy for IP
+pub const IPPROTO_IP = 0;
+
+/// IP6 hop-by-hop options
+pub const IPPROTO_HOPOPTS = IPPROTO_IP;
+
+/// control message protocol
+pub const IPPROTO_ICMP = 1;
+
+/// group mgmt protocol
+pub const IPPROTO_IGMP = 2;
+
+/// gateway^2 (deprecated)
+pub const IPPROTO_GGP = 3;
+
+/// IP header
+pub const IPPROTO_IPV4 = IPPROTO_IPIP;
+
+/// IP inside IP
+pub const IPPROTO_IPIP = 4;
+
+/// tcp
+pub const IPPROTO_TCP = 6;
+
+/// exterior gateway protocol
+pub const IPPROTO_EGP = 8;
+
+/// pup
+pub const IPPROTO_PUP = 12;
+
+/// user datagram protocol
+pub const IPPROTO_UDP = 17;
+
+/// xns idp
+pub const IPPROTO_IDP = 22;
+
+/// tp-4 w/ class negotiation
+pub const IPPROTO_TP = 29;
+
+/// IP6 header
+pub const IPPROTO_IPV6 = 41;
+
+/// IP6 routing header
+pub const IPPROTO_ROUTING = 43;
+
+/// IP6 fragmentation header
+pub const IPPROTO_FRAGMENT = 44;
+
+/// resource reservation
+pub const IPPROTO_RSVP = 46;
+
+/// GRE encaps RFC 1701
+pub const IPPROTO_GRE = 47;
+
+/// encap. security payload
+pub const IPPROTO_ESP = 50;
+
+/// authentication header
+pub const IPPROTO_AH = 51;
+
+/// IP Mobility RFC 2004
+pub const IPPROTO_MOBILE = 55;
+
+/// IPv6 ICMP
+pub const IPPROTO_IPV6_ICMP = 58;
+
+/// ICMP6
+pub const IPPROTO_ICMPV6 = 58;
+
+/// IP6 no next header
+pub const IPPROTO_NONE = 59;
+
+/// IP6 destination option
+pub const IPPROTO_DSTOPTS = 60;
+
+/// ISO cnlp
+pub const IPPROTO_EON = 80;
+
+/// Ethernet-in-IP
+pub const IPPROTO_ETHERIP = 97;
+
+/// encapsulation header
+pub const IPPROTO_ENCAP = 98;
+
+/// Protocol indep. multicast
+pub const IPPROTO_PIM = 103;
+
+/// IP Payload Comp. Protocol
+pub const IPPROTO_IPCOMP = 108;
+
+/// VRRP RFC 2338
+pub const IPPROTO_VRRP = 112;
+
+/// Common Address Resolution Protocol
+pub const IPPROTO_CARP = 112;
+
+/// PFSYNC
+pub const IPPROTO_PFSYNC = 240;
+
+/// raw IP packet
+pub const IPPROTO_RAW = 255;
+
+pub const rlimit_resource = enum(c_int) {
+ CPU,
+ FSIZE,
+ DATA,
+ STACK,
+ CORE,
+ RSS,
+ MEMLOCK,
+ NPROC,
+ NOFILE,
+
+ _,
+};
+
+pub const rlim_t = u64;
+
+/// No limit
+pub const RLIM_INFINITY: rlim_t = (1 << 63) - 1;
+
+pub const RLIM_SAVED_MAX = RLIM_INFINITY;
+pub const RLIM_SAVED_CUR = RLIM_INFINITY;
+
+pub const rlimit = extern struct {
+ /// Soft limit
+ cur: rlim_t,
+ /// Hard limit
+ max: rlim_t,
+};
+
+pub const SHUT_RD = 0;
+pub const SHUT_WR = 1;
+pub const SHUT_RDWR = 2;
+
+pub const nfds_t = c_uint;
+
+pub const pollfd = extern struct {
+ fd: fd_t,
+ events: c_short,
+ revents: c_short,
+};
+
+pub const POLLIN = 0x0001;
+pub const POLLPRI = 0x0002;
+pub const POLLOUT = 0x0004;
+pub const POLLERR = 0x0008;
+pub const POLLHUP = 0x0010;
+pub const POLLNVAL = 0x0020;
+pub const POLLRDNORM = 0x0040;
+pub const POLLNORM = POLLRDNORM;
+pub const POLLWRNORM = POLLOUT;
+pub const POLLRDBAND = 0x0080;
+pub const POLLWRBAND = 0x0100;
+
+// sysctl mib
+pub const CTL_UNSPEC = 0;
+pub const CTL_KERN = 1;
+pub const CTL_VM = 2;
+pub const CTL_FS = 3;
+pub const CTL_NET = 4;
+pub const CTL_DEBUG = 5;
+pub const CTL_HW = 6;
+pub const CTL_MACHDEP = 7;
+
+pub const CTL_DDB = 9;
+pub const CTL_VFS = 10;
+
+pub const KERN_OSTYPE = 1;
+pub const KERN_OSRELEASE = 2;
+pub const KERN_OSREV = 3;
+pub const KERN_VERSION = 4;
+pub const KERN_MAXVNODES = 5;
+pub const KERN_MAXPROC = 6;
+pub const KERN_MAXFILES = 7;
+pub const KERN_ARGMAX = 8;
+pub const KERN_SECURELVL = 9;
+pub const KERN_HOSTNAME = 10;
+pub const KERN_HOSTID = 11;
+pub const KERN_CLOCKRATE = 12;
+
+pub const KERN_PROF = 16;
+pub const KERN_POSIX1 = 17;
+pub const KERN_NGROUPS = 18;
+pub const KERN_JOB_CONTROL = 19;
+pub const KERN_SAVED_IDS = 20;
+pub const KERN_BOOTTIME = 21;
+pub const KERN_DOMAINNAME = 22;
+pub const KERN_MAXPARTITIONS = 23;
+pub const KERN_RAWPARTITION = 24;
+pub const KERN_MAXTHREAD = 25;
+pub const KERN_NTHREADS = 26;
+pub const KERN_OSVERSION = 27;
+pub const KERN_SOMAXCONN = 28;
+pub const KERN_SOMINCONN = 29;
+
+pub const KERN_NOSUIDCOREDUMP = 32;
+pub const KERN_FSYNC = 33;
+pub const KERN_SYSVMSG = 34;
+pub const KERN_SYSVSEM = 35;
+pub const KERN_SYSVSHM = 36;
+
+pub const KERN_MSGBUFSIZE = 38;
+pub const KERN_MALLOCSTATS = 39;
+pub const KERN_CPTIME = 40;
+pub const KERN_NCHSTATS = 41;
+pub const KERN_FORKSTAT = 42;
+pub const KERN_NSELCOLL = 43;
+pub const KERN_TTY = 44;
+pub const KERN_CCPU = 45;
+pub const KERN_FSCALE = 46;
+pub const KERN_NPROCS = 47;
+pub const KERN_MSGBUF = 48;
+pub const KERN_POOL = 49;
+pub const KERN_STACKGAPRANDOM = 50;
+pub const KERN_SYSVIPC_INFO = 51;
+pub const KERN_ALLOWKMEM = 52;
+pub const KERN_WITNESSWATCH = 53;
+pub const KERN_SPLASSERT = 54;
+pub const KERN_PROC_ARGS = 55;
+pub const KERN_NFILES = 56;
+pub const KERN_TTYCOUNT = 57;
+pub const KERN_NUMVNODES = 58;
+pub const KERN_MBSTAT = 59;
+pub const KERN_WITNESS = 60;
+pub const KERN_SEMINFO = 61;
+pub const KERN_SHMINFO = 62;
+pub const KERN_INTRCNT = 63;
+pub const KERN_WATCHDOG = 64;
+pub const KERN_ALLOWDT = 65;
+pub const KERN_PROC = 66;
+pub const KERN_MAXCLUSTERS = 67;
+pub const KERN_EVCOUNT = 68;
+pub const KERN_TIMECOUNTER = 69;
+pub const KERN_MAXLOCKSPERUID = 70;
+pub const KERN_CPTIME2 = 71;
+pub const KERN_CACHEPCT = 72;
+pub const KERN_FILE = 73;
+pub const KERN_WXABORT = 74;
+pub const KERN_CONSDEV = 75;
+pub const KERN_NETLIVELOCKS = 76;
+pub const KERN_POOL_DEBUG = 77;
+pub const KERN_PROC_CWD = 78;
+pub const KERN_PROC_NOBROADCASTKILL = 79;
+pub const KERN_PROC_VMMAP = 80;
+pub const KERN_GLOBAL_PTRACE = 81;
+pub const KERN_CONSBUFSIZE = 82;
+pub const KERN_CONSBUF = 83;
+pub const KERN_AUDIO = 84;
+pub const KERN_CPUSTATS = 85;
+pub const KERN_PFSTATUS = 86;
+pub const KERN_TIMEOUT_STATS = 87;
+pub const KERN_UTC_OFFSET = 88;
+pub const KERN_VIDEO = 89;
+
+pub const HW_MACHINE = 1;
+pub const HW_MODEL = 2;
+pub const HW_NCPU = 3;
+pub const HW_BYTEORDER = 4;
+pub const HW_PHYSMEM = 5;
+pub const HW_USERMEM = 6;
+pub const HW_PAGESIZE = 7;
+pub const HW_DISKNAMES = 8;
+pub const HW_DISKSTATS = 9;
+pub const HW_DISKCOUNT = 10;
+pub const HW_SENSORS = 11;
+pub const HW_CPUSPEED = 12;
+pub const HW_SETPERF = 13;
+pub const HW_VENDOR = 14;
+pub const HW_PRODUCT = 15;
+pub const HW_VERSION = 16;
+pub const HW_SERIALNO = 17;
+pub const HW_UUID = 18;
+pub const HW_PHYSMEM64 = 19;
+pub const HW_USERMEM64 = 20;
+pub const HW_NCPUFOUND = 21;
+pub const HW_ALLOWPOWERDOWN = 22;
+pub const HW_PERFPOLICY = 23;
+pub const HW_SMT = 24;
+pub const HW_NCPUONLINE = 25;
+
+pub const KERN_PROC_ALL = 0;
+pub const KERN_PROC_PID = 1;
+pub const KERN_PROC_PGRP = 2;
+pub const KERN_PROC_SESSION = 3;
+pub const KERN_PROC_TTY = 4;
+pub const KERN_PROC_UID = 5;
+pub const KERN_PROC_RUID = 6;
+pub const KERN_PROC_KTHREAD = 7;
+pub const KERN_PROC_SHOW_THREADS = 0x40000000;
+
+pub const KERN_PROC_ARGV = 1;
+pub const KERN_PROC_NARGV = 2;
+pub const KERN_PROC_ENV = 3;
+pub const KERN_PROC_NENV = 4;
diff --git a/lib/std/c/wasi.zig b/lib/std/c/wasi.zig
index 350231da2e..686965d42a 100644
--- a/lib/std/c/wasi.zig
+++ b/lib/std/c/wasi.zig
@@ -4,12 +4,13 @@ pub fn _errno() *c_int {
return &errno;
}
+pub const fd_t = c_int;
pub const pid_t = c_int;
pub const uid_t = u32;
pub const gid_t = u32;
pub const off_t = i64;
-pub const libc_stat = extern struct {
+pub const Stat = extern struct {
dev: i32,
ino: ino_t,
nlink: u64,
@@ -51,3 +52,27 @@ pub const libc_stat = extern struct {
};
}
};
+
+/// Derived from
+/// https://github.com/WebAssembly/wasi-libc/blob/main/expected/wasm32-wasi/predefined-macros.txt
+pub const O = struct {
+ pub const ACCMODE = (EXEC | RDWR | SEARCH);
+ pub const APPEND = FDFLAG_APPEND;
+ pub const CLOEXEC = (0);
+ pub const CREAT = ((1 << 0) << 12); // = __WASI_OFLAGS_CREAT << 12
+ pub const DIRECTORY = ((1 << 1) << 12); // = __WASI_OFLAGS_DIRECTORY << 12
+ pub const DSYNC = FDFLAG_DSYNC;
+ pub const EXCL = ((1 << 2) << 12); // = __WASI_OFLAGS_EXCL << 12
+ pub const EXEC = (0x02000000);
+ pub const NOCTTY = (0);
+ pub const NOFOLLOW = (0x01000000);
+ pub const NONBLOCK = (1 << FDFLAG_NONBLOCK);
+ pub const RDONLY = (0x04000000);
+ pub const RDWR = (RDONLY | WRONLY);
+ pub const RSYNC = (1 << FDFLAG_RSYNC);
+ pub const SEARCH = (0x08000000);
+ pub const SYNC = (1 << FDFLAG_SYNC);
+ pub const TRUNC = ((1 << 3) << 12); // = __WASI_OFLAGS_TRUNC << 12
+ pub const TTY_INIT = (0);
+ pub const WRONLY = (0x10000000);
+};
diff --git a/lib/std/c/windows.zig b/lib/std/c/windows.zig
index a10715f083..449508fd05 100644
--- a/lib/std/c/windows.zig
+++ b/lib/std/c/windows.zig
@@ -1,3 +1,343 @@
+//! The reference for these types and values is Microsoft Windows's ucrt (Universal C RunTime).
+
+const ws2_32 = @import("../os/windows/ws2_32.zig");
+
pub extern "c" fn _errno() *c_int;
pub extern "c" fn _msize(memblock: ?*c_void) usize;
+
+// TODO: copied the else case and removed the socket function (because its in ws2_32)
+// need to verify which of these is actually supported on windows
+pub extern "c" fn clock_getres(clk_id: c_int, tp: *timespec) c_int;
+pub extern "c" fn clock_gettime(clk_id: c_int, tp: *timespec) c_int;
+pub extern "c" fn fstat(fd: fd_t, buf: *Stat) c_int;
+pub extern "c" fn getrusage(who: c_int, usage: *rusage) c_int;
+pub extern "c" fn gettimeofday(noalias tv: ?*timeval, noalias tz: ?*timezone) c_int;
+pub extern "c" fn nanosleep(rqtp: *const timespec, rmtp: ?*timespec) c_int;
+pub extern "c" fn sched_yield() c_int;
+pub extern "c" fn sigaction(sig: c_int, noalias act: ?*const Sigaction, noalias oact: ?*Sigaction) c_int;
+pub extern "c" fn sigprocmask(how: c_int, noalias set: ?*const sigset_t, noalias oset: ?*sigset_t) c_int;
+pub extern "c" fn stat(noalias path: [*:0]const u8, noalias buf: *Stat) c_int;
+pub extern "c" fn sigfillset(set: ?*sigset_t) void;
+pub extern "c" fn alarm(seconds: c_uint) c_uint;
+pub extern "c" fn sigwait(set: ?*sigset_t, sig: ?*c_int) c_int;
+
+pub const fd_t = HANDLE;
+pub const ino_t = LARGE_INTEGER;
+pub const pid_t = HANDLE;
+pub const mode_t = u0;
+
+pub const PATH_MAX = 260;
+
+pub const time_t = c_longlong;
+
+pub const timespec = extern struct {
+ tv_sec: time_t,
+ tv_nsec: c_long,
+};
+
+pub const timeval = extern struct {
+ tv_sec: c_long,
+ tv_usec: c_long,
+};
+
+pub const sig_atomic_t = c_int;
+
+/// maximum signal number + 1
+pub const NSIG = 23;
+
+// Signal types
+
+/// interrupt
+pub const SIGINT = 2;
+
+/// illegal instruction - invalid function image
+pub const SIGILL = 4;
+
+/// floating point exception
+pub const SIGFPE = 8;
+
+/// segment violation
+pub const SIGSEGV = 11;
+
+/// Software termination signal from kill
+pub const SIGTERM = 15;
+
+/// Ctrl-Break sequence
+pub const SIGBREAK = 21;
+
+/// abnormal termination triggered by abort call
+pub const SIGABRT = 22;
+
+/// SIGABRT compatible with other platforms, same as SIGABRT
+pub const SIGABRT_COMPAT = 6;
+
+// Signal action codes
+
+/// default signal action
+pub const SIG_DFL = 0;
+
+/// ignore signal
+pub const SIG_IGN = 1;
+
+/// return current value
+pub const SIG_GET = 2;
+
+/// signal gets error
+pub const SIG_SGE = 3;
+
+/// acknowledge
+pub const SIG_ACK = 4;
+
+/// Signal error value (returned by signal call on error)
+pub const SIG_ERR = -1;
+
+pub const SEEK_SET = 0;
+pub const SEEK_CUR = 1;
+pub const SEEK_END = 2;
+
+pub const E = enum(u16) {
+ /// No error occurred.
+ SUCCESS = 0,
+ PERM = 1,
+ NOENT = 2,
+ SRCH = 3,
+ INTR = 4,
+ IO = 5,
+ NXIO = 6,
+ @"2BIG" = 7,
+ NOEXEC = 8,
+ BADF = 9,
+ CHILD = 10,
+ AGAIN = 11,
+ NOMEM = 12,
+ ACCES = 13,
+ FAULT = 14,
+ BUSY = 16,
+ EXIST = 17,
+ XDEV = 18,
+ NODEV = 19,
+ NOTDIR = 20,
+ ISDIR = 21,
+ NFILE = 23,
+ MFILE = 24,
+ NOTTY = 25,
+ FBIG = 27,
+ NOSPC = 28,
+ SPIPE = 29,
+ ROFS = 30,
+ MLINK = 31,
+ PIPE = 32,
+ DOM = 33,
+ /// Also means `DEADLOCK`.
+ DEADLK = 36,
+ NAMETOOLONG = 38,
+ NOLCK = 39,
+ NOSYS = 40,
+ NOTEMPTY = 41,
+
+ INVAL = 22,
+ RANGE = 34,
+ ILSEQ = 42,
+
+ // POSIX Supplement
+ ADDRINUSE = 100,
+ ADDRNOTAVAIL = 101,
+ AFNOSUPPORT = 102,
+ ALREADY = 103,
+ BADMSG = 104,
+ CANCELED = 105,
+ CONNABORTED = 106,
+ CONNREFUSED = 107,
+ CONNRESET = 108,
+ DESTADDRREQ = 109,
+ HOSTUNREACH = 110,
+ IDRM = 111,
+ INPROGRESS = 112,
+ ISCONN = 113,
+ LOOP = 114,
+ MSGSIZE = 115,
+ NETDOWN = 116,
+ NETRESET = 117,
+ NETUNREACH = 118,
+ NOBUFS = 119,
+ NODATA = 120,
+ NOLINK = 121,
+ NOMSG = 122,
+ NOPROTOOPT = 123,
+ NOSR = 124,
+ NOSTR = 125,
+ NOTCONN = 126,
+ NOTRECOVERABLE = 127,
+ NOTSOCK = 128,
+ NOTSUP = 129,
+ OPNOTSUPP = 130,
+ OTHER = 131,
+ OVERFLOW = 132,
+ OWNERDEAD = 133,
+ PROTO = 134,
+ PROTONOSUPPORT = 135,
+ PROTOTYPE = 136,
+ TIME = 137,
+ TIMEDOUT = 138,
+ TXTBSY = 139,
+ WOULDBLOCK = 140,
+ DQUOT = 10069,
+ _,
+};
+
+pub const STRUNCATE = 80;
+
+pub const F_OK = 0;
+
+/// Remove directory instead of unlinking file
+pub const AT_REMOVEDIR = 0x200;
+
+pub const in_port_t = u16;
+pub const sa_family_t = ws2_32.ADDRESS_FAMILY;
+pub const socklen_t = ws2_32.socklen_t;
+
+pub const sockaddr = ws2_32.sockaddr;
+pub const sockaddr_in = ws2_32.sockaddr_in;
+pub const sockaddr_in6 = ws2_32.sockaddr_in6;
+pub const sockaddr_un = ws2_32.sockaddr_un;
+
+pub const in6_addr = [16]u8;
+pub const in_addr = u32;
+
+pub const addrinfo = ws2_32.addrinfo;
+
+pub const AF_UNSPEC = ws2_32.AF_UNSPEC;
+pub const AF_UNIX = ws2_32.AF_UNIX;
+pub const AF_INET = ws2_32.AF_INET;
+pub const AF_IMPLINK = ws2_32.AF_IMPLINK;
+pub const AF_PUP = ws2_32.AF_PUP;
+pub const AF_CHAOS = ws2_32.AF_CHAOS;
+pub const AF_NS = ws2_32.AF_NS;
+pub const AF_IPX = ws2_32.AF_IPX;
+pub const AF_ISO = ws2_32.AF_ISO;
+pub const AF_OSI = ws2_32.AF_OSI;
+pub const AF_ECMA = ws2_32.AF_ECMA;
+pub const AF_DATAKIT = ws2_32.AF_DATAKIT;
+pub const AF_CCITT = ws2_32.AF_CCITT;
+pub const AF_SNA = ws2_32.AF_SNA;
+pub const AF_DECnet = ws2_32.AF_DECnet;
+pub const AF_DLI = ws2_32.AF_DLI;
+pub const AF_LAT = ws2_32.AF_LAT;
+pub const AF_HYLINK = ws2_32.AF_HYLINK;
+pub const AF_APPLETALK = ws2_32.AF_APPLETALK;
+pub const AF_NETBIOS = ws2_32.AF_NETBIOS;
+pub const AF_VOICEVIEW = ws2_32.AF_VOICEVIEW;
+pub const AF_FIREFOX = ws2_32.AF_FIREFOX;
+pub const AF_UNKNOWN1 = ws2_32.AF_UNKNOWN1;
+pub const AF_BAN = ws2_32.AF_BAN;
+pub const AF_ATM = ws2_32.AF_ATM;
+pub const AF_INET6 = ws2_32.AF_INET6;
+pub const AF_CLUSTER = ws2_32.AF_CLUSTER;
+pub const AF_12844 = ws2_32.AF_12844;
+pub const AF_IRDA = ws2_32.AF_IRDA;
+pub const AF_NETDES = ws2_32.AF_NETDES;
+pub const AF_TCNPROCESS = ws2_32.AF_TCNPROCESS;
+pub const AF_TCNMESSAGE = ws2_32.AF_TCNMESSAGE;
+pub const AF_ICLFXBM = ws2_32.AF_ICLFXBM;
+pub const AF_BTH = ws2_32.AF_BTH;
+pub const AF_MAX = ws2_32.AF_MAX;
+
+pub const SOCK_STREAM = ws2_32.SOCK_STREAM;
+pub const SOCK_DGRAM = ws2_32.SOCK_DGRAM;
+pub const SOCK_RAW = ws2_32.SOCK_RAW;
+pub const SOCK_RDM = ws2_32.SOCK_RDM;
+pub const SOCK_SEQPACKET = ws2_32.SOCK_SEQPACKET;
+
+/// WARNING: this flag is not supported by windows socket functions directly,
+/// it is only supported by std.os.socket. Be sure that this value does
+/// not share any bits with any of the SOCK_* values.
+pub const SOCK_CLOEXEC = 0x10000;
+/// WARNING: this flag is not supported by windows socket functions directly,
+/// it is only supported by std.os.socket. Be sure that this value does
+/// not share any bits with any of the SOCK_* values.
+pub const SOCK_NONBLOCK = 0x20000;
+
+pub const IPPROTO_ICMP = ws2_32.IPPROTO_ICMP;
+pub const IPPROTO_IGMP = ws2_32.IPPROTO_IGMP;
+pub const BTHPROTO_RFCOMM = ws2_32.BTHPROTO_RFCOMM;
+pub const IPPROTO_TCP = ws2_32.IPPROTO_TCP;
+pub const IPPROTO_UDP = ws2_32.IPPROTO_UDP;
+pub const IPPROTO_ICMPV6 = ws2_32.IPPROTO_ICMPV6;
+pub const IPPROTO_RM = ws2_32.IPPROTO_RM;
+
+pub const nfds_t = c_ulong;
+pub const pollfd = ws2_32.pollfd;
+
+pub const POLLRDNORM = ws2_32.POLLRDNORM;
+pub const POLLRDBAND = ws2_32.POLLRDBAND;
+pub const POLLIN = ws2_32.POLLIN;
+pub const POLLPRI = ws2_32.POLLPRI;
+pub const POLLWRNORM = ws2_32.POLLWRNORM;
+pub const POLLOUT = ws2_32.POLLOUT;
+pub const POLLWRBAND = ws2_32.POLLWRBAND;
+pub const POLLERR = ws2_32.POLLERR;
+pub const POLLHUP = ws2_32.POLLHUP;
+pub const POLLNVAL = ws2_32.POLLNVAL;
+
+pub const SOL_SOCKET = ws2_32.SOL_SOCKET;
+
+pub const SO_DEBUG = ws2_32.SO_DEBUG;
+pub const SO_ACCEPTCONN = ws2_32.SO_ACCEPTCONN;
+pub const SO_REUSEADDR = ws2_32.SO_REUSEADDR;
+pub const SO_KEEPALIVE = ws2_32.SO_KEEPALIVE;
+pub const SO_DONTROUTE = ws2_32.SO_DONTROUTE;
+pub const SO_BROADCAST = ws2_32.SO_BROADCAST;
+pub const SO_USELOOPBACK = ws2_32.SO_USELOOPBACK;
+pub const SO_LINGER = ws2_32.SO_LINGER;
+pub const SO_OOBINLINE = ws2_32.SO_OOBINLINE;
+
+pub const SO_DONTLINGER = ws2_32.SO_DONTLINGER;
+pub const SO_EXCLUSIVEADDRUSE = ws2_32.SO_EXCLUSIVEADDRUSE;
+
+pub const SO_SNDBUF = ws2_32.SO_SNDBUF;
+pub const SO_RCVBUF = ws2_32.SO_RCVBUF;
+pub const SO_SNDLOWAT = ws2_32.SO_SNDLOWAT;
+pub const SO_RCVLOWAT = ws2_32.SO_RCVLOWAT;
+pub const SO_SNDTIMEO = ws2_32.SO_SNDTIMEO;
+pub const SO_RCVTIMEO = ws2_32.SO_RCVTIMEO;
+pub const SO_ERROR = ws2_32.SO_ERROR;
+pub const SO_TYPE = ws2_32.SO_TYPE;
+
+pub const SO_GROUP_ID = ws2_32.SO_GROUP_ID;
+pub const SO_GROUP_PRIORITY = ws2_32.SO_GROUP_PRIORITY;
+pub const SO_MAX_MSG_SIZE = ws2_32.SO_MAX_MSG_SIZE;
+pub const SO_PROTOCOL_INFOA = ws2_32.SO_PROTOCOL_INFOA;
+pub const SO_PROTOCOL_INFOW = ws2_32.SO_PROTOCOL_INFOW;
+
+pub const PVD_CONFIG = ws2_32.PVD_CONFIG;
+pub const SO_CONDITIONAL_ACCEPT = ws2_32.SO_CONDITIONAL_ACCEPT;
+
+pub const TCP_NODELAY = ws2_32.TCP_NODELAY;
+
+pub const O_RDONLY = 0o0;
+pub const O_WRONLY = 0o1;
+pub const O_RDWR = 0o2;
+
+pub const O_CREAT = 0o100;
+pub const O_EXCL = 0o200;
+pub const O_NOCTTY = 0o400;
+pub const O_TRUNC = 0o1000;
+pub const O_APPEND = 0o2000;
+pub const O_NONBLOCK = 0o4000;
+pub const O_DSYNC = 0o10000;
+pub const O_SYNC = 0o4010000;
+pub const O_RSYNC = 0o4010000;
+pub const O_DIRECTORY = 0o200000;
+pub const O_NOFOLLOW = 0o400000;
+pub const O_CLOEXEC = 0o2000000;
+
+pub const O_ASYNC = 0o20000;
+pub const O_DIRECT = 0o40000;
+pub const O_LARGEFILE = 0;
+pub const O_NOATIME = 0o1000000;
+pub const O_PATH = 0o10000000;
+pub const O_TMPFILE = 0o20200000;
+pub const O_NDELAY = O_NONBLOCK;
+
+pub const IFNAMESIZE = 30;
diff --git a/lib/std/fs.zig b/lib/std/fs.zig
index 3caf64b7af..6a93a9a76f 100644
--- a/lib/std/fs.zig
+++ b/lib/std/fs.zig
@@ -471,7 +471,7 @@ pub const Dir = struct {
continue :start_over;
}
- var stat_info: os.libc_stat = undefined;
+ var stat_info: os.Stat = undefined;
_ = os.system._kern_read_stat(
self.dir.fd,
&haiku_entry.d_name,
diff --git a/lib/std/os.zig b/lib/std/os.zig
index 6b3daed049..a177a730f1 100644
--- a/lib/std/os.zig
+++ b/lib/std/os.zig
@@ -40,15 +40,10 @@ comptime {
}
test {
- _ = darwin;
- _ = freebsd;
_ = linux;
- _ = netbsd;
- _ = openbsd;
_ = uefi;
_ = wasi;
_ = windows;
- _ = haiku;
_ = @import("os/test.zig");
}
@@ -61,85 +56,68 @@ pub const system = if (@hasDecl(root, "os") and root.os != @This())
else if (builtin.link_libc)
std.c
else switch (builtin.os.tag) {
- .macos, .ios, .watchos, .tvos => darwin,
- .freebsd => freebsd,
- .haiku => haiku,
.linux => linux,
- .netbsd => netbsd,
- .openbsd => openbsd,
- .dragonfly => dragonfly,
.wasi => wasi,
.windows => windows,
+ .uefi => uefi,
else => struct {},
};
-
-const bits = switch (builtin.os.tag) {
- .macos, .ios, .tvos, .watchos => std.c,
- .dragonfly => @import("os/bits/dragonfly.zig"),
- .freebsd => @import("os/bits/freebsd.zig"),
- .haiku => @import("os/bits/haiku.zig"),
- .linux => linux,
- .netbsd => @import("os/bits/netbsd.zig"),
- .openbsd => @import("os/bits/openbsd.zig"),
- .wasi => @import("os/bits/wasi.zig"),
- .windows => @import("os/bits/windows.zig"),
- else => struct {},
-};
-pub const E = bits.E;
-pub const ARCH = bits.ARCH;
-pub const Elf_Symndx = bits.Elf_Symndx;
-pub const F = bits.F;
-pub const Flock = bits.Flock;
-pub const LOCK = bits.LOCK;
-pub const MAP = bits.MAP;
-pub const MMAP2_UNIT = bits.MMAP2_UNIT;
-pub const O = bits.O;
-pub const REG = bits.REG;
-pub const SC = bits.SC;
-pub const SYS = bits.SYS;
-pub const VDSO = bits.VDSO;
-pub const blkcnt_t = bits.blkcnt_t;
-pub const blksize_t = bits.blksize_t;
-pub const dev_t = bits.dev_t;
-pub const ino_t = bits.ino_t;
-pub const kernel_stat = bits.kernel_stat;
-pub const libc_stat = bits.libc_stat;
-pub const mcontext_t = bits.mcontext_t;
-pub const mode_t = bits.mode_t;
-pub const msghdr = bits.msghdr;
-pub const msghdr_const = bits.msghdr_const;
-pub const nlink_t = bits.nlink_t;
-pub const off_t = bits.off_t;
-pub const time_t = bits.time_t;
-pub const timespec = bits.timespec;
-pub const timeval = bits.timeval;
-pub const timezone = bits.timezone;
-pub const ucontext_t = bits.ucontext_t;
-pub const user_desc = bits.user_desc;
-pub const pid_t = bits.pid_t;
-pub const fd_t = bits.fd_t;
-pub const uid_t = bits.uid_t;
-pub const gid_t = bits.gid_t;
-pub const clock_t = bits.clock_t;
-pub const NAME_MAX = bits.NAME_MAX;
-pub const PATH_MAX = bits.PATH_MAX;
-pub const IOV_MAX = bits.IOV_MAX;
-pub const MAX_ADDR_LEN = bits.MAX_ADDR_LEN;
-pub const STDIN_FILENO = bits.STDIN_FILENO;
-pub const STDOUT_FILENO = bits.STDIN_FILENO;
-pub const STDERR_FILENO = bits.STDIN_FILENO;
-pub const AT = bits.AT;
-pub const PROT = bits.PROT;
-pub const CLOCK = bits.CLOCK;
-pub const dl_phdr_info = bits.dl_phdr_info;
-pub const Sigaction = bits.Sigaction;
-pub const rlimit_resource = bits.rlimit_resource;
-pub const SIG = bits.SIG;
-pub const rlimit = bits.rlimit;
-pub const empty_sigset = bits.empty_sigset;
-pub const S = bits.S;
-pub const siginfo_t = bits.siginfo_t;
-pub const SA = bits.SA;
+pub const ARCH = system.ARCH;
+pub const AT = system.AT;
+pub const CLOCK = system.CLOCK;
+pub const E = system.E;
+pub const Elf_Symndx = system.Elf_Symndx;
+pub const F = system.F;
+pub const Flock = system.Flock;
+pub const IOV_MAX = system.IOV_MAX;
+pub const LOCK = system.LOCK;
+pub const MAP = system.MAP;
+pub const MAX_ADDR_LEN = system.MAX_ADDR_LEN;
+pub const MMAP2_UNIT = system.MMAP2_UNIT;
+pub const NAME_MAX = system.NAME_MAX;
+pub const O = system.O;
+pub const PATH_MAX = system.PATH_MAX;
+pub const PROT = system.PROT;
+pub const REG = system.REG;
+pub const S = system.S;
+pub const SA = system.SA;
+pub const SC = system.SC;
+pub const SIG = system.SIG;
+pub const STDERR_FILENO = system.STDIN_FILENO;
+pub const STDIN_FILENO = system.STDIN_FILENO;
+pub const STDOUT_FILENO = system.STDIN_FILENO;
+pub const SYS = system.SYS;
+pub const Sigaction = system.Sigaction;
+pub const Stat = system.Stat;
+pub const VDSO = system.VDSO;
+pub const blkcnt_t = system.blkcnt_t;
+pub const blksize_t = system.blksize_t;
+pub const clock_t = system.clock_t;
+pub const dev_t = system.dev_t;
+pub const dl_phdr_info = system.dl_phdr_info;
+pub const empty_sigset = system.empty_sigset;
+pub const fd_t = system.fd_t;
+pub const gid_t = system.gid_t;
+pub const ino_t = system.ino_t;
+pub const mcontext_t = system.mcontext_t;
+pub const mode_t = system.mode_t;
+pub const msghdr = system.msghdr;
+pub const msghdr_const = system.msghdr_const;
+pub const nlink_t = system.nlink_t;
+pub const off_t = system.off_t;
+pub const pid_t = system.pid_t;
+pub const pollfd = system.pollfd;
+pub const rlimit = system.rlimit;
+pub const rlimit_resource = system.rlimit_resource;
+pub const siginfo_t = system.siginfo_t;
+pub const sigset_t = system.sigset_t;
+pub const time_t = system.time_t;
+pub const timespec = system.timespec;
+pub const timeval = system.timeval;
+pub const timezone = system.timezone;
+pub const ucontext_t = system.ucontext_t;
+pub const uid_t = system.uid_t;
+pub const user_desc = system.user_desc;
pub const iovec = extern struct {
iov_base: [*]u8,
@@ -334,7 +312,7 @@ pub fn raise(sig: u8) RaiseError!void {
}
if (builtin.os.tag == .linux) {
- var set: bits.sigset_t = undefined;
+ var set: sigset_t = undefined;
// block application signals
_ = linux.sigprocmask(SIG.BLOCK, &linux.app_mask, &set);
@@ -3558,11 +3536,6 @@ pub fn waitpid(pid: pid_t, flags: u32) WaitPidResult {
}
}
-pub const Stat = if (builtin.link_libc)
- system.libc_stat
-else
- system.kernel_stat;
-
pub const FStatError = error{
SystemResources,
diff --git a/lib/std/os/bits/darwin.zig b/lib/std/os/bits/darwin.zig
deleted file mode 100644
index e8556a4d89..0000000000
--- a/lib/std/os/bits/darwin.zig
+++ /dev/null
@@ -1,1783 +0,0 @@
-const std = @import("../../std.zig");
-const assert = std.debug.assert;
-const maxInt = std.math.maxInt;
-
-// See: https://opensource.apple.com/source/xnu/xnu-6153.141.1/bsd/sys/_types.h.auto.html
-// TODO: audit mode_t/pid_t, should likely be u16/i32
-pub const fd_t = c_int;
-pub const pid_t = c_int;
-pub const mode_t = c_uint;
-pub const uid_t = u32;
-pub const gid_t = u32;
-
-pub const in_port_t = u16;
-pub const sa_family_t = u8;
-pub const socklen_t = u32;
-pub const sockaddr = extern struct {
- len: u8,
- family: sa_family_t,
- data: [14]u8,
-};
-pub const sockaddr_storage = std.x.os.Socket.Address.Native.Storage;
-pub const sockaddr_in = extern struct {
- len: u8 = @sizeOf(sockaddr_in),
- family: sa_family_t = AF_INET,
- port: in_port_t,
- addr: u32,
- zero: [8]u8 = [8]u8{ 0, 0, 0, 0, 0, 0, 0, 0 },
-};
-pub const sockaddr_in6 = extern struct {
- len: u8 = @sizeOf(sockaddr_in6),
- family: sa_family_t = AF_INET6,
- port: in_port_t,
- flowinfo: u32,
- addr: [16]u8,
- scope_id: u32,
-};
-
-/// UNIX domain socket
-pub const sockaddr_un = extern struct {
- len: u8 = @sizeOf(sockaddr_un),
- family: sa_family_t = AF_UNIX,
- path: [104]u8,
-};
-
-pub const timeval = extern struct {
- tv_sec: c_long,
- tv_usec: i32,
-};
-
-pub const timezone = extern struct {
- tz_minuteswest: i32,
- tz_dsttime: i32,
-};
-
-pub const mach_timebase_info_data = extern struct {
- numer: u32,
- denom: u32,
-};
-
-pub const off_t = i64;
-pub const ino_t = u64;
-
-pub const Flock = extern struct {
- l_start: off_t,
- l_len: off_t,
- l_pid: pid_t,
- l_type: i16,
- l_whence: i16,
-};
-
-pub const libc_stat = extern struct {
- dev: i32,
- mode: u16,
- nlink: u16,
- ino: ino_t,
- uid: uid_t,
- gid: gid_t,
- rdev: i32,
- atimesec: isize,
- atimensec: isize,
- mtimesec: isize,
- mtimensec: isize,
- ctimesec: isize,
- ctimensec: isize,
- birthtimesec: isize,
- birthtimensec: isize,
- size: off_t,
- blocks: i64,
- blksize: i32,
- flags: u32,
- gen: u32,
- lspare: i32,
- qspare: [2]i64,
-
- pub fn atime(self: @This()) timespec {
- return timespec{
- .tv_sec = self.atimesec,
- .tv_nsec = self.atimensec,
- };
- }
-
- pub fn mtime(self: @This()) timespec {
- return timespec{
- .tv_sec = self.mtimesec,
- .tv_nsec = self.mtimensec,
- };
- }
-
- pub fn ctime(self: @This()) timespec {
- return timespec{
- .tv_sec = self.ctimesec,
- .tv_nsec = self.ctimensec,
- };
- }
-};
-
-pub const timespec = extern struct {
- tv_sec: isize,
- tv_nsec: isize,
-};
-
-pub const sigset_t = u32;
-pub const empty_sigset: sigset_t = 0;
-
-pub const SIG_ERR = @intToPtr(?Sigaction.sigaction_fn, maxInt(usize));
-pub const SIG_DFL = @intToPtr(?Sigaction.sigaction_fn, 0);
-pub const SIG_IGN = @intToPtr(?Sigaction.sigaction_fn, 1);
-pub const SIG_HOLD = @intToPtr(?Sigaction.sigaction_fn, 5);
-
-pub const siginfo_t = extern struct {
- signo: c_int,
- errno: c_int,
- code: c_int,
- pid: pid_t,
- uid: uid_t,
- status: c_int,
- addr: *c_void,
- value: extern union {
- int: c_int,
- ptr: *c_void,
- },
- si_band: c_long,
- _pad: [7]c_ulong,
-};
-
-/// Renamed from `sigaction` to `Sigaction` to avoid conflict with function name.
-pub const Sigaction = extern struct {
- pub const handler_fn = fn (c_int) callconv(.C) void;
- pub const sigaction_fn = fn (c_int, *const siginfo_t, ?*const c_void) callconv(.C) void;
-
- handler: extern union {
- handler: ?handler_fn,
- sigaction: ?sigaction_fn,
- },
- mask: sigset_t,
- flags: c_uint,
-};
-
-pub const dirent = extern struct {
- d_ino: usize,
- d_seekoff: usize,
- d_reclen: u16,
- d_namlen: u16,
- d_type: u8,
- d_name: u8, // field address is address of first byte of name
-
- pub fn reclen(self: dirent) u16 {
- return self.d_reclen;
- }
-};
-
-/// Renamed from `kevent` to `Kevent` to avoid conflict with function name.
-pub const Kevent = extern struct {
- ident: usize,
- filter: i16,
- flags: u16,
- fflags: u32,
- data: isize,
- udata: usize,
-};
-
-// sys/types.h on macos uses #pragma pack(4) so these checks are
-// to make sure the struct is laid out the same. These values were
-// produced from C code using the offsetof macro.
-comptime {
- assert(@offsetOf(Kevent, "ident") == 0);
- assert(@offsetOf(Kevent, "filter") == 8);
- assert(@offsetOf(Kevent, "flags") == 10);
- assert(@offsetOf(Kevent, "fflags") == 12);
- assert(@offsetOf(Kevent, "data") == 16);
- assert(@offsetOf(Kevent, "udata") == 24);
-}
-
-pub const kevent64_s = extern struct {
- ident: u64,
- filter: i16,
- flags: u16,
- fflags: u32,
- data: i64,
- udata: u64,
- ext: [2]u64,
-};
-
-// sys/types.h on macos uses #pragma pack() 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(kevent64_s, "ident") == 0);
- assert(@offsetOf(kevent64_s, "filter") == 8);
- assert(@offsetOf(kevent64_s, "flags") == 10);
- assert(@offsetOf(kevent64_s, "fflags") == 12);
- assert(@offsetOf(kevent64_s, "data") == 16);
- assert(@offsetOf(kevent64_s, "udata") == 24);
- assert(@offsetOf(kevent64_s, "ext") == 32);
-}
-
-pub const mach_port_t = c_uint;
-pub const clock_serv_t = mach_port_t;
-pub const clock_res_t = c_int;
-pub const mach_port_name_t = natural_t;
-pub const natural_t = c_uint;
-pub const mach_timespec_t = extern struct {
- tv_sec: c_uint,
- tv_nsec: clock_res_t,
-};
-pub const kern_return_t = c_int;
-pub const host_t = mach_port_t;
-pub const CALENDAR_CLOCK = 1;
-
-pub const PATH_MAX = 1024;
-pub const IOV_MAX = 16;
-
-pub const STDIN_FILENO = 0;
-pub const STDOUT_FILENO = 1;
-pub const STDERR_FILENO = 2;
-
-/// [MC2] no permissions
-pub const PROT_NONE = 0x00;
-
-/// [MC2] pages can be read
-pub const PROT_READ = 0x01;
-
-/// [MC2] pages can be written
-pub const PROT_WRITE = 0x02;
-
-/// [MC2] pages can be executed
-pub const PROT_EXEC = 0x04;
-
-/// allocated from memory, swap space
-pub const MAP_ANONYMOUS = 0x1000;
-
-/// map from file (default)
-pub const MAP_FILE = 0x0000;
-
-/// interpret addr exactly
-pub const MAP_FIXED = 0x0010;
-
-/// region may contain semaphores
-pub const MAP_HASSEMAPHORE = 0x0200;
-
-/// changes are private
-pub const MAP_PRIVATE = 0x0002;
-
-/// share changes
-pub const MAP_SHARED = 0x0001;
-
-/// don't cache pages for this mapping
-pub const MAP_NOCACHE = 0x0400;
-
-/// don't reserve needed swap area
-pub const MAP_NORESERVE = 0x0040;
-pub const MAP_FAILED = @intToPtr(*c_void, maxInt(usize));
-
-/// [XSI] no hang in wait/no child to reap
-pub const WNOHANG = 0x00000001;
-
-/// [XSI] notify on stop, untraced child
-pub const WUNTRACED = 0x00000002;
-
-/// take signal on signal stack
-pub const SA_ONSTACK = 0x0001;
-
-/// restart system on signal return
-pub const SA_RESTART = 0x0002;
-
-/// reset to SIG_DFL when taking signal
-pub const SA_RESETHAND = 0x0004;
-
-/// do not generate SIGCHLD on child stop
-pub const SA_NOCLDSTOP = 0x0008;
-
-/// don't mask the signal we're delivering
-pub const SA_NODEFER = 0x0010;
-
-/// don't keep zombies around
-pub const SA_NOCLDWAIT = 0x0020;
-
-/// signal handler with SA_SIGINFO args
-pub const SA_SIGINFO = 0x0040;
-
-/// do not bounce off kernel's sigtramp
-pub const SA_USERTRAMP = 0x0100;
-
-/// signal handler with SA_SIGINFO args with 64bit regs information
-pub const SA_64REGSET = 0x0200;
-
-pub const O_PATH = 0x0000;
-
-pub const F_OK = 0;
-pub const X_OK = 1;
-pub const W_OK = 2;
-pub const R_OK = 4;
-
-/// open for reading only
-pub const O_RDONLY = 0x0000;
-
-/// open for writing only
-pub const O_WRONLY = 0x0001;
-
-/// open for reading and writing
-pub const O_RDWR = 0x0002;
-
-/// do not block on open or for data to become available
-pub const O_NONBLOCK = 0x0004;
-
-/// append on each write
-pub const O_APPEND = 0x0008;
-
-/// create file if it does not exist
-pub const O_CREAT = 0x0200;
-
-/// truncate size to 0
-pub const O_TRUNC = 0x0400;
-
-/// error if O_CREAT and the file exists
-pub const O_EXCL = 0x0800;
-
-/// atomically obtain a shared lock
-pub const O_SHLOCK = 0x0010;
-
-/// atomically obtain an exclusive lock
-pub const O_EXLOCK = 0x0020;
-
-/// do not follow symlinks
-pub const O_NOFOLLOW = 0x0100;
-
-/// allow open of symlinks
-pub const O_SYMLINK = 0x200000;
-
-/// descriptor requested for event notifications only
-pub const O_EVTONLY = 0x8000;
-
-/// mark as close-on-exec
-pub const O_CLOEXEC = 0x1000000;
-
-pub const O_ACCMODE = 3;
-pub const O_ALERT = 536870912;
-pub const O_ASYNC = 64;
-pub const O_DIRECTORY = 1048576;
-pub const O_DP_GETRAWENCRYPTED = 1;
-pub const O_DP_GETRAWUNENCRYPTED = 2;
-pub const O_DSYNC = 4194304;
-pub const O_FSYNC = O_SYNC;
-pub const O_NOCTTY = 131072;
-pub const O_POPUP = 2147483648;
-pub const O_SYNC = 128;
-
-pub const SEEK_SET = 0x0;
-pub const SEEK_CUR = 0x1;
-pub const SEEK_END = 0x2;
-
-pub const DT_UNKNOWN = 0;
-pub const DT_FIFO = 1;
-pub const DT_CHR = 2;
-pub const DT_DIR = 4;
-pub const DT_BLK = 6;
-pub const DT_REG = 8;
-pub const DT_LNK = 10;
-pub const DT_SOCK = 12;
-pub const DT_WHT = 14;
-
-/// block specified signal set
-pub const SIG_BLOCK = 1;
-
-/// unblock specified signal set
-pub const SIG_UNBLOCK = 2;
-
-/// set specified signal set
-pub const SIG_SETMASK = 3;
-
-/// hangup
-pub const SIGHUP = 1;
-
-/// interrupt
-pub const SIGINT = 2;
-
-/// quit
-pub const SIGQUIT = 3;
-
-/// illegal instruction (not reset when caught)
-pub const SIGILL = 4;
-
-/// trace trap (not reset when caught)
-pub const SIGTRAP = 5;
-
-/// abort()
-pub const SIGABRT = 6;
-
-/// pollable event ([XSR] generated, not supported)
-pub const SIGPOLL = 7;
-
-/// compatibility
-pub const SIGIOT = SIGABRT;
-
-/// EMT instruction
-pub const SIGEMT = 7;
-
-/// floating point exception
-pub const SIGFPE = 8;
-
-/// kill (cannot be caught or ignored)
-pub const SIGKILL = 9;
-
-/// bus error
-pub const SIGBUS = 10;
-
-/// segmentation violation
-pub const SIGSEGV = 11;
-
-/// bad argument to system call
-pub const SIGSYS = 12;
-
-/// write on a pipe with no one to read it
-pub const SIGPIPE = 13;
-
-/// alarm clock
-pub const SIGALRM = 14;
-
-/// software termination signal from kill
-pub const SIGTERM = 15;
-
-/// urgent condition on IO channel
-pub const SIGURG = 16;
-
-/// sendable stop signal not from tty
-pub const SIGSTOP = 17;
-
-/// stop signal from tty
-pub const SIGTSTP = 18;
-
-/// continue a stopped process
-pub const SIGCONT = 19;
-
-/// to parent on child stop or exit
-pub const SIGCHLD = 20;
-
-/// to readers pgrp upon background tty read
-pub const SIGTTIN = 21;
-
-/// like TTIN for output if (tp->t_local&LTOSTOP)
-pub const SIGTTOU = 22;
-
-/// input/output possible signal
-pub const SIGIO = 23;
-
-/// exceeded CPU time limit
-pub const SIGXCPU = 24;
-
-/// exceeded file size limit
-pub const SIGXFSZ = 25;
-
-/// virtual time alarm
-pub const SIGVTALRM = 26;
-
-/// profiling time alarm
-pub const SIGPROF = 27;
-
-/// window size changes
-pub const SIGWINCH = 28;
-
-/// information request
-pub const SIGINFO = 29;
-
-/// user defined signal 1
-pub const SIGUSR1 = 30;
-
-/// user defined signal 2
-pub const SIGUSR2 = 31;
-
-/// no flag value
-pub const KEVENT_FLAG_NONE = 0x000;
-
-/// immediate timeout
-pub const KEVENT_FLAG_IMMEDIATE = 0x001;
-
-/// output events only include change
-pub const KEVENT_FLAG_ERROR_EVENTS = 0x002;
-
-/// add event to kq (implies enable)
-pub const EV_ADD = 0x0001;
-
-/// delete event from kq
-pub const EV_DELETE = 0x0002;
-
-/// enable event
-pub const EV_ENABLE = 0x0004;
-
-/// disable event (not reported)
-pub const EV_DISABLE = 0x0008;
-
-/// only report one occurrence
-pub const EV_ONESHOT = 0x0010;
-
-/// clear event state after reporting
-pub const EV_CLEAR = 0x0020;
-
-/// force immediate event output
-/// ... with or without EV_ERROR
-/// ... use KEVENT_FLAG_ERROR_EVENTS
-/// on syscalls supporting flags
-pub const EV_RECEIPT = 0x0040;
-
-/// disable event after reporting
-pub const EV_DISPATCH = 0x0080;
-
-/// unique kevent per udata value
-pub const EV_UDATA_SPECIFIC = 0x0100;
-
-/// ... in combination with EV_DELETE
-/// will defer delete until udata-specific
-/// event enabled. EINPROGRESS will be
-/// returned to indicate the deferral
-pub const EV_DISPATCH2 = EV_DISPATCH | EV_UDATA_SPECIFIC;
-
-/// report that source has vanished
-/// ... only valid with EV_DISPATCH2
-pub const EV_VANISHED = 0x0200;
-
-/// reserved by system
-pub const EV_SYSFLAGS = 0xF000;
-
-/// filter-specific flag
-pub const EV_FLAG0 = 0x1000;
-
-/// filter-specific flag
-pub const EV_FLAG1 = 0x2000;
-
-/// EOF detected
-pub const EV_EOF = 0x8000;
-
-/// error, data contains errno
-pub const EV_ERROR = 0x4000;
-
-pub const EV_POLL = EV_FLAG0;
-pub const EV_OOBAND = EV_FLAG1;
-
-pub const EVFILT_READ = -1;
-pub const EVFILT_WRITE = -2;
-
-/// attached to aio requests
-pub const EVFILT_AIO = -3;
-
-/// attached to vnodes
-pub const EVFILT_VNODE = -4;
-
-/// attached to struct proc
-pub const EVFILT_PROC = -5;
-
-/// attached to struct proc
-pub const EVFILT_SIGNAL = -6;
-
-/// timers
-pub const EVFILT_TIMER = -7;
-
-/// Mach portsets
-pub const EVFILT_MACHPORT = -8;
-
-/// Filesystem events
-pub const EVFILT_FS = -9;
-
-/// User events
-pub const EVFILT_USER = -10;
-
-/// Virtual memory events
-pub const EVFILT_VM = -12;
-
-/// Exception events
-pub const EVFILT_EXCEPT = -15;
-
-pub const EVFILT_SYSCOUNT = 17;
-
-/// On input, NOTE_TRIGGER causes the event to be triggered for output.
-pub const NOTE_TRIGGER = 0x01000000;
-
-/// ignore input fflags
-pub const NOTE_FFNOP = 0x00000000;
-
-/// and fflags
-pub const NOTE_FFAND = 0x40000000;
-
-/// or fflags
-pub const NOTE_FFOR = 0x80000000;
-
-/// copy fflags
-pub const NOTE_FFCOPY = 0xc0000000;
-
-/// mask for operations
-pub const NOTE_FFCTRLMASK = 0xc0000000;
-pub const NOTE_FFLAGSMASK = 0x00ffffff;
-
-/// low water mark
-pub const NOTE_LOWAT = 0x00000001;
-
-/// OOB data
-pub const NOTE_OOB = 0x00000002;
-
-/// vnode was removed
-pub const NOTE_DELETE = 0x00000001;
-
-/// data contents changed
-pub const NOTE_WRITE = 0x00000002;
-
-/// size increased
-pub const NOTE_EXTEND = 0x00000004;
-
-/// attributes changed
-pub const NOTE_ATTRIB = 0x00000008;
-
-/// link count changed
-pub const NOTE_LINK = 0x00000010;
-
-/// vnode was renamed
-pub const NOTE_RENAME = 0x00000020;
-
-/// vnode access was revoked
-pub const NOTE_REVOKE = 0x00000040;
-
-/// No specific vnode event: to test for EVFILT_READ activation
-pub const NOTE_NONE = 0x00000080;
-
-/// vnode was unlocked by flock(2)
-pub const NOTE_FUNLOCK = 0x00000100;
-
-/// process exited
-pub const NOTE_EXIT = 0x80000000;
-
-/// process forked
-pub const NOTE_FORK = 0x40000000;
-
-/// process exec'd
-pub const NOTE_EXEC = 0x20000000;
-
-/// shared with EVFILT_SIGNAL
-pub const NOTE_SIGNAL = 0x08000000;
-
-/// exit status to be returned, valid for child process only
-pub const NOTE_EXITSTATUS = 0x04000000;
-
-/// provide details on reasons for exit
-pub const NOTE_EXIT_DETAIL = 0x02000000;
-
-/// mask for signal & exit status
-pub const NOTE_PDATAMASK = 0x000fffff;
-pub const NOTE_PCTRLMASK = (~NOTE_PDATAMASK);
-
-pub const NOTE_EXIT_DETAIL_MASK = 0x00070000;
-pub const NOTE_EXIT_DECRYPTFAIL = 0x00010000;
-pub const NOTE_EXIT_MEMORY = 0x00020000;
-pub const NOTE_EXIT_CSERROR = 0x00040000;
-
-/// will react on memory pressure
-pub const NOTE_VM_PRESSURE = 0x80000000;
-
-/// will quit on memory pressure, possibly after cleaning up dirty state
-pub const NOTE_VM_PRESSURE_TERMINATE = 0x40000000;
-
-/// will quit immediately on memory pressure
-pub const NOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000;
-
-/// there was an error
-pub const NOTE_VM_ERROR = 0x10000000;
-
-/// data is seconds
-pub const NOTE_SECONDS = 0x00000001;
-
-/// data is microseconds
-pub const NOTE_USECONDS = 0x00000002;
-
-/// data is nanoseconds
-pub const NOTE_NSECONDS = 0x00000004;
-
-/// absolute timeout
-pub const NOTE_ABSOLUTE = 0x00000008;
-
-/// ext[1] holds leeway for power aware timers
-pub const NOTE_LEEWAY = 0x00000010;
-
-/// system does minimal timer coalescing
-pub const NOTE_CRITICAL = 0x00000020;
-
-/// system does maximum timer coalescing
-pub const NOTE_BACKGROUND = 0x00000040;
-pub const NOTE_MACH_CONTINUOUS_TIME = 0x00000080;
-
-/// data is mach absolute time units
-pub const NOTE_MACHTIME = 0x00000100;
-
-pub const AF_UNSPEC = 0;
-pub const AF_LOCAL = 1;
-pub const AF_UNIX = AF_LOCAL;
-pub const AF_INET = 2;
-pub const AF_SYS_CONTROL = 2;
-pub const AF_IMPLINK = 3;
-pub const AF_PUP = 4;
-pub const AF_CHAOS = 5;
-pub const AF_NS = 6;
-pub const AF_ISO = 7;
-pub const AF_OSI = AF_ISO;
-pub const AF_ECMA = 8;
-pub const AF_DATAKIT = 9;
-pub const AF_CCITT = 10;
-pub const AF_SNA = 11;
-pub const AF_DECnet = 12;
-pub const AF_DLI = 13;
-pub const AF_LAT = 14;
-pub const AF_HYLINK = 15;
-pub const AF_APPLETALK = 16;
-pub const AF_ROUTE = 17;
-pub const AF_LINK = 18;
-pub const AF_XTP = 19;
-pub const AF_COIP = 20;
-pub const AF_CNT = 21;
-pub const AF_RTIP = 22;
-pub const AF_IPX = 23;
-pub const AF_SIP = 24;
-pub const AF_PIP = 25;
-pub const AF_ISDN = 28;
-pub const AF_E164 = AF_ISDN;
-pub const AF_KEY = 29;
-pub const AF_INET6 = 30;
-pub const AF_NATM = 31;
-pub const AF_SYSTEM = 32;
-pub const AF_NETBIOS = 33;
-pub const AF_PPP = 34;
-pub const AF_MAX = 40;
-
-pub const PF_UNSPEC = AF_UNSPEC;
-pub const PF_LOCAL = AF_LOCAL;
-pub const PF_UNIX = PF_LOCAL;
-pub const PF_INET = AF_INET;
-pub const PF_IMPLINK = AF_IMPLINK;
-pub const PF_PUP = AF_PUP;
-pub const PF_CHAOS = AF_CHAOS;
-pub const PF_NS = AF_NS;
-pub const PF_ISO = AF_ISO;
-pub const PF_OSI = AF_ISO;
-pub const PF_ECMA = AF_ECMA;
-pub const PF_DATAKIT = AF_DATAKIT;
-pub const PF_CCITT = AF_CCITT;
-pub const PF_SNA = AF_SNA;
-pub const PF_DECnet = AF_DECnet;
-pub const PF_DLI = AF_DLI;
-pub const PF_LAT = AF_LAT;
-pub const PF_HYLINK = AF_HYLINK;
-pub const PF_APPLETALK = AF_APPLETALK;
-pub const PF_ROUTE = AF_ROUTE;
-pub const PF_LINK = AF_LINK;
-pub const PF_XTP = AF_XTP;
-pub const PF_COIP = AF_COIP;
-pub const PF_CNT = AF_CNT;
-pub const PF_SIP = AF_SIP;
-pub const PF_IPX = AF_IPX;
-pub const PF_RTIP = AF_RTIP;
-pub const PF_PIP = AF_PIP;
-pub const PF_ISDN = AF_ISDN;
-pub const PF_KEY = AF_KEY;
-pub const PF_INET6 = AF_INET6;
-pub const PF_NATM = AF_NATM;
-pub const PF_SYSTEM = AF_SYSTEM;
-pub const PF_NETBIOS = AF_NETBIOS;
-pub const PF_PPP = AF_PPP;
-pub const PF_MAX = AF_MAX;
-
-pub const SYSPROTO_EVENT = 1;
-pub const SYSPROTO_CONTROL = 2;
-
-pub const SOCK_STREAM = 1;
-pub const SOCK_DGRAM = 2;
-pub const SOCK_RAW = 3;
-pub const SOCK_RDM = 4;
-pub const SOCK_SEQPACKET = 5;
-pub const SOCK_MAXADDRLEN = 255;
-
-/// Not actually supported by Darwin, but Zig supplies a shim.
-/// This numerical value is not ABI-stable. It need only not conflict
-/// with any other "SOCK_" bits.
-pub const SOCK_CLOEXEC = 1 << 15;
-/// Not actually supported by Darwin, but Zig supplies a shim.
-/// This numerical value is not ABI-stable. It need only not conflict
-/// with any other "SOCK_" bits.
-pub const SOCK_NONBLOCK = 1 << 16;
-
-pub const IPPROTO_ICMP = 1;
-pub const IPPROTO_ICMPV6 = 58;
-pub const IPPROTO_TCP = 6;
-pub const IPPROTO_UDP = 17;
-pub const IPPROTO_IP = 0;
-pub const IPPROTO_IPV6 = 41;
-
-pub const SOL_SOCKET = 0xffff;
-
-pub const SO_DEBUG = 0x0001;
-pub const SO_ACCEPTCONN = 0x0002;
-pub const SO_REUSEADDR = 0x0004;
-pub const SO_KEEPALIVE = 0x0008;
-pub const SO_DONTROUTE = 0x0010;
-pub const SO_BROADCAST = 0x0020;
-pub const SO_USELOOPBACK = 0x0040;
-pub const SO_LINGER = 0x1080;
-pub const SO_OOBINLINE = 0x0100;
-pub const SO_REUSEPORT = 0x0200;
-pub const SO_ACCEPTFILTER = 0x1000;
-pub const SO_SNDBUF = 0x1001;
-pub const SO_RCVBUF = 0x1002;
-pub const SO_SNDLOWAT = 0x1003;
-pub const SO_RCVLOWAT = 0x1004;
-pub const SO_SNDTIMEO = 0x1005;
-pub const SO_RCVTIMEO = 0x1006;
-pub const SO_ERROR = 0x1007;
-pub const SO_TYPE = 0x1008;
-
-pub const SO_NREAD = 0x1020;
-pub const SO_NKE = 0x1021;
-pub const SO_NOSIGPIPE = 0x1022;
-pub const SO_NOADDRERR = 0x1023;
-pub const SO_NWRITE = 0x1024;
-pub const SO_REUSESHAREUID = 0x1025;
-
-fn wstatus(x: u32) u32 {
- return x & 0o177;
-}
-const wstopped = 0o177;
-pub fn WEXITSTATUS(x: u32) u8 {
- return @intCast(u8, x >> 8);
-}
-pub fn WTERMSIG(x: u32) u32 {
- return wstatus(x);
-}
-pub fn WSTOPSIG(x: u32) u32 {
- return x >> 8;
-}
-pub fn WIFEXITED(x: u32) bool {
- return wstatus(x) == 0;
-}
-pub fn WIFSTOPPED(x: u32) bool {
- return wstatus(x) == wstopped and WSTOPSIG(x) != 0x13;
-}
-pub fn WIFSIGNALED(x: u32) bool {
- return wstatus(x) != wstopped and wstatus(x) != 0;
-}
-
-pub const E = enum(u16) {
- /// No error occurred.
- SUCCESS = 0,
-
- /// Operation not permitted
- PERM = 1,
-
- /// No such file or directory
- NOENT = 2,
-
- /// No such process
- SRCH = 3,
-
- /// Interrupted system call
- INTR = 4,
-
- /// Input/output error
- IO = 5,
-
- /// Device not configured
- NXIO = 6,
-
- /// Argument list too long
- @"2BIG" = 7,
-
- /// Exec format error
- NOEXEC = 8,
-
- /// Bad file descriptor
- BADF = 9,
-
- /// No child processes
- CHILD = 10,
-
- /// Resource deadlock avoided
- DEADLK = 11,
-
- /// Cannot allocate memory
- NOMEM = 12,
-
- /// Permission denied
- ACCES = 13,
-
- /// Bad address
- FAULT = 14,
-
- /// Block device required
- NOTBLK = 15,
-
- /// Device / Resource busy
- BUSY = 16,
-
- /// File exists
- EXIST = 17,
-
- /// Cross-device link
- XDEV = 18,
-
- /// Operation not supported by device
- NODEV = 19,
-
- /// Not a directory
- NOTDIR = 20,
-
- /// Is a directory
- ISDIR = 21,
-
- /// Invalid argument
- INVAL = 22,
-
- /// Too many open files in system
- 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 software
-
- /// Numerical argument out of domain
- DOM = 33,
-
- /// Result too large
- RANGE = 34,
-
- // non-blocking and interrupt i/o
-
- /// Resource temporarily unavailable
- /// This is the same code used for `WOULDBLOCK`.
- AGAIN = 35,
-
- /// Operation now in progress
- INPROGRESS = 36,
-
- /// Operation already in progress
- ALREADY = 37,
-
- // ipc/network software -- argument errors
-
- /// Socket operation on non-socket
- NOTSOCK = 38,
-
- /// Destination address required
- DESTADDRREQ = 39,
-
- /// Message too long
- MSGSIZE = 40,
-
- /// Protocol wrong type for socket
- PROTOTYPE = 41,
-
- /// Protocol not available
- NOPROTOOPT = 42,
-
- /// Protocol not supported
- PROTONOSUPPORT = 43,
-
- /// Socket type not supported
- SOCKTNOSUPPORT = 44,
-
- /// Operation not supported
- /// The same code is used for `NOTSUP`.
- OPNOTSUPP = 45,
-
- /// Protocol family not supported
- PFNOSUPPORT = 46,
-
- /// Address family not supported by protocol family
- AFNOSUPPORT = 47,
-
- /// Address already in use
- ADDRINUSE = 48,
- /// Can't assign requested address
-
- // ipc/network software -- operational errors
- ADDRNOTAVAIL = 49,
-
- /// Network is down
- NETDOWN = 50,
-
- /// Network is unreachable
- NETUNREACH = 51,
-
- /// Network dropped connection on reset
- NETRESET = 52,
-
- /// Software caused connection abort
- CONNABORTED = 53,
-
- /// Connection reset by peer
- CONNRESET = 54,
-
- /// No buffer space available
- NOBUFS = 55,
-
- /// Socket is already connected
- ISCONN = 56,
-
- /// Socket is not connected
- NOTCONN = 57,
-
- /// Can't send after socket shutdown
- SHUTDOWN = 58,
-
- /// Too many references: can't splice
- TOOMANYREFS = 59,
-
- /// Operation timed out
- TIMEDOUT = 60,
-
- /// Connection refused
- CONNREFUSED = 61,
-
- /// Too many levels of symbolic links
- LOOP = 62,
-
- /// File name too long
- NAMETOOLONG = 63,
-
- /// Host is down
- HOSTDOWN = 64,
-
- /// No route to host
- HOSTUNREACH = 65,
- /// Directory not empty
-
- // quotas & mush
- NOTEMPTY = 66,
-
- /// Too many processes
- PROCLIM = 67,
-
- /// Too many users
- USERS = 68,
- /// Disc quota exceeded
-
- // Network File System
- DQUOT = 69,
-
- /// Stale NFS file handle
- STALE = 70,
-
- /// Too many levels of remote in path
- REMOTE = 71,
-
- /// RPC struct is bad
- BADRPC = 72,
-
- /// RPC version wrong
- RPCMISMATCH = 73,
-
- /// RPC prog. not avail
- PROGUNAVAIL = 74,
-
- /// Program version wrong
- PROGMISMATCH = 75,
-
- /// Bad procedure for program
- PROCUNAVAIL = 76,
-
- /// No locks available
- NOLCK = 77,
-
- /// Function not implemented
- NOSYS = 78,
-
- /// Inappropriate file type or format
- FTYPE = 79,
-
- /// Authentication error
- AUTH = 80,
-
- /// Need authenticator
- NEEDAUTH = 81,
-
- // Intelligent device errors
-
- /// Device power is off
- PWROFF = 82,
-
- /// Device error, e.g. paper out
- DEVERR = 83,
-
- /// Value too large to be stored in data type
- OVERFLOW = 84,
-
- // Program loading errors
-
- /// Bad executable
- BADEXEC = 85,
-
- /// Bad CPU type in executable
- BADARCH = 86,
-
- /// Shared library version mismatch
- SHLIBVERS = 87,
-
- /// Malformed Macho file
- BADMACHO = 88,
-
- /// Operation canceled
- CANCELED = 89,
-
- /// Identifier removed
- IDRM = 90,
-
- /// No message of desired type
- NOMSG = 91,
-
- /// Illegal byte sequence
- ILSEQ = 92,
-
- /// Attribute not found
- NOATTR = 93,
-
- /// Bad message
- BADMSG = 94,
-
- /// Reserved
- MULTIHOP = 95,
-
- /// No message available on STREAM
- NODATA = 96,
-
- /// Reserved
- NOLINK = 97,
-
- /// No STREAM resources
- NOSR = 98,
-
- /// Not a STREAM
- NOSTR = 99,
-
- /// Protocol error
- PROTO = 100,
-
- /// STREAM ioctl timeout
- TIME = 101,
-
- /// No such policy registered
- NOPOLICY = 103,
-
- /// State not recoverable
- NOTRECOVERABLE = 104,
-
- /// Previous owner died
- OWNERDEAD = 105,
-
- /// Interface output queue is full
- QFULL = 106,
-
- _,
-};
-
-pub const SIGSTKSZ = 131072;
-pub const MINSIGSTKSZ = 32768;
-
-pub const SS_ONSTACK = 1;
-pub const SS_DISABLE = 4;
-
-pub const stack_t = extern struct {
- ss_sp: [*]u8,
- ss_size: isize,
- ss_flags: i32,
-};
-
-pub const S_IFMT = 0o170000;
-
-pub const S_IFIFO = 0o010000;
-pub const S_IFCHR = 0o020000;
-pub const S_IFDIR = 0o040000;
-pub const S_IFBLK = 0o060000;
-pub const S_IFREG = 0o100000;
-pub const S_IFLNK = 0o120000;
-pub const S_IFSOCK = 0o140000;
-pub const S_IFWHT = 0o160000;
-
-pub const S_ISUID = 0o4000;
-pub const S_ISGID = 0o2000;
-pub const S_ISVTX = 0o1000;
-pub const S_IRWXU = 0o700;
-pub const S_IRUSR = 0o400;
-pub const S_IWUSR = 0o200;
-pub const S_IXUSR = 0o100;
-pub const S_IRWXG = 0o070;
-pub const S_IRGRP = 0o040;
-pub const S_IWGRP = 0o020;
-pub const S_IXGRP = 0o010;
-pub const S_IRWXO = 0o007;
-pub const S_IROTH = 0o004;
-pub const S_IWOTH = 0o002;
-pub const S_IXOTH = 0o001;
-
-pub fn S_ISFIFO(m: u32) bool {
- return m & S_IFMT == S_IFIFO;
-}
-
-pub fn S_ISCHR(m: u32) bool {
- return m & S_IFMT == S_IFCHR;
-}
-
-pub fn S_ISDIR(m: u32) bool {
- return m & S_IFMT == S_IFDIR;
-}
-
-pub fn S_ISBLK(m: u32) bool {
- return m & S_IFMT == S_IFBLK;
-}
-
-pub fn S_ISREG(m: u32) bool {
- return m & S_IFMT == S_IFREG;
-}
-
-pub fn S_ISLNK(m: u32) bool {
- return m & S_IFMT == S_IFLNK;
-}
-
-pub fn S_ISSOCK(m: u32) bool {
- return m & S_IFMT == S_IFSOCK;
-}
-
-pub fn S_IWHT(m: u32) bool {
- return m & S_IFMT == S_IFWHT;
-}
-
-pub const HOST_NAME_MAX = 72;
-
-pub const AT_FDCWD = -2;
-
-/// Use effective ids in access check
-pub const AT_EACCESS = 0x0010;
-
-/// Act on the symlink itself not the target
-pub const AT_SYMLINK_NOFOLLOW = 0x0020;
-
-/// Act on target of symlink
-pub const AT_SYMLINK_FOLLOW = 0x0040;
-
-/// Path refers to directory
-pub const AT_REMOVEDIR = 0x0080;
-
-pub const addrinfo = extern struct {
- flags: i32,
- family: i32,
- socktype: i32,
- protocol: i32,
- addrlen: socklen_t,
- canonname: ?[*:0]u8,
- addr: ?*sockaddr,
- next: ?*addrinfo,
-};
-
-pub const RTLD_LAZY = 0x1;
-pub const RTLD_NOW = 0x2;
-pub const RTLD_LOCAL = 0x4;
-pub const RTLD_GLOBAL = 0x8;
-pub const RTLD_NOLOAD = 0x10;
-pub const RTLD_NODELETE = 0x80;
-pub const RTLD_FIRST = 0x100;
-
-pub const RTLD_NEXT = @intToPtr(*c_void, @bitCast(usize, @as(isize, -1)));
-pub const RTLD_DEFAULT = @intToPtr(*c_void, @bitCast(usize, @as(isize, -2)));
-pub const RTLD_SELF = @intToPtr(*c_void, @bitCast(usize, @as(isize, -3)));
-pub const RTLD_MAIN_ONLY = @intToPtr(*c_void, @bitCast(usize, @as(isize, -5)));
-
-/// duplicate file descriptor
-pub const F_DUPFD = 0;
-
-/// get file descriptor flags
-pub const F_GETFD = 1;
-
-/// set file descriptor flags
-pub const F_SETFD = 2;
-
-/// get file status flags
-pub const F_GETFL = 3;
-
-/// set file status flags
-pub const F_SETFL = 4;
-
-/// get SIGIO/SIGURG proc/pgrp
-pub const F_GETOWN = 5;
-
-/// set SIGIO/SIGURG proc/pgrp
-pub const F_SETOWN = 6;
-
-/// get record locking information
-pub const F_GETLK = 7;
-
-/// set record locking information
-pub const F_SETLK = 8;
-
-/// F_SETLK; wait if blocked
-pub const F_SETLKW = 9;
-
-/// F_SETLK; wait if blocked, return on timeout
-pub const F_SETLKWTIMEOUT = 10;
-pub const F_FLUSH_DATA = 40;
-
-/// Used for regression test
-pub const F_CHKCLEAN = 41;
-
-/// Preallocate storage
-pub const F_PREALLOCATE = 42;
-
-/// Truncate a file without zeroing space
-pub const F_SETSIZE = 43;
-
-/// Issue an advisory read async with no copy to user
-pub const F_RDADVISE = 44;
-
-/// turn read ahead off/on for this fd
-pub const F_RDAHEAD = 45;
-
-/// turn data caching off/on for this fd
-pub const F_NOCACHE = 48;
-
-/// file offset to device offset
-pub const F_LOG2PHYS = 49;
-
-/// return the full path of the fd
-pub const F_GETPATH = 50;
-
-/// fsync + ask the drive to flush to the media
-pub const F_FULLFSYNC = 51;
-
-/// find which component (if any) is a package
-pub const F_PATHPKG_CHECK = 52;
-
-/// "freeze" all fs operations
-pub const F_FREEZE_FS = 53;
-
-/// "thaw" all fs operations
-pub const F_THAW_FS = 54;
-
-/// turn data caching off/on (globally) for this file
-pub const F_GLOBAL_NOCACHE = 55;
-
-/// add detached signatures
-pub const F_ADDSIGS = 59;
-
-/// add signature from same file (used by dyld for shared libs)
-pub const F_ADDFILESIGS = 61;
-
-/// used in conjunction with F_NOCACHE to indicate that DIRECT, synchonous writes
-/// should not be used (i.e. its ok to temporaily create cached pages)
-pub const F_NODIRECT = 62;
-
-///Get the protection class of a file from the EA, returns int
-pub const F_GETPROTECTIONCLASS = 63;
-
-///Set the protection class of a file for the EA, requires int
-pub const F_SETPROTECTIONCLASS = 64;
-
-///file offset to device offset, extended
-pub const F_LOG2PHYS_EXT = 65;
-
-///get record locking information, per-process
-pub const F_GETLKPID = 66;
-
-///Mark the file as being the backing store for another filesystem
-pub const F_SETBACKINGSTORE = 70;
-
-///return the full path of the FD, but error in specific mtmd circumstances
-pub const F_GETPATH_MTMINFO = 71;
-
-///Returns the code directory, with associated hashes, to the caller
-pub const F_GETCODEDIR = 72;
-
-///No SIGPIPE generated on EPIPE
-pub const F_SETNOSIGPIPE = 73;
-
-///Status of SIGPIPE for this fd
-pub const F_GETNOSIGPIPE = 74;
-
-///For some cases, we need to rewrap the key for AKS/MKB
-pub const F_TRANSCODEKEY = 75;
-
-///file being written to a by single writer... if throttling enabled, writes
-///may be broken into smaller chunks with throttling in between
-pub const F_SINGLE_WRITER = 76;
-
-///Get the protection version number for this filesystem
-pub const F_GETPROTECTIONLEVEL = 77;
-
-///Add detached code signatures (used by dyld for shared libs)
-pub const F_FINDSIGS = 78;
-
-///Add signature from same file, only if it is signed by Apple (used by dyld for simulator)
-pub const F_ADDFILESIGS_FOR_DYLD_SIM = 83;
-
-///fsync + issue barrier to drive
-pub const F_BARRIERFSYNC = 85;
-
-///Add signature from same file, return end offset in structure on success
-pub const F_ADDFILESIGS_RETURN = 97;
-
-///Check if Library Validation allows this Mach-O file to be mapped into the calling process
-pub const F_CHECK_LV = 98;
-
-///Deallocate a range of the file
-pub const F_PUNCHHOLE = 99;
-
-///Trim an active file
-pub const F_TRIM_ACTIVE_FILE = 100;
-
-pub const FCNTL_FS_SPECIFIC_BASE = 0x00010000;
-
-///mark the dup with FD_CLOEXEC
-pub const F_DUPFD_CLOEXEC = 67;
-
-///close-on-exec flag
-pub const FD_CLOEXEC = 1;
-
-/// shared or read lock
-pub const F_RDLCK = 1;
-
-/// unlock
-pub const F_UNLCK = 2;
-
-/// exclusive or write lock
-pub const F_WRLCK = 3;
-
-pub const LOCK_SH = 1;
-pub const LOCK_EX = 2;
-pub const LOCK_UN = 8;
-pub const LOCK_NB = 4;
-
-pub const nfds_t = u32;
-pub const pollfd = extern struct {
- fd: fd_t,
- events: i16,
- revents: i16,
-};
-
-pub const POLLIN = 0x001;
-pub const POLLPRI = 0x002;
-pub const POLLOUT = 0x004;
-pub const POLLRDNORM = 0x040;
-pub const POLLWRNORM = POLLOUT;
-pub const POLLRDBAND = 0x080;
-pub const POLLWRBAND = 0x100;
-
-pub const POLLEXTEND = 0x0200;
-pub const POLLATTRIB = 0x0400;
-pub const POLLNLINK = 0x0800;
-pub const POLLWRITE = 0x1000;
-
-pub const POLLERR = 0x008;
-pub const POLLHUP = 0x010;
-pub const POLLNVAL = 0x020;
-
-pub const POLLSTANDARD = POLLIN | POLLPRI | POLLOUT | POLLRDNORM | POLLRDBAND | POLLWRBAND | POLLERR | POLLHUP | POLLNVAL;
-
-pub const CLOCK_REALTIME = 0;
-pub const CLOCK_MONOTONIC = 6;
-pub const CLOCK_MONOTONIC_RAW = 4;
-pub const CLOCK_MONOTONIC_RAW_APPROX = 5;
-pub const CLOCK_UPTIME_RAW = 8;
-pub const CLOCK_UPTIME_RAW_APPROX = 9;
-pub const CLOCK_PROCESS_CPUTIME_ID = 12;
-pub const CLOCK_THREAD_CPUTIME_ID = 16;
-
-/// Max open files per process
-/// https://opensource.apple.com/source/xnu/xnu-4903.221.2/bsd/sys/syslimits.h.auto.html
-pub const OPEN_MAX = 10240;
-pub const RUSAGE_SELF = 0;
-pub const RUSAGE_CHILDREN = -1;
-
-pub const rusage = extern struct {
- utime: timeval,
- stime: timeval,
- maxrss: isize,
- ixrss: isize,
- idrss: isize,
- isrss: isize,
- minflt: isize,
- majflt: isize,
- nswap: isize,
- inblock: isize,
- oublock: isize,
- msgsnd: isize,
- msgrcv: isize,
- nsignals: isize,
- nvcsw: isize,
- nivcsw: isize,
-};
-
-pub const rlimit_resource = enum(c_int) {
- CPU = 0,
- FSIZE = 1,
- DATA = 2,
- STACK = 3,
- CORE = 4,
- RSS = 5,
- MEMLOCK = 6,
- NPROC = 7,
- NOFILE = 8,
- _,
-
- pub const AS: rlimit_resource = .RSS;
-};
-
-pub const rlim_t = u64;
-
-/// No limit
-pub const RLIM_INFINITY: rlim_t = (1 << 63) - 1;
-
-pub const RLIM_SAVED_MAX = RLIM_INFINITY;
-pub const RLIM_SAVED_CUR = RLIM_INFINITY;
-
-pub const rlimit = extern struct {
- /// Soft limit
- cur: rlim_t,
- /// Hard limit
- max: rlim_t,
-};
-
-pub const SHUT_RD = 0;
-pub const SHUT_WR = 1;
-pub const SHUT_RDWR = 2;
-
-// Term
-pub const VEOF = 0;
-pub const VEOL = 1;
-pub const VEOL2 = 2;
-pub const VERASE = 3;
-pub const VWERASE = 4;
-pub const VKILL = 5;
-pub const VREPRINT = 6;
-pub const VINTR = 8;
-pub const VQUIT = 9;
-pub const VSUSP = 10;
-pub const VDSUSP = 11;
-pub const VSTART = 12;
-pub const VSTOP = 13;
-pub const VLNEXT = 14;
-pub const VDISCARD = 15;
-pub const VMIN = 16;
-pub const VTIME = 17;
-pub const VSTATUS = 18;
-pub const NCCS = 20; // 2 spares (7, 19)
-
-pub const IGNBRK = 0x00000001; // ignore BREAK condition
-pub const BRKINT = 0x00000002; // map BREAK to SIGINTR
-pub const IGNPAR = 0x00000004; // ignore (discard) parity errors
-pub const PARMRK = 0x00000008; // mark parity and framing errors
-pub const INPCK = 0x00000010; // enable checking of parity errors
-pub const ISTRIP = 0x00000020; // strip 8th bit off chars
-pub const INLCR = 0x00000040; // map NL into CR
-pub const IGNCR = 0x00000080; // ignore CR
-pub const ICRNL = 0x00000100; // map CR to NL (ala CRMOD)
-pub const IXON = 0x00000200; // enable output flow control
-pub const IXOFF = 0x00000400; // enable input flow control
-pub const IXANY = 0x00000800; // any char will restart after stop
-pub const IMAXBEL = 0x00002000; // ring bell on input queue full
-pub const IUTF8 = 0x00004000; // maintain state for UTF-8 VERASE
-
-pub const OPOST = 0x00000001; //enable following output processing
-pub const ONLCR = 0x00000002; // map NL to CR-NL (ala CRMOD)
-pub const OXTABS = 0x00000004; // expand tabs to spaces
-pub const ONOEOT = 0x00000008; // discard EOT's (^D) on output)
-
-pub const OCRNL = 0x00000010; // map CR to NL on output
-pub const ONOCR = 0x00000020; // no CR output at column 0
-pub const ONLRET = 0x00000040; // NL performs CR function
-pub const OFILL = 0x00000080; // use fill characters for delay
-pub const NLDLY = 0x00000300; // \n delay
-pub const TABDLY = 0x00000c04; // horizontal tab delay
-pub const CRDLY = 0x00003000; // \r delay
-pub const FFDLY = 0x00004000; // form feed delay
-pub const BSDLY = 0x00008000; // \b delay
-pub const VTDLY = 0x00010000; // vertical tab delay
-pub const OFDEL = 0x00020000; // fill is DEL, else NUL
-
-pub const NL0 = 0x00000000;
-pub const NL1 = 0x00000100;
-pub const NL2 = 0x00000200;
-pub const NL3 = 0x00000300;
-pub const TAB0 = 0x00000000;
-pub const TAB1 = 0x00000400;
-pub const TAB2 = 0x00000800;
-pub const TAB3 = 0x00000004;
-pub const CR0 = 0x00000000;
-pub const CR1 = 0x00001000;
-pub const CR2 = 0x00002000;
-pub const CR3 = 0x00003000;
-pub const FF0 = 0x00000000;
-pub const FF1 = 0x00004000;
-pub const BS0 = 0x00000000;
-pub const BS1 = 0x00008000;
-pub const VT0 = 0x00000000;
-pub const VT1 = 0x00010000;
-
-pub const CIGNORE = 0x00000001; // ignore control flags
-pub const CSIZE = 0x00000300; // character size mask
-pub const CS5 = 0x00000000; // 5 bits (pseudo)
-pub const CS6 = 0x00000100; // 6 bits
-pub const CS7 = 0x00000200; // 7 bits
-pub const CS8 = 0x00000300; // 8 bits
-pub const CSTOPB = 0x0000040; // send 2 stop bits
-pub const CREAD = 0x00000800; // enable receiver
-pub const PARENB = 0x00001000; // parity enable
-pub const PARODD = 0x00002000; // odd parity, else even
-pub const HUPCL = 0x00004000; // hang up on last close
-pub const CLOCAL = 0x00008000; // ignore modem status lines
-pub const CCTS_OFLOW = 0x00010000; // CTS flow control of output
-pub const CRTSCTS = (CCTS_OFLOW | CRTS_IFLOW);
-pub const CRTS_IFLOW = 0x00020000; // RTS flow control of input
-pub const CDTR_IFLOW = 0x00040000; // DTR flow control of input
-pub const CDSR_OFLOW = 0x00080000; // DSR flow control of output
-pub const CCAR_OFLOW = 0x00100000; // DCD flow control of output
-pub const MDMBUF = 0x00100000; // old name for CCAR_OFLOW
-
-pub const ECHOKE = 0x00000001; // visual erase for line kill
-pub const ECHOE = 0x00000002; // visually erase chars
-pub const ECHOK = 0x00000004; // echo NL after line kill
-pub const ECHO = 0x00000008; // enable echoing
-pub const ECHONL = 0x00000010; // echo NL even if ECHO is off
-pub const ECHOPRT = 0x00000020; // visual erase mode for hardcopy
-pub const ECHOCTL = 0x00000040; // echo control chars as ^(Char)
-pub const ISIG = 0x00000080; // enable signals INTR, QUIT, [D]SUSP
-pub const ICANON = 0x00000100; // canonicalize input lines
-pub const ALTWERASE = 0x00000200; // use alternate WERASE algorithm
-pub const IEXTEN = 0x00000400; // enable DISCARD and LNEXT
-pub const EXTPROC = 0x00000800; // external processing
-pub const TOSTOP = 0x00400000; // stop background jobs from output
-pub const FLUSHO = 0x00800000; // output being flushed (state)
-pub const NOKERNINFO = 0x02000000; // no kernel output from VSTATUS
-pub const PENDIN = 0x20000000; // XXX retype pending input (state)
-pub const NOFLSH = 0x80000000; // don't flush after interrupt
-
-pub const TCSANOW = 0; // make change immediate
-pub const TCSADRAIN = 1; // drain output, then change
-pub const TCSAFLUSH = 2; // drain output, flush input
-pub const TCSASOFT = 0x10; // flag - don't alter h.w. state
-pub const TCSA = enum(c_uint) {
- NOW,
- DRAIN,
- FLUSH,
- _,
-};
-
-pub const B0 = 0;
-pub const B50 = 50;
-pub const B75 = 75;
-pub const B110 = 110;
-pub const B134 = 134;
-pub const B150 = 150;
-pub const B200 = 200;
-pub const B300 = 300;
-pub const B600 = 600;
-pub const B1200 = 1200;
-pub const B1800 = 1800;
-pub const B2400 = 2400;
-pub const B4800 = 4800;
-pub const B9600 = 9600;
-pub const B19200 = 19200;
-pub const B38400 = 38400;
-pub const B7200 = 7200;
-pub const B14400 = 14400;
-pub const B28800 = 28800;
-pub const B57600 = 57600;
-pub const B76800 = 76800;
-pub const B115200 = 115200;
-pub const B230400 = 230400;
-pub const EXTA = 19200;
-pub const EXTB = 38400;
-
-pub const TCIFLUSH = 1;
-pub const TCOFLUSH = 2;
-pub const TCIOFLUSH = 3;
-pub const TCOOFF = 1;
-pub const TCOON = 2;
-pub const TCIOFF = 3;
-pub const TCION = 4;
-
-pub const cc_t = u8;
-pub const speed_t = u64;
-pub const tcflag_t = u64;
-
-pub const termios = extern struct {
- iflag: tcflag_t, // input flags
- oflag: tcflag_t, // output flags
- cflag: tcflag_t, // control flags
- lflag: tcflag_t, // local flags
- cc: [NCCS]cc_t, // control chars
- ispeed: speed_t align(8), // input speed
- ospeed: speed_t, // output speed
-};
-
-pub const winsize = extern struct {
- ws_row: u16,
- ws_col: u16,
- ws_xpixel: u16,
- ws_ypixel: u16,
-};
-
-pub const TIOCGWINSZ = ior(0x40000000, 't', 104, @sizeOf(winsize));
-pub const IOCPARM_MASK = 0x1fff;
-
-fn ior(inout: u32, group: usize, num: usize, len: usize) usize {
- return (inout | ((len & IOCPARM_MASK) << 16) | ((group) << 8) | (num));
-}
-
-// CPU families mapping
-pub const CPUFAMILY = enum(u32) {
- UNKNOWN = 0,
- POWERPC_G3 = 0xcee41549,
- POWERPC_G4 = 0x77c184ae,
- POWERPC_G5 = 0xed76d8aa,
- INTEL_6_13 = 0xaa33392b,
- INTEL_PENRYN = 0x78ea4fbc,
- INTEL_NEHALEM = 0x6b5a4cd2,
- INTEL_WESTMERE = 0x573b5eec,
- INTEL_SANDYBRIDGE = 0x5490b78c,
- INTEL_IVYBRIDGE = 0x1f65e835,
- INTEL_HASWELL = 0x10b282dc,
- INTEL_BROADWELL = 0x582ed09c,
- INTEL_SKYLAKE = 0x37fc219f,
- INTEL_KABYLAKE = 0x0f817246,
- ARM_9 = 0xe73283ae,
- ARM_11 = 0x8ff620d8,
- ARM_XSCALE = 0x53b005f5,
- ARM_12 = 0xbd1b0ae9,
- ARM_13 = 0x0cc90e64,
- ARM_14 = 0x96077ef1,
- ARM_15 = 0xa8511bca,
- ARM_SWIFT = 0x1e2d6381,
- ARM_CYCLONE = 0x37a09642,
- ARM_TYPHOON = 0x2c91a47e,
- ARM_TWISTER = 0x92fb37c8,
- ARM_HURRICANE = 0x67ceee93,
- ARM_MONSOON_MISTRAL = 0xe81e7ef6,
- ARM_VORTEX_TEMPEST = 0x07d34b9f,
- ARM_LIGHTNING_THUNDER = 0x462504d2,
- ARM_FIRESTORM_ICESTORM = 0x1b588bb3,
- _,
-};
diff --git a/lib/std/os/bits/dragonfly.zig b/lib/std/os/bits/dragonfly.zig
deleted file mode 100644
index c7f6e88273..0000000000
--- a/lib/std/os/bits/dragonfly.zig
+++ /dev/null
@@ -1,1031 +0,0 @@
-const std = @import("../../std.zig");
-const maxInt = std.math.maxInt;
-
-pub fn S_ISCHR(m: u32) bool {
- return m & S_IFMT == S_IFCHR;
-}
-
-// See:
-// - https://gitweb.dragonflybsd.org/dragonfly.git/blob/HEAD:/include/unistd.h
-// - https://gitweb.dragonflybsd.org/dragonfly.git/blob/HEAD:/sys/sys/types.h
-// TODO: mode_t should probably be changed to a u16, audit pid_t/off_t as well
-pub const fd_t = c_int;
-pub const pid_t = c_int;
-pub const off_t = c_long;
-pub const mode_t = c_uint;
-pub const uid_t = u32;
-pub const gid_t = u32;
-pub const time_t = isize;
-pub const suseconds_t = c_long;
-
-pub const E = enum(u16) {
- /// No error occurred.
- SUCCESS = 0,
-
- PERM = 1,
- NOENT = 2,
- SRCH = 3,
- INTR = 4,
- IO = 5,
- NXIO = 6,
- @"2BIG" = 7,
- NOEXEC = 8,
- BADF = 9,
- CHILD = 10,
- DEADLK = 11,
- NOMEM = 12,
- ACCES = 13,
- FAULT = 14,
- NOTBLK = 15,
- BUSY = 16,
- EXIST = 17,
- XDEV = 18,
- NODEV = 19,
- NOTDIR = 20,
- ISDIR = 21,
- INVAL = 22,
- NFILE = 23,
- MFILE = 24,
- NOTTY = 25,
- TXTBSY = 26,
- FBIG = 27,
- NOSPC = 28,
- SPIPE = 29,
- ROFS = 30,
- MLINK = 31,
- PIPE = 32,
- DOM = 33,
- RANGE = 34,
- /// This code is also used for `WOULDBLOCK`.
- AGAIN = 35,
- INPROGRESS = 36,
- ALREADY = 37,
- NOTSOCK = 38,
- DESTADDRREQ = 39,
- MSGSIZE = 40,
- PROTOTYPE = 41,
- NOPROTOOPT = 42,
- PROTONOSUPPORT = 43,
- SOCKTNOSUPPORT = 44,
- /// This code is also used for `NOTSUP`.
- OPNOTSUPP = 45,
- PFNOSUPPORT = 46,
- AFNOSUPPORT = 47,
- ADDRINUSE = 48,
- ADDRNOTAVAIL = 49,
- NETDOWN = 50,
- NETUNREACH = 51,
- NETRESET = 52,
- CONNABORTED = 53,
- CONNRESET = 54,
- NOBUFS = 55,
- ISCONN = 56,
- NOTCONN = 57,
- SHUTDOWN = 58,
- TOOMANYREFS = 59,
- TIMEDOUT = 60,
- CONNREFUSED = 61,
- LOOP = 62,
- NAMETOOLONG = 63,
- HOSTDOWN = 64,
- HOSTUNREACH = 65,
- NOTEMPTY = 66,
- PROCLIM = 67,
- USERS = 68,
- DQUOT = 69,
- STALE = 70,
- REMOTE = 71,
- BADRPC = 72,
- RPCMISMATCH = 73,
- PROGUNAVAIL = 74,
- PROGMISMATCH = 75,
- PROCUNAVAIL = 76,
- NOLCK = 77,
- NOSYS = 78,
- FTYPE = 79,
- AUTH = 80,
- NEEDAUTH = 81,
- IDRM = 82,
- NOMSG = 83,
- OVERFLOW = 84,
- CANCELED = 85,
- ILSEQ = 86,
- NOATTR = 87,
- DOOFUS = 88,
- BADMSG = 89,
- MULTIHOP = 90,
- NOLINK = 91,
- PROTO = 92,
- NOMEDIUM = 93,
- ASYNC = 99,
- _,
-};
-
-pub const STDIN_FILENO = 0;
-pub const STDOUT_FILENO = 1;
-pub const STDERR_FILENO = 2;
-
-pub const PROT_NONE = 0;
-pub const PROT_READ = 1;
-pub const PROT_WRITE = 2;
-pub const PROT_EXEC = 4;
-
-pub const MAP_FILE = 0;
-pub const MAP_FAILED = @intToPtr(*c_void, maxInt(usize));
-pub const MAP_ANONYMOUS = MAP_ANON;
-pub const MAP_COPY = MAP_PRIVATE;
-pub const MAP_SHARED = 1;
-pub const MAP_PRIVATE = 2;
-pub const MAP_FIXED = 16;
-pub const MAP_RENAME = 32;
-pub const MAP_NORESERVE = 64;
-pub const MAP_INHERIT = 128;
-pub const MAP_NOEXTEND = 256;
-pub const MAP_HASSEMAPHORE = 512;
-pub const MAP_STACK = 1024;
-pub const MAP_NOSYNC = 2048;
-pub const MAP_ANON = 4096;
-pub const MAP_VPAGETABLE = 8192;
-pub const MAP_TRYFIXED = 65536;
-pub const MAP_NOCORE = 131072;
-pub const MAP_SIZEALIGN = 262144;
-
-pub const WNOHANG = 0x0001;
-pub const WUNTRACED = 0x0002;
-pub const WCONTINUED = 0x0004;
-pub const WSTOPPED = WUNTRACED;
-pub const WNOWAIT = 0x0008;
-pub const WEXITED = 0x0010;
-pub const WTRAPPED = 0x0020;
-
-pub const SA_ONSTACK = 0x0001;
-pub const SA_RESTART = 0x0002;
-pub const SA_RESETHAND = 0x0004;
-pub const SA_NODEFER = 0x0010;
-pub const SA_NOCLDWAIT = 0x0020;
-pub const SA_SIGINFO = 0x0040;
-
-pub const PATH_MAX = 1024;
-pub const IOV_MAX = KERN_IOV_MAX;
-
-pub const ino_t = c_ulong;
-
-pub const libc_stat = extern struct {
- ino: ino_t,
- nlink: c_uint,
- dev: c_uint,
- mode: c_ushort,
- padding1: u16,
- uid: uid_t,
- gid: gid_t,
- rdev: c_uint,
- atim: timespec,
- mtim: timespec,
- ctim: timespec,
- size: c_ulong,
- blocks: i64,
- blksize: u32,
- flags: u32,
- gen: u32,
- lspare: i32,
- qspare1: i64,
- qspare2: i64,
- pub fn atime(self: @This()) timespec {
- return self.atim;
- }
-
- pub fn mtime(self: @This()) timespec {
- return self.mtim;
- }
-
- pub fn ctime(self: @This()) timespec {
- return self.ctim;
- }
-};
-
-pub const timespec = extern struct {
- tv_sec: c_long,
- tv_nsec: c_long,
-};
-
-pub const timeval = extern struct {
- /// seconds
- tv_sec: time_t,
- /// microseconds
- tv_usec: suseconds_t,
-};
-
-pub const CTL_UNSPEC = 0;
-pub const CTL_KERN = 1;
-pub const CTL_VM = 2;
-pub const CTL_VFS = 3;
-pub const CTL_NET = 4;
-pub const CTL_DEBUG = 5;
-pub const CTL_HW = 6;
-pub const CTL_MACHDEP = 7;
-pub const CTL_USER = 8;
-pub const CTL_LWKT = 10;
-pub const CTL_MAXID = 11;
-pub const CTL_MAXNAME = 12;
-
-pub const KERN_PROC_ALL = 0;
-pub const KERN_OSTYPE = 1;
-pub const KERN_PROC_PID = 1;
-pub const KERN_OSRELEASE = 2;
-pub const KERN_PROC_PGRP = 2;
-pub const KERN_OSREV = 3;
-pub const KERN_PROC_SESSION = 3;
-pub const KERN_VERSION = 4;
-pub const KERN_PROC_TTY = 4;
-pub const KERN_MAXVNODES = 5;
-pub const KERN_PROC_UID = 5;
-pub const KERN_MAXPROC = 6;
-pub const KERN_PROC_RUID = 6;
-pub const KERN_MAXFILES = 7;
-pub const KERN_PROC_ARGS = 7;
-pub const KERN_ARGMAX = 8;
-pub const KERN_PROC_CWD = 8;
-pub const KERN_PROC_PATHNAME = 9;
-pub const KERN_SECURELVL = 9;
-pub const KERN_PROC_SIGTRAMP = 10;
-pub const KERN_HOSTNAME = 10;
-pub const KERN_HOSTID = 11;
-pub const KERN_CLOCKRATE = 12;
-pub const KERN_VNODE = 13;
-pub const KERN_PROC = 14;
-pub const KERN_FILE = 15;
-pub const KERN_PROC_FLAGMASK = 16;
-pub const KERN_PROF = 16;
-pub const KERN_PROC_FLAG_LWP = 16;
-pub const KERN_POSIX1 = 17;
-pub const KERN_NGROUPS = 18;
-pub const KERN_JOB_CONTROL = 19;
-pub const KERN_SAVED_IDS = 20;
-pub const KERN_BOOTTIME = 21;
-pub const KERN_NISDOMAINNAME = 22;
-pub const KERN_UPDATEINTERVAL = 23;
-pub const KERN_OSRELDATE = 24;
-pub const KERN_NTP_PLL = 25;
-pub const KERN_BOOTFILE = 26;
-pub const KERN_MAXFILESPERPROC = 27;
-pub const KERN_MAXPROCPERUID = 28;
-pub const KERN_DUMPDEV = 29;
-pub const KERN_IPC = 30;
-pub const KERN_DUMMY = 31;
-pub const KERN_PS_STRINGS = 32;
-pub const KERN_USRSTACK = 33;
-pub const KERN_LOGSIGEXIT = 34;
-pub const KERN_IOV_MAX = 35;
-pub const KERN_MAXPOSIXLOCKSPERUID = 36;
-pub const KERN_MAXID = 37;
-
-pub const HOST_NAME_MAX = 255;
-
-// access function
-pub const F_OK = 0; // test for existence of file
-pub const X_OK = 1; // test for execute or search permission
-pub const W_OK = 2; // test for write permission
-pub const R_OK = 4; // test for read permission
-
-pub const O_RDONLY = 0;
-pub const O_NDELAY = O_NONBLOCK;
-pub const O_WRONLY = 1;
-pub const O_RDWR = 2;
-pub const O_ACCMODE = 3;
-pub const O_NONBLOCK = 4;
-pub const O_APPEND = 8;
-pub const O_SHLOCK = 16;
-pub const O_EXLOCK = 32;
-pub const O_ASYNC = 64;
-pub const O_FSYNC = 128;
-pub const O_SYNC = 128;
-pub const O_NOFOLLOW = 256;
-pub const O_CREAT = 512;
-pub const O_TRUNC = 1024;
-pub const O_EXCL = 2048;
-pub const O_NOCTTY = 32768;
-pub const O_DIRECT = 65536;
-pub const O_CLOEXEC = 131072;
-pub const O_FBLOCKING = 262144;
-pub const O_FNONBLOCKING = 524288;
-pub const O_FAPPEND = 1048576;
-pub const O_FOFFSET = 2097152;
-pub const O_FSYNCWRITE = 4194304;
-pub const O_FASYNCWRITE = 8388608;
-pub const O_DIRECTORY = 134217728;
-
-pub const SEEK_SET = 0;
-pub const SEEK_CUR = 1;
-pub const SEEK_END = 2;
-pub const SEEK_DATA = 3;
-pub const SEEK_HOLE = 4;
-
-pub const F_ULOCK = 0;
-pub const F_LOCK = 1;
-pub const F_TLOCK = 2;
-pub const F_TEST = 3;
-
-pub const FD_CLOEXEC = 1;
-
-pub const AT_FDCWD = -328243;
-pub const AT_SYMLINK_NOFOLLOW = 1;
-pub const AT_REMOVEDIR = 2;
-pub const AT_EACCESS = 4;
-pub const AT_SYMLINK_FOLLOW = 8;
-
-pub fn WEXITSTATUS(s: u32) u8 {
- return @intCast(u8, (s & 0xff00) >> 8);
-}
-pub fn WTERMSIG(s: u32) u32 {
- return s & 0x7f;
-}
-pub fn WSTOPSIG(s: u32) u32 {
- return WEXITSTATUS(s);
-}
-pub fn WIFEXITED(s: u32) bool {
- return WTERMSIG(s) == 0;
-}
-pub fn WIFSTOPPED(s: u32) bool {
- return @truncate(u16, (((s & 0xffff) *% 0x10001) >> 8)) > 0x7f00;
-}
-pub fn WIFSIGNALED(s: u32) bool {
- return (s & 0xffff) -% 1 < 0xff;
-}
-
-pub const dirent = extern struct {
- d_fileno: c_ulong,
- d_namlen: u16,
- d_type: u8,
- d_unused1: u8,
- d_unused2: u32,
- d_name: [256]u8,
-
- pub fn reclen(self: dirent) u16 {
- return (@offsetOf(dirent, "d_name") + self.d_namlen + 1 + 7) & ~@as(u16, 7);
- }
-};
-
-pub const DT_UNKNOWN = 0;
-pub const DT_FIFO = 1;
-pub const DT_CHR = 2;
-pub const DT_DIR = 4;
-pub const DT_BLK = 6;
-pub const DT_REG = 8;
-pub const DT_LNK = 10;
-pub const DT_SOCK = 12;
-pub const DT_WHT = 14;
-pub const DT_DBF = 15;
-
-pub const CLOCK_REALTIME = 0;
-pub const CLOCK_VIRTUAL = 1;
-pub const CLOCK_PROF = 2;
-pub const CLOCK_MONOTONIC = 4;
-pub const CLOCK_UPTIME = 5;
-pub const CLOCK_UPTIME_PRECISE = 7;
-pub const CLOCK_UPTIME_FAST = 8;
-pub const CLOCK_REALTIME_PRECISE = 9;
-pub const CLOCK_REALTIME_FAST = 10;
-pub const CLOCK_MONOTONIC_PRECISE = 11;
-pub const CLOCK_MONOTONIC_FAST = 12;
-pub const CLOCK_SECOND = 13;
-pub const CLOCK_THREAD_CPUTIME_ID = 14;
-pub const CLOCK_PROCESS_CPUTIME_ID = 15;
-
-pub const sockaddr = extern struct {
- len: u8,
- family: u8,
- data: [14]u8,
-};
-
-pub const sockaddr_storage = std.x.os.Socket.Address.Native.Storage;
-
-pub const Kevent = extern struct {
- ident: usize,
- filter: c_short,
- flags: c_ushort,
- fflags: c_uint,
- data: isize,
- udata: usize,
-};
-
-pub const EVFILT_FS = -10;
-pub const EVFILT_USER = -9;
-pub const EVFILT_EXCEPT = -8;
-pub const EVFILT_TIMER = -7;
-pub const EVFILT_SIGNAL = -6;
-pub const EVFILT_PROC = -5;
-pub const EVFILT_VNODE = -4;
-pub const EVFILT_AIO = -3;
-pub const EVFILT_WRITE = -2;
-pub const EVFILT_READ = -1;
-pub const EVFILT_SYSCOUNT = 10;
-pub const EVFILT_MARKER = 15;
-
-pub const EV_ADD = 1;
-pub const EV_DELETE = 2;
-pub const EV_ENABLE = 4;
-pub const EV_DISABLE = 8;
-pub const EV_ONESHOT = 16;
-pub const EV_CLEAR = 32;
-pub const EV_RECEIPT = 64;
-pub const EV_DISPATCH = 128;
-pub const EV_NODATA = 4096;
-pub const EV_FLAG1 = 8192;
-pub const EV_ERROR = 16384;
-pub const EV_EOF = 32768;
-pub const EV_SYSFLAGS = 61440;
-
-pub const NOTE_FFNOP = 0;
-pub const NOTE_TRACK = 1;
-pub const NOTE_DELETE = 1;
-pub const NOTE_LOWAT = 1;
-pub const NOTE_TRACKERR = 2;
-pub const NOTE_OOB = 2;
-pub const NOTE_WRITE = 2;
-pub const NOTE_EXTEND = 4;
-pub const NOTE_CHILD = 4;
-pub const NOTE_ATTRIB = 8;
-pub const NOTE_LINK = 16;
-pub const NOTE_RENAME = 32;
-pub const NOTE_REVOKE = 64;
-pub const NOTE_PDATAMASK = 1048575;
-pub const NOTE_FFLAGSMASK = 16777215;
-pub const NOTE_TRIGGER = 16777216;
-pub const NOTE_EXEC = 536870912;
-pub const NOTE_FFAND = 1073741824;
-pub const NOTE_FORK = 1073741824;
-pub const NOTE_EXIT = 2147483648;
-pub const NOTE_FFOR = 2147483648;
-pub const NOTE_FFCTRLMASK = 3221225472;
-pub const NOTE_FFCOPY = 3221225472;
-pub const NOTE_PCTRLMASK = 4026531840;
-
-pub const stack_t = extern struct {
- ss_sp: [*]u8,
- ss_size: isize,
- ss_flags: i32,
-};
-
-pub const S_IREAD = S_IRUSR;
-pub const S_IEXEC = S_IXUSR;
-pub const S_IWRITE = S_IWUSR;
-pub const S_IXOTH = 1;
-pub const S_IWOTH = 2;
-pub const S_IROTH = 4;
-pub const S_IRWXO = 7;
-pub const S_IXGRP = 8;
-pub const S_IWGRP = 16;
-pub const S_IRGRP = 32;
-pub const S_IRWXG = 56;
-pub const S_IXUSR = 64;
-pub const S_IWUSR = 128;
-pub const S_IRUSR = 256;
-pub const S_IRWXU = 448;
-pub const S_ISTXT = 512;
-pub const S_BLKSIZE = 512;
-pub const S_ISVTX = 512;
-pub const S_ISGID = 1024;
-pub const S_ISUID = 2048;
-pub const S_IFIFO = 4096;
-pub const S_IFCHR = 8192;
-pub const S_IFDIR = 16384;
-pub const S_IFBLK = 24576;
-pub const S_IFREG = 32768;
-pub const S_IFDB = 36864;
-pub const S_IFLNK = 40960;
-pub const S_IFSOCK = 49152;
-pub const S_IFWHT = 57344;
-pub const S_IFMT = 61440;
-
-pub const SIG_DFL = @intToPtr(?Sigaction.sigaction_fn, 0);
-pub const SIG_IGN = @intToPtr(?Sigaction.sigaction_fn, 1);
-pub const SIG_ERR = @intToPtr(?Sigaction.sigaction_fn, maxInt(usize));
-pub const BADSIG = SIG_ERR;
-
-pub const SIG_BLOCK = 1;
-pub const SIG_UNBLOCK = 2;
-pub const SIG_SETMASK = 3;
-
-pub const SIGIOT = SIGABRT;
-pub const SIGHUP = 1;
-pub const SIGINT = 2;
-pub const SIGQUIT = 3;
-pub const SIGILL = 4;
-pub const SIGTRAP = 5;
-pub const SIGABRT = 6;
-pub const SIGEMT = 7;
-pub const SIGFPE = 8;
-pub const SIGKILL = 9;
-pub const SIGBUS = 10;
-pub const SIGSEGV = 11;
-pub const SIGSYS = 12;
-pub const SIGPIPE = 13;
-pub const SIGALRM = 14;
-pub const SIGTERM = 15;
-pub const SIGURG = 16;
-pub const SIGSTOP = 17;
-pub const SIGTSTP = 18;
-pub const SIGCONT = 19;
-pub const SIGCHLD = 20;
-pub const SIGTTIN = 21;
-pub const SIGTTOU = 22;
-pub const SIGIO = 23;
-pub const SIGXCPU = 24;
-pub const SIGXFSZ = 25;
-pub const SIGVTALRM = 26;
-pub const SIGPROF = 27;
-pub const SIGWINCH = 28;
-pub const SIGINFO = 29;
-pub const SIGUSR1 = 30;
-pub const SIGUSR2 = 31;
-pub const SIGTHR = 32;
-pub const SIGCKPT = 33;
-pub const SIGCKPTEXIT = 34;
-
-pub const siginfo_t = extern struct {
- signo: c_int,
- errno: c_int,
- code: c_int,
- pid: c_int,
- uid: uid_t,
- status: c_int,
- addr: ?*c_void,
- value: sigval,
- band: c_long,
- __spare__: [7]c_int,
-};
-
-pub const sigval = extern union {
- sival_int: c_int,
- sival_ptr: ?*c_void,
-};
-
-pub const _SIG_WORDS = 4;
-
-pub const sigset_t = extern struct {
- __bits: [_SIG_WORDS]c_uint,
-};
-
-pub const empty_sigset = sigset_t{ .__bits = [_]c_uint{0} ** _SIG_WORDS };
-
-pub const sig_atomic_t = c_int;
-
-pub const Sigaction = extern struct {
- pub const handler_fn = fn (c_int) callconv(.C) void;
- pub const sigaction_fn = fn (c_int, *const siginfo_t, ?*const c_void) callconv(.C) void;
-
- /// signal handler
- handler: extern union {
- handler: ?handler_fn,
- sigaction: ?sigaction_fn,
- },
- flags: c_uint,
- mask: sigset_t,
-};
-
-pub const sig_t = [*c]fn (c_int) callconv(.C) void;
-
-pub const SOCK_STREAM = 1;
-pub const SOCK_DGRAM = 2;
-pub const SOCK_RAW = 3;
-pub const SOCK_RDM = 4;
-pub const SOCK_SEQPACKET = 5;
-pub const SOCK_MAXADDRLEN = 255;
-pub const SOCK_CLOEXEC = 0x10000000;
-pub const SOCK_NONBLOCK = 0x20000000;
-
-pub const SO_DEBUG = 0x0001;
-pub const SO_ACCEPTCONN = 0x0002;
-pub const SO_REUSEADDR = 0x0004;
-pub const SO_KEEPALIVE = 0x0008;
-pub const SO_DONTROUTE = 0x0010;
-pub const SO_BROADCAST = 0x0020;
-pub const SO_USELOOPBACK = 0x0040;
-pub const SO_LINGER = 0x0080;
-pub const SO_OOBINLINE = 0x0100;
-pub const SO_REUSEPORT = 0x0200;
-pub const SO_TIMESTAMP = 0x0400;
-pub const SO_NOSIGPIPE = 0x0800;
-pub const SO_ACCEPTFILTER = 0x1000;
-pub const SO_RERROR = 0x2000;
-pub const SO_PASSCRED = 0x4000;
-
-pub const SO_SNDBUF = 0x1001;
-pub const SO_RCVBUF = 0x1002;
-pub const SO_SNDLOWAT = 0x1003;
-pub const SO_RCVLOWAT = 0x1004;
-pub const SO_SNDTIMEO = 0x1005;
-pub const SO_RCVTIMEO = 0x1006;
-pub const SO_ERROR = 0x1007;
-pub const SO_TYPE = 0x1008;
-pub const SO_SNDSPACE = 0x100a;
-pub const SO_CPUHINT = 0x1030;
-
-pub const SOL_SOCKET = 0xffff;
-
-pub const PF_INET6 = AF_INET6;
-pub const PF_IMPLINK = AF_IMPLINK;
-pub const PF_ROUTE = AF_ROUTE;
-pub const PF_ISO = AF_ISO;
-pub const PF_PIP = pseudo_AF_PIP;
-pub const PF_CHAOS = AF_CHAOS;
-pub const PF_DATAKIT = AF_DATAKIT;
-pub const PF_INET = AF_INET;
-pub const PF_APPLETALK = AF_APPLETALK;
-pub const PF_SIP = AF_SIP;
-pub const PF_OSI = AF_ISO;
-pub const PF_CNT = AF_CNT;
-pub const PF_LINK = AF_LINK;
-pub const PF_HYLINK = AF_HYLINK;
-pub const PF_MAX = AF_MAX;
-pub const PF_KEY = pseudo_AF_KEY;
-pub const PF_PUP = AF_PUP;
-pub const PF_COIP = AF_COIP;
-pub const PF_SNA = AF_SNA;
-pub const PF_LOCAL = AF_LOCAL;
-pub const PF_NETBIOS = AF_NETBIOS;
-pub const PF_NATM = AF_NATM;
-pub const PF_BLUETOOTH = AF_BLUETOOTH;
-pub const PF_UNSPEC = AF_UNSPEC;
-pub const PF_NETGRAPH = AF_NETGRAPH;
-pub const PF_ECMA = AF_ECMA;
-pub const PF_IPX = AF_IPX;
-pub const PF_DLI = AF_DLI;
-pub const PF_ATM = AF_ATM;
-pub const PF_CCITT = AF_CCITT;
-pub const PF_ISDN = AF_ISDN;
-pub const PF_RTIP = pseudo_AF_RTIP;
-pub const PF_LAT = AF_LAT;
-pub const PF_UNIX = PF_LOCAL;
-pub const PF_XTP = pseudo_AF_XTP;
-pub const PF_DECnet = AF_DECnet;
-
-pub const AF_UNSPEC = 0;
-pub const AF_OSI = AF_ISO;
-pub const AF_UNIX = AF_LOCAL;
-pub const AF_LOCAL = 1;
-pub const AF_INET = 2;
-pub const AF_IMPLINK = 3;
-pub const AF_PUP = 4;
-pub const AF_CHAOS = 5;
-pub const AF_NETBIOS = 6;
-pub const AF_ISO = 7;
-pub const AF_ECMA = 8;
-pub const AF_DATAKIT = 9;
-pub const AF_CCITT = 10;
-pub const AF_SNA = 11;
-pub const AF_DLI = 13;
-pub const AF_LAT = 14;
-pub const AF_HYLINK = 15;
-pub const AF_APPLETALK = 16;
-pub const AF_ROUTE = 17;
-pub const AF_LINK = 18;
-pub const AF_COIP = 20;
-pub const AF_CNT = 21;
-pub const AF_IPX = 23;
-pub const AF_SIP = 24;
-pub const AF_ISDN = 26;
-pub const AF_INET6 = 28;
-pub const AF_NATM = 29;
-pub const AF_ATM = 30;
-pub const AF_NETGRAPH = 32;
-pub const AF_BLUETOOTH = 33;
-pub const AF_MPLS = 34;
-pub const AF_MAX = 36;
-
-pub const in_port_t = u16;
-pub const sa_family_t = u8;
-pub const socklen_t = u32;
-
-pub const sockaddr_in = extern struct {
- len: u8 = @sizeOf(sockaddr_in),
- family: sa_family_t = AF_INET,
- port: in_port_t,
- addr: u32,
- zero: [8]u8 = [8]u8{ 0, 0, 0, 0, 0, 0, 0, 0 },
-};
-
-pub const sockaddr_in6 = extern struct {
- len: u8 = @sizeOf(sockaddr_in6),
- family: sa_family_t = AF_INET6,
- port: in_port_t,
- flowinfo: u32,
- addr: [16]u8,
- scope_id: u32,
-};
-
-pub const EAI = enum(c_int) {
- ADDRFAMILY = 1,
- AGAIN = 2,
- BADFLAGS = 3,
- FAIL = 4,
- FAMILY = 5,
- MEMORY = 6,
- NODATA = 7,
- NONAME = 8,
- SERVICE = 9,
- SOCKTYPE = 10,
- SYSTEM = 11,
- BADHINTS = 12,
- PROTOCOL = 13,
- OVERFLOW = 14,
- _,
-};
-
-pub const AI_PASSIVE = 0x00000001;
-pub const AI_CANONNAME = 0x00000002;
-pub const AI_NUMERICHOST = 0x00000004;
-pub const AI_NUMERICSERV = 0x00000008;
-pub const AI_MASK = AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST | AI_NUMERICSERV | AI_ADDRCONFIG;
-pub const AI_ALL = 0x00000100;
-pub const AI_V4MAPPED_CFG = 0x00000200;
-pub const AI_ADDRCONFIG = 0x00000400;
-pub const AI_V4MAPPED = 0x00000800;
-pub const AI_DEFAULT = AI_V4MAPPED_CFG | AI_ADDRCONFIG;
-
-pub const RTLD_LAZY = 1;
-pub const RTLD_NOW = 2;
-pub const RTLD_MODEMASK = 0x3;
-pub const RTLD_GLOBAL = 0x100;
-pub const RTLD_LOCAL = 0;
-pub const RTLD_TRACE = 0x200;
-pub const RTLD_NODELETE = 0x01000;
-pub const RTLD_NOLOAD = 0x02000;
-
-pub const RTLD_NEXT = @intToPtr(*c_void, @bitCast(usize, @as(isize, -1)));
-pub const RTLD_DEFAULT = @intToPtr(*c_void, @bitCast(usize, @as(isize, -2)));
-pub const RTLD_SELF = @intToPtr(*c_void, @bitCast(usize, @as(isize, -3)));
-pub const RTLD_ALL = @intToPtr(*c_void, @bitCast(usize, @as(isize, -4)));
-
-pub const dl_phdr_info = extern struct {
- dlpi_addr: usize,
- dlpi_name: ?[*:0]const u8,
- dlpi_phdr: [*]std.elf.Phdr,
- dlpi_phnum: u16,
-};
-pub const cmsghdr = extern struct {
- cmsg_len: socklen_t,
- cmsg_level: c_int,
- cmsg_type: c_int,
-};
-pub const msghdr = extern struct {
- msg_name: ?*c_void,
- msg_namelen: socklen_t,
- msg_iov: [*c]iovec,
- msg_iovlen: c_int,
- msg_control: ?*c_void,
- msg_controllen: socklen_t,
- msg_flags: c_int,
-};
-pub const cmsgcred = extern struct {
- cmcred_pid: pid_t,
- cmcred_uid: uid_t,
- cmcred_euid: uid_t,
- cmcred_gid: gid_t,
- cmcred_ngroups: c_short,
- cmcred_groups: [16]gid_t,
-};
-pub const sf_hdtr = extern struct {
- headers: [*c]iovec,
- hdr_cnt: c_int,
- trailers: [*c]iovec,
- trl_cnt: c_int,
-};
-
-pub const MS_SYNC = 0;
-pub const MS_ASYNC = 1;
-pub const MS_INVALIDATE = 2;
-
-pub const POSIX_MADV_SEQUENTIAL = 2;
-pub const POSIX_MADV_RANDOM = 1;
-pub const POSIX_MADV_DONTNEED = 4;
-pub const POSIX_MADV_NORMAL = 0;
-pub const POSIX_MADV_WILLNEED = 3;
-
-pub const MADV_SEQUENTIAL = 2;
-pub const MADV_CONTROL_END = MADV_SETMAP;
-pub const MADV_DONTNEED = 4;
-pub const MADV_RANDOM = 1;
-pub const MADV_WILLNEED = 3;
-pub const MADV_NORMAL = 0;
-pub const MADV_CONTROL_START = MADV_INVAL;
-pub const MADV_FREE = 5;
-pub const MADV_NOSYNC = 6;
-pub const MADV_AUTOSYNC = 7;
-pub const MADV_NOCORE = 8;
-pub const MADV_CORE = 9;
-pub const MADV_INVAL = 10;
-pub const MADV_SETMAP = 11;
-
-pub const F_DUPFD = 0;
-pub const F_GETFD = 1;
-pub const F_RDLCK = 1;
-pub const F_SETFD = 2;
-pub const F_UNLCK = 2;
-pub const F_WRLCK = 3;
-pub const F_GETFL = 3;
-pub const F_SETFL = 4;
-pub const F_GETOWN = 5;
-pub const F_SETOWN = 6;
-pub const F_GETLK = 7;
-pub const F_SETLK = 8;
-pub const F_SETLKW = 9;
-pub const F_DUP2FD = 10;
-pub const F_DUPFD_CLOEXEC = 17;
-pub const F_DUP2FD_CLOEXEC = 18;
-
-pub const LOCK_SH = 1;
-pub const LOCK_EX = 2;
-pub const LOCK_UN = 8;
-pub const LOCK_NB = 4;
-
-pub const Flock = extern struct {
- l_start: off_t,
- l_len: off_t,
- l_pid: pid_t,
- l_type: c_short,
- l_whence: c_short,
-};
-
-pub const addrinfo = extern struct {
- flags: i32,
- family: i32,
- socktype: i32,
- protocol: i32,
- addrlen: socklen_t,
- canonname: ?[*:0]u8,
- addr: ?*sockaddr,
- next: ?*addrinfo,
-};
-
-pub const IPPROTO_IP = 0;
-pub const IPPROTO_ICMP = 1;
-pub const IPPROTO_TCP = 6;
-pub const IPPROTO_UDP = 17;
-pub const IPPROTO_IPV6 = 41;
-pub const IPPROTO_RAW = 255;
-pub const IPPROTO_HOPOPTS = 0;
-pub const IPPROTO_IGMP = 2;
-pub const IPPROTO_GGP = 3;
-pub const IPPROTO_IPV4 = 4;
-pub const IPPROTO_IPIP = IPPROTO_IPV4;
-pub const IPPROTO_ST = 7;
-pub const IPPROTO_EGP = 8;
-pub const IPPROTO_PIGP = 9;
-pub const IPPROTO_RCCMON = 10;
-pub const IPPROTO_NVPII = 11;
-pub const IPPROTO_PUP = 12;
-pub const IPPROTO_ARGUS = 13;
-pub const IPPROTO_EMCON = 14;
-pub const IPPROTO_XNET = 15;
-pub const IPPROTO_CHAOS = 16;
-pub const IPPROTO_MUX = 18;
-pub const IPPROTO_MEAS = 19;
-pub const IPPROTO_HMP = 20;
-pub const IPPROTO_PRM = 21;
-pub const IPPROTO_IDP = 22;
-pub const IPPROTO_TRUNK1 = 23;
-pub const IPPROTO_TRUNK2 = 24;
-pub const IPPROTO_LEAF1 = 25;
-pub const IPPROTO_LEAF2 = 26;
-pub const IPPROTO_RDP = 27;
-pub const IPPROTO_IRTP = 28;
-pub const IPPROTO_TP = 29;
-pub const IPPROTO_BLT = 30;
-pub const IPPROTO_NSP = 31;
-pub const IPPROTO_INP = 32;
-pub const IPPROTO_SEP = 33;
-pub const IPPROTO_3PC = 34;
-pub const IPPROTO_IDPR = 35;
-pub const IPPROTO_XTP = 36;
-pub const IPPROTO_DDP = 37;
-pub const IPPROTO_CMTP = 38;
-pub const IPPROTO_TPXX = 39;
-pub const IPPROTO_IL = 40;
-pub const IPPROTO_SDRP = 42;
-pub const IPPROTO_ROUTING = 43;
-pub const IPPROTO_FRAGMENT = 44;
-pub const IPPROTO_IDRP = 45;
-pub const IPPROTO_RSVP = 46;
-pub const IPPROTO_GRE = 47;
-pub const IPPROTO_MHRP = 48;
-pub const IPPROTO_BHA = 49;
-pub const IPPROTO_ESP = 50;
-pub const IPPROTO_AH = 51;
-pub const IPPROTO_INLSP = 52;
-pub const IPPROTO_SWIPE = 53;
-pub const IPPROTO_NHRP = 54;
-pub const IPPROTO_MOBILE = 55;
-pub const IPPROTO_TLSP = 56;
-pub const IPPROTO_SKIP = 57;
-pub const IPPROTO_ICMPV6 = 58;
-pub const IPPROTO_NONE = 59;
-pub const IPPROTO_DSTOPTS = 60;
-pub const IPPROTO_AHIP = 61;
-pub const IPPROTO_CFTP = 62;
-pub const IPPROTO_HELLO = 63;
-pub const IPPROTO_SATEXPAK = 64;
-pub const IPPROTO_KRYPTOLAN = 65;
-pub const IPPROTO_RVD = 66;
-pub const IPPROTO_IPPC = 67;
-pub const IPPROTO_ADFS = 68;
-pub const IPPROTO_SATMON = 69;
-pub const IPPROTO_VISA = 70;
-pub const IPPROTO_IPCV = 71;
-pub const IPPROTO_CPNX = 72;
-pub const IPPROTO_CPHB = 73;
-pub const IPPROTO_WSN = 74;
-pub const IPPROTO_PVP = 75;
-pub const IPPROTO_BRSATMON = 76;
-pub const IPPROTO_ND = 77;
-pub const IPPROTO_WBMON = 78;
-pub const IPPROTO_WBEXPAK = 79;
-pub const IPPROTO_EON = 80;
-pub const IPPROTO_VMTP = 81;
-pub const IPPROTO_SVMTP = 82;
-pub const IPPROTO_VINES = 83;
-pub const IPPROTO_TTP = 84;
-pub const IPPROTO_IGP = 85;
-pub const IPPROTO_DGP = 86;
-pub const IPPROTO_TCF = 87;
-pub const IPPROTO_IGRP = 88;
-pub const IPPROTO_OSPFIGP = 89;
-pub const IPPROTO_SRPC = 90;
-pub const IPPROTO_LARP = 91;
-pub const IPPROTO_MTP = 92;
-pub const IPPROTO_AX25 = 93;
-pub const IPPROTO_IPEIP = 94;
-pub const IPPROTO_MICP = 95;
-pub const IPPROTO_SCCSP = 96;
-pub const IPPROTO_ETHERIP = 97;
-pub const IPPROTO_ENCAP = 98;
-pub const IPPROTO_APES = 99;
-pub const IPPROTO_GMTP = 100;
-pub const IPPROTO_IPCOMP = 108;
-pub const IPPROTO_PIM = 103;
-pub const IPPROTO_CARP = 112;
-pub const IPPROTO_PGM = 113;
-pub const IPPROTO_PFSYNC = 240;
-pub const IPPROTO_DIVERT = 254;
-pub const IPPROTO_MAX = 256;
-pub const IPPROTO_DONE = 257;
-pub const IPPROTO_UNKNOWN = 258;
-
-pub const rlimit_resource = enum(c_int) {
- CPU = 0,
- FSIZE = 1,
- DATA = 2,
- STACK = 3,
- CORE = 4,
- RSS = 5,
- MEMLOCK = 6,
- NPROC = 7,
- NOFILE = 8,
- SBSIZE = 9,
- VMEM = 10,
- POSIXLOCKS = 11,
- _,
-
- pub const AS: rlimit_resource = .VMEM;
-};
-
-pub const rlim_t = i64;
-
-/// No limit
-pub const RLIM_INFINITY: rlim_t = (1 << 63) - 1;
-
-pub const RLIM_SAVED_MAX = RLIM_INFINITY;
-pub const RLIM_SAVED_CUR = RLIM_INFINITY;
-
-pub const rlimit = extern struct {
- /// Soft limit
- cur: rlim_t,
- /// Hard limit
- max: rlim_t,
-};
-
-pub const SHUT_RD = 0;
-pub const SHUT_WR = 1;
-pub const SHUT_RDWR = 2;
-
-pub const nfds_t = u32;
-
-pub const pollfd = extern struct {
- fd: fd_t,
- events: i16,
- revents: i16,
-};
-
-/// Requestable events.
-pub const POLLIN = 0x0001;
-pub const POLLPRI = 0x0002;
-pub const POLLOUT = 0x0004;
-pub const POLLRDNORM = 0x0040;
-pub const POLLWRNORM = POLLOUT;
-pub const POLLRDBAND = 0x0080;
-pub const POLLWRBAND = 0x0100;
-
-/// These events are set if they occur regardless of whether they were requested.
-pub const POLLERR = 0x0008;
-pub const POLLHUP = 0x0010;
-pub const POLLNVAL = 0x0020;
diff --git a/lib/std/os/bits/freebsd.zig b/lib/std/os/bits/freebsd.zig
deleted file mode 100644
index 2badc0a2ec..0000000000
--- a/lib/std/os/bits/freebsd.zig
+++ /dev/null
@@ -1,1540 +0,0 @@
-const std = @import("../../std.zig");
-const builtin = @import("builtin");
-const maxInt = std.math.maxInt;
-
-pub const blksize_t = i32;
-pub const blkcnt_t = i64;
-pub const clockid_t = i32;
-pub const fsblkcnt_t = u64;
-pub const fsfilcnt_t = u64;
-pub const nlink_t = u64;
-pub const fd_t = i32;
-pub const pid_t = i32;
-pub const uid_t = u32;
-pub const gid_t = u32;
-pub const mode_t = u16;
-pub const off_t = i64;
-pub const ino_t = u64;
-pub const dev_t = u64;
-pub const time_t = i64;
-// The signedness is not constant across different architectures.
-pub const clock_t = isize;
-
-pub const socklen_t = u32;
-pub const suseconds_t = c_long;
-
-/// Renamed from `kevent` to `Kevent` to avoid conflict with function name.
-pub const Kevent = extern struct {
- ident: usize,
- filter: i16,
- flags: u16,
- fflags: u32,
- data: i64,
- udata: usize,
- // TODO ext
-};
-
-// Modes and flags for dlopen()
-// include/dlfcn.h
-
-/// Bind function calls lazily.
-pub const RTLD_LAZY = 1;
-
-/// Bind function calls immediately.
-pub const RTLD_NOW = 2;
-
-pub const RTLD_MODEMASK = 0x3;
-
-/// Make symbols globally available.
-pub const RTLD_GLOBAL = 0x100;
-
-/// Opposite of RTLD_GLOBAL, and the default.
-pub const RTLD_LOCAL = 0;
-
-/// Trace loaded objects and exit.
-pub const RTLD_TRACE = 0x200;
-
-/// Do not remove members.
-pub const RTLD_NODELETE = 0x01000;
-
-/// Do not load if not already loaded.
-pub const RTLD_NOLOAD = 0x02000;
-
-pub const dl_phdr_info = extern struct {
- dlpi_addr: usize,
- dlpi_name: ?[*:0]const u8,
- dlpi_phdr: [*]std.elf.Phdr,
- dlpi_phnum: u16,
-};
-
-pub const Flock = extern struct {
- l_start: off_t,
- l_len: off_t,
- l_pid: pid_t,
- l_type: i16,
- l_whence: i16,
- l_sysid: i32,
- __unused: [4]u8,
-};
-
-pub const msghdr = extern struct {
- /// optional address
- msg_name: ?*sockaddr,
-
- /// size of address
- msg_namelen: socklen_t,
-
- /// scatter/gather array
- msg_iov: [*]iovec,
-
- /// # elements in msg_iov
- msg_iovlen: i32,
-
- /// ancillary data
- msg_control: ?*c_void,
-
- /// ancillary data buffer len
- msg_controllen: socklen_t,
-
- /// flags on received message
- msg_flags: i32,
-};
-
-pub const msghdr_const = extern struct {
- /// optional address
- msg_name: ?*const sockaddr,
-
- /// size of address
- msg_namelen: socklen_t,
-
- /// scatter/gather array
- msg_iov: [*]iovec_const,
-
- /// # elements in msg_iov
- msg_iovlen: i32,
-
- /// ancillary data
- msg_control: ?*c_void,
-
- /// ancillary data buffer len
- msg_controllen: socklen_t,
-
- /// flags on received message
- msg_flags: i32,
-};
-
-pub const libc_stat = extern struct {
- dev: dev_t,
- ino: ino_t,
- nlink: nlink_t,
-
- mode: mode_t,
- __pad0: u16,
- uid: uid_t,
- gid: gid_t,
- __pad1: u32,
- rdev: dev_t,
-
- atim: timespec,
- mtim: timespec,
- ctim: timespec,
- birthtim: timespec,
-
- size: off_t,
- blocks: i64,
- blksize: isize,
- flags: u32,
- gen: u64,
- __spare: [10]u64,
-
- 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 const timespec = extern struct {
- tv_sec: isize,
- tv_nsec: isize,
-};
-
-pub const timeval = extern struct {
- /// seconds
- tv_sec: time_t,
- /// microseconds
- tv_usec: suseconds_t,
-};
-
-pub const dirent = extern struct {
- d_fileno: usize,
- d_off: i64,
- d_reclen: u16,
- d_type: u8,
- d_pad0: u8,
- d_namlen: u16,
- d_pad1: u16,
- d_name: [256]u8,
-
- pub fn reclen(self: dirent) u16 {
- return self.d_reclen;
- }
-};
-
-pub const in_port_t = u16;
-pub const sa_family_t = u8;
-
-pub const sockaddr = extern struct {
- /// total length
- len: u8,
-
- /// address family
- family: sa_family_t,
-
- /// actually longer; address value
- data: [14]u8,
-};
-
-pub const sockaddr_storage = std.x.os.Socket.Address.Native.Storage;
-
-pub const sockaddr_in = extern struct {
- len: u8 = @sizeOf(sockaddr_in),
- family: sa_family_t = AF_INET,
- port: in_port_t,
- addr: u32,
- zero: [8]u8 = [8]u8{ 0, 0, 0, 0, 0, 0, 0, 0 },
-};
-
-pub const sockaddr_in6 = extern struct {
- len: u8 = @sizeOf(sockaddr_in6),
- family: sa_family_t = AF_INET6,
- port: in_port_t,
- flowinfo: u32,
- addr: [16]u8,
- scope_id: u32,
-};
-
-pub const sockaddr_un = extern struct {
- len: u8 = @sizeOf(sockaddr_un),
- family: sa_family_t = AF_UNIX,
- path: [104]u8,
-};
-
-pub const CTL_KERN = 1;
-pub const CTL_DEBUG = 5;
-
-pub const KERN_PROC = 14; // struct: process entries
-pub const KERN_PROC_PATHNAME = 12; // path to executable
-pub const KERN_IOV_MAX = 35;
-
-pub const PATH_MAX = 1024;
-pub const IOV_MAX = KERN_IOV_MAX;
-
-pub const STDIN_FILENO = 0;
-pub const STDOUT_FILENO = 1;
-pub const STDERR_FILENO = 2;
-
-pub const PROT_NONE = 0;
-pub const PROT_READ = 1;
-pub const PROT_WRITE = 2;
-pub const PROT_EXEC = 4;
-
-pub const CLOCK_REALTIME = 0;
-pub const CLOCK_VIRTUAL = 1;
-pub const CLOCK_PROF = 2;
-pub const CLOCK_MONOTONIC = 4;
-pub const CLOCK_UPTIME = 5;
-pub const CLOCK_UPTIME_PRECISE = 7;
-pub const CLOCK_UPTIME_FAST = 8;
-pub const CLOCK_REALTIME_PRECISE = 9;
-pub const CLOCK_REALTIME_FAST = 10;
-pub const CLOCK_MONOTONIC_PRECISE = 11;
-pub const CLOCK_MONOTONIC_FAST = 12;
-pub const CLOCK_SECOND = 13;
-pub const CLOCK_THREAD_CPUTIME_ID = 14;
-pub const CLOCK_PROCESS_CPUTIME_ID = 15;
-
-pub const MAP_FAILED = @intToPtr(*c_void, maxInt(usize));
-pub const MAP_SHARED = 0x0001;
-pub const MAP_PRIVATE = 0x0002;
-pub const MAP_FIXED = 0x0010;
-pub const MAP_STACK = 0x0400;
-pub const MAP_NOSYNC = 0x0800;
-pub const MAP_ANON = 0x1000;
-pub const MAP_ANONYMOUS = MAP_ANON;
-pub const MAP_FILE = 0;
-
-pub const MAP_GUARD = 0x00002000;
-pub const MAP_EXCL = 0x00004000;
-pub const MAP_NOCORE = 0x00020000;
-pub const MAP_PREFAULT_READ = 0x00040000;
-pub const MAP_32BIT = 0x00080000;
-
-pub const WNOHANG = 1;
-pub const WUNTRACED = 2;
-pub const WSTOPPED = WUNTRACED;
-pub const WCONTINUED = 4;
-pub const WNOWAIT = 8;
-pub const WEXITED = 16;
-pub const WTRAPPED = 32;
-
-pub const SA_ONSTACK = 0x0001;
-pub const SA_RESTART = 0x0002;
-pub const SA_RESETHAND = 0x0004;
-pub const SA_NOCLDSTOP = 0x0008;
-pub const SA_NODEFER = 0x0010;
-pub const SA_NOCLDWAIT = 0x0020;
-pub const SA_SIGINFO = 0x0040;
-
-pub const SIGHUP = 1;
-pub const SIGINT = 2;
-pub const SIGQUIT = 3;
-pub const SIGILL = 4;
-pub const SIGTRAP = 5;
-pub const SIGABRT = 6;
-pub const SIGIOT = SIGABRT;
-pub const SIGEMT = 7;
-pub const SIGFPE = 8;
-pub const SIGKILL = 9;
-pub const SIGBUS = 10;
-pub const SIGSEGV = 11;
-pub const SIGSYS = 12;
-pub const SIGPIPE = 13;
-pub const SIGALRM = 14;
-pub const SIGTERM = 15;
-pub const SIGURG = 16;
-pub const SIGSTOP = 17;
-pub const SIGTSTP = 18;
-pub const SIGCONT = 19;
-pub const SIGCHLD = 20;
-pub const SIGTTIN = 21;
-pub const SIGTTOU = 22;
-pub const SIGIO = 23;
-pub const SIGXCPU = 24;
-pub const SIGXFSZ = 25;
-pub const SIGVTALRM = 26;
-pub const SIGPROF = 27;
-pub const SIGWINCH = 28;
-pub const SIGINFO = 29;
-pub const SIGUSR1 = 30;
-pub const SIGUSR2 = 31;
-pub const SIGTHR = 32;
-pub const SIGLWP = SIGTHR;
-pub const SIGLIBRT = 33;
-
-pub const SIGRTMIN = 65;
-pub const SIGRTMAX = 126;
-
-// access function
-pub const F_OK = 0; // test for existence of file
-pub const X_OK = 1; // test for execute or search permission
-pub const W_OK = 2; // test for write permission
-pub const R_OK = 4; // test for read permission
-
-pub const O_RDONLY = 0x0000;
-pub const O_WRONLY = 0x0001;
-pub const O_RDWR = 0x0002;
-pub const O_ACCMODE = 0x0003;
-
-pub const O_SHLOCK = 0x0010;
-pub const O_EXLOCK = 0x0020;
-
-pub const O_CREAT = 0x0200;
-pub const O_EXCL = 0x0800;
-pub const O_NOCTTY = 0x8000;
-pub const O_TRUNC = 0x0400;
-pub const O_APPEND = 0x0008;
-pub const O_NONBLOCK = 0x0004;
-pub const O_DSYNC = 0o10000;
-pub const O_SYNC = 0x0080;
-pub const O_RSYNC = 0o4010000;
-pub const O_DIRECTORY = 0x20000;
-pub const O_NOFOLLOW = 0x0100;
-pub const O_CLOEXEC = 0x00100000;
-
-pub const O_ASYNC = 0x0040;
-pub const O_DIRECT = 0x00010000;
-pub const O_NOATIME = 0o1000000;
-pub const O_PATH = 0o10000000;
-pub const O_TMPFILE = 0o20200000;
-pub const O_NDELAY = O_NONBLOCK;
-
-pub const F_DUPFD = 0;
-pub const F_GETFD = 1;
-pub const F_SETFD = 2;
-pub const F_GETFL = 3;
-pub const F_SETFL = 4;
-
-pub const F_GETOWN = 5;
-pub const F_SETOWN = 6;
-
-pub const F_GETLK = 11;
-pub const F_SETLK = 12;
-pub const F_SETLKW = 13;
-
-pub const F_RDLCK = 1;
-pub const F_WRLCK = 3;
-pub const F_UNLCK = 2;
-
-pub const LOCK_SH = 1;
-pub const LOCK_EX = 2;
-pub const LOCK_UN = 8;
-pub const LOCK_NB = 4;
-
-pub const F_SETOWN_EX = 15;
-pub const F_GETOWN_EX = 16;
-
-pub const F_GETOWNER_UIDS = 17;
-
-pub const FD_CLOEXEC = 1;
-
-pub const SEEK_SET = 0;
-pub const SEEK_CUR = 1;
-pub const SEEK_END = 2;
-
-pub const SIG_BLOCK = 1;
-pub const SIG_UNBLOCK = 2;
-pub const SIG_SETMASK = 3;
-
-pub const SOCK_STREAM = 1;
-pub const SOCK_DGRAM = 2;
-pub const SOCK_RAW = 3;
-pub const SOCK_RDM = 4;
-pub const SOCK_SEQPACKET = 5;
-
-pub const SOCK_CLOEXEC = 0x10000000;
-pub const SOCK_NONBLOCK = 0x20000000;
-
-pub const SO_DEBUG = 0x00000001;
-pub const SO_ACCEPTCONN = 0x00000002;
-pub const SO_REUSEADDR = 0x00000004;
-pub const SO_KEEPALIVE = 0x00000008;
-pub const SO_DONTROUTE = 0x00000010;
-pub const SO_BROADCAST = 0x00000020;
-pub const SO_USELOOPBACK = 0x00000040;
-pub const SO_LINGER = 0x00000080;
-pub const SO_OOBINLINE = 0x00000100;
-pub const SO_REUSEPORT = 0x00000200;
-pub const SO_TIMESTAMP = 0x00000400;
-pub const SO_NOSIGPIPE = 0x00000800;
-pub const SO_ACCEPTFILTER = 0x00001000;
-pub const SO_BINTIME = 0x00002000;
-pub const SO_NO_OFFLOAD = 0x00004000;
-pub const SO_NO_DDP = 0x00008000;
-pub const SO_REUSEPORT_LB = 0x00010000;
-
-pub const SO_SNDBUF = 0x1001;
-pub const SO_RCVBUF = 0x1002;
-pub const SO_SNDLOWAT = 0x1003;
-pub const SO_RCVLOWAT = 0x1004;
-pub const SO_SNDTIMEO = 0x1005;
-pub const SO_RCVTIMEO = 0x1006;
-pub const SO_ERROR = 0x1007;
-pub const SO_TYPE = 0x1008;
-pub const SO_LABEL = 0x1009;
-pub const SO_PEERLABEL = 0x1010;
-pub const SO_LISTENQLIMIT = 0x1011;
-pub const SO_LISTENQLEN = 0x1012;
-pub const SO_LISTENINCQLEN = 0x1013;
-pub const SO_SETFIB = 0x1014;
-pub const SO_USER_COOKIE = 0x1015;
-pub const SO_PROTOCOL = 0x1016;
-pub const SO_PROTOTYPE = SO_PROTOCOL;
-pub const SO_TS_CLOCK = 0x1017;
-pub const SO_MAX_PACING_RATE = 0x1018;
-pub const SO_DOMAIN = 0x1019;
-
-pub const SOL_SOCKET = 0xffff;
-
-pub const PF_UNSPEC = AF_UNSPEC;
-pub const PF_LOCAL = AF_LOCAL;
-pub const PF_UNIX = PF_LOCAL;
-pub const PF_INET = AF_INET;
-pub const PF_IMPLINK = AF_IMPLINK;
-pub const PF_PUP = AF_PUP;
-pub const PF_CHAOS = AF_CHAOS;
-pub const PF_NETBIOS = AF_NETBIOS;
-pub const PF_ISO = AF_ISO;
-pub const PF_OSI = AF_ISO;
-pub const PF_ECMA = AF_ECMA;
-pub const PF_DATAKIT = AF_DATAKIT;
-pub const PF_CCITT = AF_CCITT;
-pub const PF_DECnet = AF_DECnet;
-pub const PF_DLI = AF_DLI;
-pub const PF_LAT = AF_LAT;
-pub const PF_HYLINK = AF_HYLINK;
-pub const PF_APPLETALK = AF_APPLETALK;
-pub const PF_ROUTE = AF_ROUTE;
-pub const PF_LINK = AF_LINK;
-pub const PF_XTP = pseudo_AF_XTP;
-pub const PF_COIP = AF_COIP;
-pub const PF_CNT = AF_CNT;
-pub const PF_SIP = AF_SIP;
-pub const PF_IPX = AF_IPX;
-pub const PF_RTIP = pseudo_AF_RTIP;
-pub const PF_PIP = psuedo_AF_PIP;
-pub const PF_ISDN = AF_ISDN;
-pub const PF_KEY = pseudo_AF_KEY;
-pub const PF_INET6 = pseudo_AF_INET6;
-pub const PF_NATM = AF_NATM;
-pub const PF_ATM = AF_ATM;
-pub const PF_NETGRAPH = AF_NETGRAPH;
-pub const PF_SLOW = AF_SLOW;
-pub const PF_SCLUSTER = AF_SCLUSTER;
-pub const PF_ARP = AF_ARP;
-pub const PF_BLUETOOTH = AF_BLUETOOTH;
-pub const PF_IEEE80211 = AF_IEEE80211;
-pub const PF_INET_SDP = AF_INET_SDP;
-pub const PF_INET6_SDP = AF_INET6_SDP;
-pub const PF_MAX = AF_MAX;
-
-pub const AF_UNSPEC = 0;
-pub const AF_UNIX = 1;
-pub const AF_LOCAL = AF_UNIX;
-pub const AF_FILE = AF_LOCAL;
-pub const AF_INET = 2;
-pub const AF_IMPLINK = 3;
-pub const AF_PUP = 4;
-pub const AF_CHAOS = 5;
-pub const AF_NETBIOS = 6;
-pub const AF_ISO = 7;
-pub const AF_OSI = AF_ISO;
-pub const AF_ECMA = 8;
-pub const AF_DATAKIT = 9;
-pub const AF_CCITT = 10;
-pub const AF_SNA = 11;
-pub const AF_DECnet = 12;
-pub const AF_DLI = 13;
-pub const AF_LAT = 14;
-pub const AF_HYLINK = 15;
-pub const AF_APPLETALK = 16;
-pub const AF_ROUTE = 17;
-pub const AF_LINK = 18;
-pub const pseudo_AF_XTP = 19;
-pub const AF_COIP = 20;
-pub const AF_CNT = 21;
-pub const pseudo_AF_RTIP = 22;
-pub const AF_IPX = 23;
-pub const AF_SIP = 24;
-pub const pseudo_AF_PIP = 25;
-pub const AF_ISDN = 26;
-pub const AF_E164 = AF_ISDN;
-pub const pseudo_AF_KEY = 27;
-pub const AF_INET6 = 28;
-pub const AF_NATM = 29;
-pub const AF_ATM = 30;
-pub const pseudo_AF_HDRCMPLT = 31;
-pub const AF_NETGRAPH = 32;
-pub const AF_SLOW = 33;
-pub const AF_SCLUSTER = 34;
-pub const AF_ARP = 35;
-pub const AF_BLUETOOTH = 36;
-pub const AF_IEEE80211 = 37;
-pub const AF_INET_SDP = 40;
-pub const AF_INET6_SDP = 42;
-pub const AF_MAX = 42;
-
-pub const DT_UNKNOWN = 0;
-pub const DT_FIFO = 1;
-pub const DT_CHR = 2;
-pub const DT_DIR = 4;
-pub const DT_BLK = 6;
-pub const DT_REG = 8;
-pub const DT_LNK = 10;
-pub const DT_SOCK = 12;
-pub const DT_WHT = 14;
-
-/// add event to kq (implies enable)
-pub const EV_ADD = 0x0001;
-
-/// delete event from kq
-pub const EV_DELETE = 0x0002;
-
-/// enable event
-pub const EV_ENABLE = 0x0004;
-
-/// disable event (not reported)
-pub const EV_DISABLE = 0x0008;
-
-/// only report one occurrence
-pub const EV_ONESHOT = 0x0010;
-
-/// clear event state after reporting
-pub const EV_CLEAR = 0x0020;
-
-/// error, event data contains errno
-pub const EV_ERROR = 0x4000;
-
-/// force immediate event output
-/// ... with or without EV_ERROR
-/// ... use KEVENT_FLAG_ERROR_EVENTS
-/// on syscalls supporting flags
-pub const EV_RECEIPT = 0x0040;
-
-/// disable event after reporting
-pub const EV_DISPATCH = 0x0080;
-
-pub const EVFILT_READ = -1;
-pub const EVFILT_WRITE = -2;
-
-/// attached to aio requests
-pub const EVFILT_AIO = -3;
-
-/// attached to vnodes
-pub const EVFILT_VNODE = -4;
-
-/// attached to struct proc
-pub const EVFILT_PROC = -5;
-
-/// attached to struct proc
-pub const EVFILT_SIGNAL = -6;
-
-/// timers
-pub const EVFILT_TIMER = -7;
-
-/// Process descriptors
-pub const EVFILT_PROCDESC = -8;
-
-/// Filesystem events
-pub const EVFILT_FS = -9;
-
-pub const EVFILT_LIO = -10;
-
-/// User events
-pub const EVFILT_USER = -11;
-
-/// Sendfile events
-pub const EVFILT_SENDFILE = -12;
-
-pub const EVFILT_EMPTY = -13;
-
-/// On input, NOTE_TRIGGER causes the event to be triggered for output.
-pub const NOTE_TRIGGER = 0x01000000;
-
-/// ignore input fflags
-pub const NOTE_FFNOP = 0x00000000;
-
-/// and fflags
-pub const NOTE_FFAND = 0x40000000;
-
-/// or fflags
-pub const NOTE_FFOR = 0x80000000;
-
-/// copy fflags
-pub const NOTE_FFCOPY = 0xc0000000;
-
-/// mask for operations
-pub const NOTE_FFCTRLMASK = 0xc0000000;
-pub const NOTE_FFLAGSMASK = 0x00ffffff;
-
-/// low water mark
-pub const NOTE_LOWAT = 0x00000001;
-
-/// behave like poll()
-pub const NOTE_FILE_POLL = 0x00000002;
-
-/// vnode was removed
-pub const NOTE_DELETE = 0x00000001;
-
-/// data contents changed
-pub const NOTE_WRITE = 0x00000002;
-
-/// size increased
-pub const NOTE_EXTEND = 0x00000004;
-
-/// attributes changed
-pub const NOTE_ATTRIB = 0x00000008;
-
-/// link count changed
-pub const NOTE_LINK = 0x00000010;
-
-/// vnode was renamed
-pub const NOTE_RENAME = 0x00000020;
-
-/// vnode access was revoked
-pub const NOTE_REVOKE = 0x00000040;
-
-/// vnode was opened
-pub const NOTE_OPEN = 0x00000080;
-
-/// file closed, fd did not allow write
-pub const NOTE_CLOSE = 0x00000100;
-
-/// file closed, fd did allow write
-pub const NOTE_CLOSE_WRITE = 0x00000200;
-
-/// file was read
-pub const NOTE_READ = 0x00000400;
-
-/// process exited
-pub const NOTE_EXIT = 0x80000000;
-
-/// process forked
-pub const NOTE_FORK = 0x40000000;
-
-/// process exec'd
-pub const NOTE_EXEC = 0x20000000;
-
-/// mask for signal & exit status
-pub const NOTE_PDATAMASK = 0x000fffff;
-pub const NOTE_PCTRLMASK = (~NOTE_PDATAMASK);
-
-/// data is seconds
-pub const NOTE_SECONDS = 0x00000001;
-
-/// data is milliseconds
-pub const NOTE_MSECONDS = 0x00000002;
-
-/// data is microseconds
-pub const NOTE_USECONDS = 0x00000004;
-
-/// data is nanoseconds
-pub const NOTE_NSECONDS = 0x00000008;
-
-/// timeout is absolute
-pub const NOTE_ABSTIME = 0x00000010;
-
-pub const TIOCEXCL = 0x2000740d;
-pub const TIOCNXCL = 0x2000740e;
-pub const TIOCSCTTY = 0x20007461;
-pub const TIOCGPGRP = 0x40047477;
-pub const TIOCSPGRP = 0x80047476;
-pub const TIOCOUTQ = 0x40047473;
-pub const TIOCSTI = 0x80017472;
-pub const TIOCGWINSZ = 0x40087468;
-pub const TIOCSWINSZ = 0x80087467;
-pub const TIOCMGET = 0x4004746a;
-pub const TIOCMBIS = 0x8004746c;
-pub const TIOCMBIC = 0x8004746b;
-pub const TIOCMSET = 0x8004746d;
-pub const FIONREAD = 0x4004667f;
-pub const TIOCCONS = 0x80047462;
-pub const TIOCPKT = 0x80047470;
-pub const FIONBIO = 0x8004667e;
-pub const TIOCNOTTY = 0x20007471;
-pub const TIOCSETD = 0x8004741b;
-pub const TIOCGETD = 0x4004741a;
-pub const TIOCSBRK = 0x2000747b;
-pub const TIOCCBRK = 0x2000747a;
-pub const TIOCGSID = 0x40047463;
-pub const TIOCGPTN = 0x4004740f;
-pub const TIOCSIG = 0x2004745f;
-
-pub fn WEXITSTATUS(s: u32) u8 {
- return @intCast(u8, (s & 0xff00) >> 8);
-}
-pub fn WTERMSIG(s: u32) u32 {
- return s & 0x7f;
-}
-pub fn WSTOPSIG(s: u32) u32 {
- return WEXITSTATUS(s);
-}
-pub fn WIFEXITED(s: u32) bool {
- return WTERMSIG(s) == 0;
-}
-pub fn WIFSTOPPED(s: u32) bool {
- return @truncate(u16, (((s & 0xffff) *% 0x10001) >> 8)) > 0x7f00;
-}
-pub fn WIFSIGNALED(s: u32) bool {
- return (s & 0xffff) -% 1 < 0xff;
-}
-
-pub const winsize = extern struct {
- ws_row: u16,
- ws_col: u16,
- ws_xpixel: u16,
- ws_ypixel: u16,
-};
-
-const NSIG = 32;
-
-pub const SIG_DFL = @intToPtr(?Sigaction.sigaction_fn, 0);
-pub const SIG_IGN = @intToPtr(?Sigaction.sigaction_fn, 1);
-pub const SIG_ERR = @intToPtr(?Sigaction.sigaction_fn, maxInt(usize));
-
-/// Renamed from `sigaction` to `Sigaction` to avoid conflict with the syscall.
-pub const Sigaction = extern struct {
- pub const handler_fn = fn (c_int) callconv(.C) void;
- pub const sigaction_fn = fn (c_int, *const siginfo_t, ?*const c_void) callconv(.C) void;
-
- /// signal handler
- handler: extern union {
- handler: ?handler_fn,
- sigaction: ?sigaction_fn,
- },
-
- /// see signal options
- flags: c_uint,
-
- /// signal mask to apply
- mask: sigset_t,
-};
-
-pub const siginfo_t = extern struct {
- signo: c_int,
- errno: c_int,
- code: c_int,
- pid: pid_t,
- uid: uid_t,
- status: c_int,
- addr: ?*c_void,
- value: sigval,
- reason: extern union {
- fault: extern struct {
- trapno: c_int,
- },
- timer: extern struct {
- timerid: c_int,
- overrun: c_int,
- },
- mesgq: extern struct {
- mqd: c_int,
- },
- poll: extern struct {
- band: c_long,
- },
- spare: extern struct {
- spare1: c_long,
- spare2: [7]c_int,
- },
- },
-};
-
-pub const sigval = extern union {
- int: c_int,
- ptr: ?*c_void,
-};
-
-pub const _SIG_WORDS = 4;
-pub const _SIG_MAXSIG = 128;
-
-pub inline fn _SIG_IDX(sig: usize) usize {
- return sig - 1;
-}
-pub inline fn _SIG_WORD(sig: usize) usize {
- return_SIG_IDX(sig) >> 5;
-}
-pub inline fn _SIG_BIT(sig: usize) usize {
- return 1 << (_SIG_IDX(sig) & 31);
-}
-pub inline fn _SIG_VALID(sig: usize) usize {
- return sig <= _SIG_MAXSIG and sig > 0;
-}
-
-pub const sigset_t = extern struct {
- __bits: [_SIG_WORDS]u32,
-};
-
-pub const empty_sigset = sigset_t{ .__bits = [_]u32{0} ** _SIG_WORDS };
-
-pub usingnamespace switch (builtin.target.cpu.arch) {
- .x86_64 => struct {
- pub const ucontext_t = extern struct {
- sigmask: sigset_t,
- mcontext: mcontext_t,
- link: ?*ucontext_t,
- stack: stack_t,
- flags: c_int,
- __spare__: [4]c_int,
- };
-
- /// XXX x86_64 specific
- pub const mcontext_t = 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,
- };
- },
- else => struct {},
-};
-
-pub const E = enum(u16) {
- /// No error occurred.
- SUCCESS = 0,
-
- PERM = 1, // Operation not permitted
- NOENT = 2, // No such file or directory
- SRCH = 3, // No such process
- INTR = 4, // Interrupted system call
- IO = 5, // Input/output error
- NXIO = 6, // Device not configured
- @"2BIG" = 7, // Argument list too long
- NOEXEC = 8, // Exec format error
- BADF = 9, // Bad file descriptor
- CHILD = 10, // No child processes
- DEADLK = 11, // Resource deadlock avoided
- // 11 was AGAIN
- NOMEM = 12, // Cannot allocate memory
- ACCES = 13, // Permission denied
- FAULT = 14, // Bad address
- NOTBLK = 15, // Block device required
- BUSY = 16, // Device busy
- EXIST = 17, // File exists
- XDEV = 18, // Cross-device link
- NODEV = 19, // Operation not supported by device
- NOTDIR = 20, // Not a directory
- ISDIR = 21, // Is a directory
- INVAL = 22, // Invalid argument
- NFILE = 23, // Too many open files in system
- MFILE = 24, // Too many open files
- NOTTY = 25, // Inappropriate ioctl for device
- TXTBSY = 26, // Text file busy
- FBIG = 27, // File too large
- NOSPC = 28, // No space left on device
- SPIPE = 29, // Illegal seek
- ROFS = 30, // Read-only filesystem
- MLINK = 31, // Too many links
- PIPE = 32, // Broken pipe
-
- // math software
- DOM = 33, // Numerical argument out of domain
- RANGE = 34, // Result too large
-
- // non-blocking and interrupt i/o
-
- /// Resource temporarily unavailable
- /// This code is also used for `WOULDBLOCK`: operation would block.
- AGAIN = 35,
- INPROGRESS = 36, // Operation now in progress
- ALREADY = 37, // Operation already in progress
-
- // ipc/network software -- argument errors
- NOTSOCK = 38, // Socket operation on non-socket
- DESTADDRREQ = 39, // Destination address required
- MSGSIZE = 40, // Message too long
- PROTOTYPE = 41, // Protocol wrong type for socket
- NOPROTOOPT = 42, // Protocol not available
- PROTONOSUPPORT = 43, // Protocol not supported
- SOCKTNOSUPPORT = 44, // Socket type not supported
- /// Operation not supported
- /// This code is also used for `NOTSUP`.
- OPNOTSUPP = 45,
- PFNOSUPPORT = 46, // Protocol family not supported
- AFNOSUPPORT = 47, // Address family not supported by protocol family
- ADDRINUSE = 48, // Address already in use
- ADDRNOTAVAIL = 49, // Can't assign requested address
-
- // ipc/network software -- operational errors
- NETDOWN = 50, // Network is down
- NETUNREACH = 51, // Network is unreachable
- NETRESET = 52, // Network dropped connection on reset
- CONNABORTED = 53, // Software caused connection abort
- CONNRESET = 54, // Connection reset by peer
- NOBUFS = 55, // No buffer space available
- ISCONN = 56, // Socket is already connected
- NOTCONN = 57, // Socket is not connected
- SHUTDOWN = 58, // Can't send after socket shutdown
- TOOMANYREFS = 59, // Too many references: can't splice
- TIMEDOUT = 60, // Operation timed out
- CONNREFUSED = 61, // Connection refused
-
- LOOP = 62, // Too many levels of symbolic links
- NAMETOOLONG = 63, // File name too long
-
- // should be rearranged
- HOSTDOWN = 64, // Host is down
- HOSTUNREACH = 65, // No route to host
- NOTEMPTY = 66, // Directory not empty
-
- // quotas & mush
- PROCLIM = 67, // Too many processes
- USERS = 68, // Too many users
- DQUOT = 69, // Disc quota exceeded
-
- // Network File System
- STALE = 70, // Stale NFS file handle
- REMOTE = 71, // Too many levels of remote in path
- BADRPC = 72, // RPC struct is bad
- RPCMISMATCH = 73, // RPC version wrong
- PROGUNAVAIL = 74, // RPC prog. not avail
- PROGMISMATCH = 75, // Program version wrong
- PROCUNAVAIL = 76, // Bad procedure for program
-
- NOLCK = 77, // No locks available
- NOSYS = 78, // Function not implemented
-
- FTYPE = 79, // Inappropriate file type or format
- AUTH = 80, // Authentication error
- NEEDAUTH = 81, // Need authenticator
- IDRM = 82, // Identifier removed
- NOMSG = 83, // No message of desired type
- OVERFLOW = 84, // Value too large to be stored in data type
- CANCELED = 85, // Operation canceled
- ILSEQ = 86, // Illegal byte sequence
- NOATTR = 87, // Attribute not found
-
- DOOFUS = 88, // Programming error
-
- BADMSG = 89, // Bad message
- MULTIHOP = 90, // Multihop attempted
- NOLINK = 91, // Link has been severed
- PROTO = 92, // Protocol error
-
- NOTCAPABLE = 93, // Capabilities insufficient
- CAPMODE = 94, // Not permitted in capability mode
- NOTRECOVERABLE = 95, // State not recoverable
- OWNERDEAD = 96, // Previous owner died
- _,
-};
-
-pub const MINSIGSTKSZ = switch (builtin.target.cpu.arch) {
- .i386, .x86_64 => 2048,
- .arm, .aarch64 => 4096,
- else => @compileError("MINSIGSTKSZ not defined for this architecture"),
-};
-pub const SIGSTKSZ = MINSIGSTKSZ + 32768;
-
-pub const SS_ONSTACK = 1;
-pub const SS_DISABLE = 4;
-
-pub const stack_t = extern struct {
- ss_sp: [*]u8,
- ss_size: isize,
- ss_flags: i32,
-};
-
-pub const S_IFMT = 0o170000;
-
-pub const S_IFIFO = 0o010000;
-pub const S_IFCHR = 0o020000;
-pub const S_IFDIR = 0o040000;
-pub const S_IFBLK = 0o060000;
-pub const S_IFREG = 0o100000;
-pub const S_IFLNK = 0o120000;
-pub const S_IFSOCK = 0o140000;
-pub const S_IFWHT = 0o160000;
-
-pub const S_ISUID = 0o4000;
-pub const S_ISGID = 0o2000;
-pub const S_ISVTX = 0o1000;
-pub const S_IRWXU = 0o700;
-pub const S_IRUSR = 0o400;
-pub const S_IWUSR = 0o200;
-pub const S_IXUSR = 0o100;
-pub const S_IRWXG = 0o070;
-pub const S_IRGRP = 0o040;
-pub const S_IWGRP = 0o020;
-pub const S_IXGRP = 0o010;
-pub const S_IRWXO = 0o007;
-pub const S_IROTH = 0o004;
-pub const S_IWOTH = 0o002;
-pub const S_IXOTH = 0o001;
-
-pub fn S_ISFIFO(m: u32) bool {
- return m & S_IFMT == S_IFIFO;
-}
-
-pub fn S_ISCHR(m: u32) bool {
- return m & S_IFMT == S_IFCHR;
-}
-
-pub fn S_ISDIR(m: u32) bool {
- return m & S_IFMT == S_IFDIR;
-}
-
-pub fn S_ISBLK(m: u32) bool {
- return m & S_IFMT == S_IFBLK;
-}
-
-pub fn S_ISREG(m: u32) bool {
- return m & S_IFMT == S_IFREG;
-}
-
-pub fn S_ISLNK(m: u32) bool {
- return m & S_IFMT == S_IFLNK;
-}
-
-pub fn S_ISSOCK(m: u32) bool {
- return m & S_IFMT == S_IFSOCK;
-}
-
-pub fn S_IWHT(m: u32) bool {
- return m & S_IFMT == S_IFWHT;
-}
-
-pub const HOST_NAME_MAX = 255;
-
-/// 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 AT_FDCWD = -100;
-
-/// Check access using effective user and group ID
-pub const AT_EACCESS = 0x0100;
-
-/// Do not follow symbolic links
-pub const AT_SYMLINK_NOFOLLOW = 0x0200;
-
-/// Follow symbolic link
-pub const AT_SYMLINK_FOLLOW = 0x0400;
-
-/// Remove directory instead of file
-pub const AT_REMOVEDIR = 0x0800;
-
-pub const addrinfo = extern struct {
- flags: i32,
- family: i32,
- socktype: i32,
- protocol: i32,
- addrlen: socklen_t,
- canonname: ?[*:0]u8,
- addr: ?*sockaddr,
- next: ?*addrinfo,
-};
-
-/// Fail if not under dirfd
-pub const AT_BENEATH = 0x1000;
-
-/// dummy for IP
-pub const IPPROTO_IP = 0;
-
-/// control message protocol
-pub const IPPROTO_ICMP = 1;
-
-/// tcp
-pub const IPPROTO_TCP = 6;
-
-/// user datagram protocol
-pub const IPPROTO_UDP = 17;
-
-/// IP6 header
-pub const IPPROTO_IPV6 = 41;
-
-/// raw IP packet
-pub const IPPROTO_RAW = 255;
-
-/// IP6 hop-by-hop options
-pub const IPPROTO_HOPOPTS = 0;
-
-/// group mgmt protocol
-pub const IPPROTO_IGMP = 2;
-
-/// gateway^2 (deprecated)
-pub const IPPROTO_GGP = 3;
-
-/// IPv4 encapsulation
-pub const IPPROTO_IPV4 = 4;
-
-/// for compatibility
-pub const IPPROTO_IPIP = IPPROTO_IPV4;
-
-/// Stream protocol II
-pub const IPPROTO_ST = 7;
-
-/// exterior gateway protocol
-pub const IPPROTO_EGP = 8;
-
-/// private interior gateway
-pub const IPPROTO_PIGP = 9;
-
-/// BBN RCC Monitoring
-pub const IPPROTO_RCCMON = 10;
-
-/// network voice protocol
-pub const IPPROTO_NVPII = 11;
-
-/// pup
-pub const IPPROTO_PUP = 12;
-
-/// Argus
-pub const IPPROTO_ARGUS = 13;
-
-/// EMCON
-pub const IPPROTO_EMCON = 14;
-
-/// Cross Net Debugger
-pub const IPPROTO_XNET = 15;
-
-/// Chaos
-pub const IPPROTO_CHAOS = 16;
-
-/// Multiplexing
-pub const IPPROTO_MUX = 18;
-
-/// DCN Measurement Subsystems
-pub const IPPROTO_MEAS = 19;
-
-/// Host Monitoring
-pub const IPPROTO_HMP = 20;
-
-/// Packet Radio Measurement
-pub const IPPROTO_PRM = 21;
-
-/// xns idp
-pub const IPPROTO_IDP = 22;
-
-/// Trunk-1
-pub const IPPROTO_TRUNK1 = 23;
-
-/// Trunk-2
-pub const IPPROTO_TRUNK2 = 24;
-
-/// Leaf-1
-pub const IPPROTO_LEAF1 = 25;
-
-/// Leaf-2
-pub const IPPROTO_LEAF2 = 26;
-
-/// Reliable Data
-pub const IPPROTO_RDP = 27;
-
-/// Reliable Transaction
-pub const IPPROTO_IRTP = 28;
-
-/// tp-4 w/ class negotiation
-pub const IPPROTO_TP = 29;
-
-/// Bulk Data Transfer
-pub const IPPROTO_BLT = 30;
-
-/// Network Services
-pub const IPPROTO_NSP = 31;
-
-/// Merit Internodal
-pub const IPPROTO_INP = 32;
-
-/// Datagram Congestion Control Protocol
-pub const IPPROTO_DCCP = 33;
-
-/// Third Party Connect
-pub const IPPROTO_3PC = 34;
-
-/// InterDomain Policy Routing
-pub const IPPROTO_IDPR = 35;
-
-/// XTP
-pub const IPPROTO_XTP = 36;
-
-/// Datagram Delivery
-pub const IPPROTO_DDP = 37;
-
-/// Control Message Transport
-pub const IPPROTO_CMTP = 38;
-
-/// TP++ Transport
-pub const IPPROTO_TPXX = 39;
-
-/// IL transport protocol
-pub const IPPROTO_IL = 40;
-
-/// Source Demand Routing
-pub const IPPROTO_SDRP = 42;
-
-/// IP6 routing header
-pub const IPPROTO_ROUTING = 43;
-
-/// IP6 fragmentation header
-pub const IPPROTO_FRAGMENT = 44;
-
-/// InterDomain Routing
-pub const IPPROTO_IDRP = 45;
-
-/// resource reservation
-pub const IPPROTO_RSVP = 46;
-
-/// General Routing Encap.
-pub const IPPROTO_GRE = 47;
-
-/// Mobile Host Routing
-pub const IPPROTO_MHRP = 48;
-
-/// BHA
-pub const IPPROTO_BHA = 49;
-
-/// IP6 Encap Sec. Payload
-pub const IPPROTO_ESP = 50;
-
-/// IP6 Auth Header
-pub const IPPROTO_AH = 51;
-
-/// Integ. Net Layer Security
-pub const IPPROTO_INLSP = 52;
-
-/// IP with encryption
-pub const IPPROTO_SWIPE = 53;
-
-/// Next Hop Resolution
-pub const IPPROTO_NHRP = 54;
-
-/// IP Mobility
-pub const IPPROTO_MOBILE = 55;
-
-/// Transport Layer Security
-pub const IPPROTO_TLSP = 56;
-
-/// SKIP
-pub const IPPROTO_SKIP = 57;
-
-/// ICMP6
-pub const IPPROTO_ICMPV6 = 58;
-
-/// IP6 no next header
-pub const IPPROTO_NONE = 59;
-
-/// IP6 destination option
-pub const IPPROTO_DSTOPTS = 60;
-
-/// any host internal protocol
-pub const IPPROTO_AHIP = 61;
-
-/// CFTP
-pub const IPPROTO_CFTP = 62;
-
-/// "hello" routing protocol
-pub const IPPROTO_HELLO = 63;
-
-/// SATNET/Backroom EXPAK
-pub const IPPROTO_SATEXPAK = 64;
-
-/// Kryptolan
-pub const IPPROTO_KRYPTOLAN = 65;
-
-/// Remote Virtual Disk
-pub const IPPROTO_RVD = 66;
-
-/// Pluribus Packet Core
-pub const IPPROTO_IPPC = 67;
-
-/// Any distributed FS
-pub const IPPROTO_ADFS = 68;
-
-/// Satnet Monitoring
-pub const IPPROTO_SATMON = 69;
-
-/// VISA Protocol
-pub const IPPROTO_VISA = 70;
-
-/// Packet Core Utility
-pub const IPPROTO_IPCV = 71;
-
-/// Comp. Prot. Net. Executive
-pub const IPPROTO_CPNX = 72;
-
-/// Comp. Prot. HeartBeat
-pub const IPPROTO_CPHB = 73;
-
-/// Wang Span Network
-pub const IPPROTO_WSN = 74;
-
-/// Packet Video Protocol
-pub const IPPROTO_PVP = 75;
-
-/// BackRoom SATNET Monitoring
-pub const IPPROTO_BRSATMON = 76;
-
-/// Sun net disk proto (temp.)
-pub const IPPROTO_ND = 77;
-
-/// WIDEBAND Monitoring
-pub const IPPROTO_WBMON = 78;
-
-/// WIDEBAND EXPAK
-pub const IPPROTO_WBEXPAK = 79;
-
-/// ISO cnlp
-pub const IPPROTO_EON = 80;
-
-/// VMTP
-pub const IPPROTO_VMTP = 81;
-
-/// Secure VMTP
-pub const IPPROTO_SVMTP = 82;
-
-/// Banyon VINES
-pub const IPPROTO_VINES = 83;
-
-/// TTP
-pub const IPPROTO_TTP = 84;
-
-/// NSFNET-IGP
-pub const IPPROTO_IGP = 85;
-
-/// dissimilar gateway prot.
-pub const IPPROTO_DGP = 86;
-
-/// TCF
-pub const IPPROTO_TCF = 87;
-
-/// Cisco/GXS IGRP
-pub const IPPROTO_IGRP = 88;
-
-/// OSPFIGP
-pub const IPPROTO_OSPFIGP = 89;
-
-/// Strite RPC protocol
-pub const IPPROTO_SRPC = 90;
-
-/// Locus Address Resoloution
-pub const IPPROTO_LARP = 91;
-
-/// Multicast Transport
-pub const IPPROTO_MTP = 92;
-
-/// AX.25 Frames
-pub const IPPROTO_AX25 = 93;
-
-/// IP encapsulated in IP
-pub const IPPROTO_IPEIP = 94;
-
-/// Mobile Int.ing control
-pub const IPPROTO_MICP = 95;
-
-/// Semaphore Comm. security
-pub const IPPROTO_SCCSP = 96;
-
-/// Ethernet IP encapsulation
-pub const IPPROTO_ETHERIP = 97;
-
-/// encapsulation header
-pub const IPPROTO_ENCAP = 98;
-
-/// any private encr. scheme
-pub const IPPROTO_APES = 99;
-
-/// GMTP
-pub const IPPROTO_GMTP = 100;
-
-/// payload compression (IPComp)
-pub const IPPROTO_IPCOMP = 108;
-
-/// SCTP
-pub const IPPROTO_SCTP = 132;
-
-/// IPv6 Mobility Header
-pub const IPPROTO_MH = 135;
-
-/// UDP-Lite
-pub const IPPROTO_UDPLITE = 136;
-
-/// IP6 Host Identity Protocol
-pub const IPPROTO_HIP = 139;
-
-/// IP6 Shim6 Protocol
-pub const IPPROTO_SHIM6 = 140;
-
-/// Protocol Independent Mcast
-pub const IPPROTO_PIM = 103;
-
-/// CARP
-pub const IPPROTO_CARP = 112;
-
-/// PGM
-pub const IPPROTO_PGM = 113;
-
-/// MPLS-in-IP
-pub const IPPROTO_MPLS = 137;
-
-/// PFSYNC
-pub const IPPROTO_PFSYNC = 240;
-
-/// Reserved
-pub const IPPROTO_RESERVED_253 = 253;
-
-/// Reserved
-pub const IPPROTO_RESERVED_254 = 254;
-
-pub const rlimit_resource = enum(c_int) {
- CPU = 0,
- FSIZE = 1,
- DATA = 2,
- STACK = 3,
- CORE = 4,
- RSS = 5,
- MEMLOCK = 6,
- NPROC = 7,
- NOFILE = 8,
- SBSIZE = 9,
- VMEM = 10,
- NPTS = 11,
- SWAP = 12,
- KQUEUES = 13,
- UMTXP = 14,
- _,
-
- pub const AS: rlimit_resource = .VMEM;
-};
-
-pub const rlim_t = i64;
-
-/// No limit
-pub const RLIM_INFINITY: rlim_t = (1 << 63) - 1;
-
-pub const RLIM_SAVED_MAX = RLIM_INFINITY;
-pub const RLIM_SAVED_CUR = RLIM_INFINITY;
-
-pub const rlimit = extern struct {
- /// Soft limit
- cur: rlim_t,
- /// Hard limit
- max: rlim_t,
-};
-
-pub const SHUT_RD = 0;
-pub const SHUT_WR = 1;
-pub const SHUT_RDWR = 2;
-
-pub const nfds_t = u32;
-
-pub const pollfd = extern struct {
- fd: fd_t,
- events: i16,
- revents: i16,
-};
-
-/// any readable data available.
-pub const POLLIN = 0x0001;
-/// OOB/Urgent readable data.
-pub const POLLPRI = 0x0002;
-/// file descriptor is writeable.
-pub const POLLOUT = 0x0004;
-/// non-OOB/URG data available.
-pub const POLLRDNORM = 0x0040;
-/// no write type differentiation.
-pub const POLLWRNORM = POLLOUT;
-/// OOB/Urgent readable data.
-pub const POLLRDBAND = 0x0080;
-/// OOB/Urgent data can be written.
-pub const POLLWRBAND = 0x0100;
-/// like POLLIN, except ignore EOF.
-pub const POLLINIGNEOF = 0x2000;
-/// some poll error occurred.
-pub const POLLERR = 0x0008;
-/// file descriptor was "hung up".
-pub const POLLHUP = 0x0010;
-/// requested events "invalid".
-pub const POLLNVAL = 0x0020;
-
-pub const POLLSTANDARD = POLLIN | POLLPRI | POLLOUT | POLLRDNORM | POLLRDBAND |
- POLLWRBAND | POLLERR | POLLHUP | POLLNVAL;
diff --git a/lib/std/os/bits/haiku.zig b/lib/std/os/bits/haiku.zig
deleted file mode 100644
index 4a2cecf442..0000000000
--- a/lib/std/os/bits/haiku.zig
+++ /dev/null
@@ -1,1373 +0,0 @@
-const std = @import("../../std.zig");
-const maxInt = std.math.maxInt;
-
-pub const fd_t = c_int;
-pub const pid_t = c_int;
-pub const uid_t = u32;
-pub const gid_t = u32;
-pub const mode_t = c_uint;
-
-pub const socklen_t = u32;
-
-/// Renamed from `kevent` to `Kevent` to avoid conflict with function name.
-pub const Kevent = extern struct {
- ident: usize,
- filter: i16,
- flags: u16,
- fflags: u32,
- data: i64,
- udata: usize,
- // TODO ext
-};
-
-// Modes and flags for dlopen()
-// include/dlfcn.h
-
-pub const POLLIN = 0x0001;
-pub const POLLERR = 0x0004;
-pub const POLLNVAL = 0x1000;
-pub const POLLHUP = 0x0080;
-
-/// Bind function calls lazily.
-pub const RTLD_LAZY = 1;
-
-/// Bind function calls immediately.
-pub const RTLD_NOW = 2;
-
-pub const RTLD_MODEMASK = 0x3;
-
-/// Make symbols globally available.
-pub const RTLD_GLOBAL = 0x100;
-
-/// Opposite of RTLD_GLOBAL, and the default.
-pub const RTLD_LOCAL = 0;
-
-/// Trace loaded objects and exit.
-pub const RTLD_TRACE = 0x200;
-
-/// Do not remove members.
-pub const RTLD_NODELETE = 0x01000;
-
-/// Do not load if not already loaded.
-pub const RTLD_NOLOAD = 0x02000;
-
-pub const dl_phdr_info = extern struct {
- dlpi_addr: usize,
- dlpi_name: ?[*:0]const u8,
- dlpi_phdr: [*]std.elf.Phdr,
- dlpi_phnum: u16,
-};
-
-pub const Flock = extern struct {
- l_start: off_t,
- l_len: off_t,
- l_pid: pid_t,
- l_type: i16,
- l_whence: i16,
- l_sysid: i32,
- __unused: [4]u8,
-};
-
-pub const msghdr = extern struct {
- /// optional address
- msg_name: ?*sockaddr,
-
- /// size of address
- msg_namelen: socklen_t,
-
- /// scatter/gather array
- msg_iov: [*]iovec,
-
- /// # elements in msg_iov
- msg_iovlen: i32,
-
- /// ancillary data
- msg_control: ?*c_void,
-
- /// ancillary data buffer len
- msg_controllen: socklen_t,
-
- /// flags on received message
- msg_flags: i32,
-};
-
-pub const msghdr_const = extern struct {
- /// optional address
- msg_name: ?*const sockaddr,
-
- /// size of address
- msg_namelen: socklen_t,
-
- /// scatter/gather array
- msg_iov: [*]iovec_const,
-
- /// # elements in msg_iov
- msg_iovlen: i32,
-
- /// ancillary data
- msg_control: ?*c_void,
-
- /// ancillary data buffer len
- msg_controllen: socklen_t,
-
- /// flags on received message
- msg_flags: i32,
-};
-
-pub const off_t = i64;
-pub const ino_t = u64;
-
-pub const nfds_t = u32;
-
-pub const pollfd = extern struct {
- fd: i32,
- events: i16,
- revents: i16,
-};
-
-pub const libc_stat = extern struct {
- dev: i32,
- ino: u64,
- mode: u32,
- nlink: i32,
- uid: i32,
- gid: i32,
- size: i64,
- rdev: i32,
- blksize: i32,
- atim: timespec,
- mtim: timespec,
- ctim: timespec,
- crtim: timespec,
- st_type: u32,
- blocks: i64,
-
- pub fn atime(self: @This()) timespec {
- return self.atim;
- }
- pub fn mtime(self: @This()) timespec {
- return self.mtim;
- }
- pub fn ctime(self: @This()) timespec {
- return self.ctim;
- }
- pub fn crtime(self: @This()) timespec {
- return self.crtim;
- }
-};
-
-pub const timespec = extern struct {
- tv_sec: isize,
- tv_nsec: isize,
-};
-
-pub const dirent = extern struct {
- d_dev: i32,
- d_pdev: i32,
- d_ino: i64,
- d_pino: i64,
- d_reclen: u16,
- d_name: [256]u8,
-
- pub fn reclen(self: dirent) u16 {
- return self.d_reclen;
- }
-};
-
-pub const image_info = extern struct {
- id: u32,
- type: u32,
- sequence: i32,
- init_order: i32,
- init_routine: *c_void,
- term_routine: *c_void,
- device: i32,
- node: i32,
- name: [1024]u8,
- text: *c_void,
- data: *c_void,
- text_size: i32,
- data_size: i32,
- api_version: i32,
- abi: i32,
-};
-
-pub const system_info = extern struct {
- boot_time: i64,
- cpu_count: u32,
- max_pages: u64,
- used_pages: u64,
- cached_pages: u64,
- block_cache_pages: u64,
- ignored_pages: u64,
- needed_memory: u64,
- free_memory: u64,
- max_swap_pages: u64,
- free_swap_pages: u64,
- page_faults: u32,
- max_sems: u32,
- used_sems: u32,
- max_ports: u32,
- used_ports: u32,
- max_threads: u32,
- used_threads: u32,
- max_teams: u32,
- used_teams: u32,
- kernel_name: [256]u8,
- kernel_build_date: [32]u8,
- kernel_build_time: [32]u8,
- kernel_version: i64,
- abi: u32,
-};
-
-pub const in_port_t = u16;
-pub const sa_family_t = u8;
-
-pub const sockaddr = extern struct {
- /// total length
- len: u8,
-
- /// address family
- family: sa_family_t,
-
- /// actually longer; address value
- data: [14]u8,
-};
-
-pub const sockaddr_storage = std.x.os.Socket.Address.Native.Storage;
-
-pub const sockaddr_in = extern struct {
- len: u8 = @sizeOf(sockaddr_in),
- family: sa_family_t = AF_INET,
- port: in_port_t,
- addr: u32,
- zero: [8]u8 = [8]u8{ 0, 0, 0, 0, 0, 0, 0, 0 },
-};
-
-pub const sockaddr_in6 = extern struct {
- len: u8 = @sizeOf(sockaddr_in6),
- family: sa_family_t = AF_INET6,
- port: in_port_t,
- flowinfo: u32,
- addr: [16]u8,
- scope_id: u32,
-};
-
-pub const sockaddr_un = extern struct {
- len: u8 = @sizeOf(sockaddr_un),
- family: sa_family_t = AF_UNIX,
- path: [104]u8,
-};
-
-pub const CTL_KERN = 1;
-pub const CTL_DEBUG = 5;
-
-pub const KERN_PROC = 14; // struct: process entries
-pub const KERN_PROC_PATHNAME = 12; // path to executable
-
-pub const PATH_MAX = 1024;
-
-pub const STDIN_FILENO = 0;
-pub const STDOUT_FILENO = 1;
-pub const STDERR_FILENO = 2;
-
-pub const PROT_NONE = 0;
-pub const PROT_READ = 1;
-pub const PROT_WRITE = 2;
-pub const PROT_EXEC = 4;
-
-pub const CLOCK_MONOTONIC = 0;
-pub const CLOCK_REALTIME = -1;
-pub const CLOCK_PROCESS_CPUTIME_ID = -2;
-pub const CLOCK_THREAD_CPUTIME_ID = -3;
-
-pub const MAP_FAILED = @intToPtr(*c_void, maxInt(usize));
-pub const MAP_SHARED = 0x0001;
-pub const MAP_PRIVATE = 0x0002;
-pub const MAP_FIXED = 0x0010;
-pub const MAP_STACK = 0x0400;
-pub const MAP_NOSYNC = 0x0800;
-pub const MAP_ANON = 0x1000;
-pub const MAP_ANONYMOUS = MAP_ANON;
-pub const MAP_FILE = 0;
-
-pub const MAP_GUARD = 0x00002000;
-pub const MAP_EXCL = 0x00004000;
-pub const MAP_NOCORE = 0x00020000;
-pub const MAP_PREFAULT_READ = 0x00040000;
-pub const MAP_32BIT = 0x00080000;
-
-pub const WNOHANG = 0x1;
-pub const WUNTRACED = 0x2;
-pub const WSTOPPED = 0x10;
-pub const WCONTINUED = 0x4;
-pub const WNOWAIT = 0x20;
-pub const WEXITED = 0x08;
-
-pub const SA_ONSTACK = 0x20;
-pub const SA_RESTART = 0x10;
-pub const SA_RESETHAND = 0x04;
-pub const SA_NOCLDSTOP = 0x01;
-pub const SA_NODEFER = 0x08;
-pub const SA_NOCLDWAIT = 0x02;
-pub const SA_SIGINFO = 0x40;
-pub const SA_NOMASK = SA_NODEFER;
-pub const SA_STACK = SA_ONSTACK;
-pub const SA_ONESHOT = SA_RESETHAND;
-
-pub const SIGHUP = 1;
-pub const SIGINT = 2;
-pub const SIGQUIT = 3;
-pub const SIGILL = 4;
-pub const SIGCHLD = 5;
-pub const SIGABRT = 6;
-pub const SIGIOT = SIGABRT;
-pub const SIGPIPE = 7;
-pub const SIGFPE = 8;
-pub const SIGKILL = 9;
-pub const SIGSTOP = 10;
-pub const SIGSEGV = 11;
-pub const SIGCONT = 12;
-pub const SIGTSTP = 13;
-pub const SIGALRM = 14;
-pub const SIGTERM = 15;
-pub const SIGTTIN = 16;
-pub const SIGTTOU = 17;
-pub const SIGUSR1 = 18;
-pub const SIGUSR2 = 19;
-pub const SIGWINCH = 20;
-pub const SIGKILLTHR = 21;
-pub const SIGTRAP = 22;
-pub const SIGPOLL = 23;
-pub const SIGPROF = 24;
-pub const SIGSYS = 25;
-pub const SIGURG = 26;
-pub const SIGVTALRM = 27;
-pub const SIGXCPU = 28;
-pub const SIGXFSZ = 29;
-pub const SIGBUS = 30;
-pub const SIGRESERVED1 = 31;
-pub const SIGRESERVED2 = 32;
-
-// TODO: check
-pub const SIGRTMIN = 65;
-pub const SIGRTMAX = 126;
-
-// access function
-pub const F_OK = 0; // test for existence of file
-pub const X_OK = 1; // test for execute or search permission
-pub const W_OK = 2; // test for write permission
-pub const R_OK = 4; // test for read permission
-
-pub const O_RDONLY = 0x0000;
-pub const O_WRONLY = 0x0001;
-pub const O_RDWR = 0x0002;
-pub const O_ACCMODE = 0x0003;
-
-pub const O_SHLOCK = 0x0010;
-pub const O_EXLOCK = 0x0020;
-
-pub const O_CREAT = 0x0200;
-pub const O_EXCL = 0x0800;
-pub const O_NOCTTY = 0x8000;
-pub const O_TRUNC = 0x0400;
-pub const O_APPEND = 0x0008;
-pub const O_NONBLOCK = 0x0004;
-pub const O_DSYNC = 0o10000;
-pub const O_SYNC = 0x0080;
-pub const O_RSYNC = 0o4010000;
-pub const O_DIRECTORY = 0x20000;
-pub const O_NOFOLLOW = 0x0100;
-pub const O_CLOEXEC = 0x00100000;
-
-pub const O_ASYNC = 0x0040;
-pub const O_DIRECT = 0x00010000;
-pub const O_NOATIME = 0o1000000;
-pub const O_PATH = 0o10000000;
-pub const O_TMPFILE = 0o20200000;
-pub const O_NDELAY = O_NONBLOCK;
-
-pub const F_DUPFD = 0;
-pub const F_GETFD = 1;
-pub const F_SETFD = 2;
-pub const F_GETFL = 3;
-pub const F_SETFL = 4;
-
-pub const F_GETOWN = 5;
-pub const F_SETOWN = 6;
-
-pub const F_GETLK = 11;
-pub const F_SETLK = 12;
-pub const F_SETLKW = 13;
-
-pub const F_RDLCK = 1;
-pub const F_WRLCK = 3;
-pub const F_UNLCK = 2;
-
-pub const LOCK_SH = 1;
-pub const LOCK_EX = 2;
-pub const LOCK_UN = 8;
-pub const LOCK_NB = 4;
-
-pub const F_SETOWN_EX = 15;
-pub const F_GETOWN_EX = 16;
-
-pub const F_GETOWNER_UIDS = 17;
-
-pub const FD_CLOEXEC = 1;
-
-pub const SEEK_SET = 0;
-pub const SEEK_CUR = 1;
-pub const SEEK_END = 2;
-
-pub const SIG_BLOCK = 1;
-pub const SIG_UNBLOCK = 2;
-pub const SIG_SETMASK = 3;
-
-pub const SOCK_STREAM = 1;
-pub const SOCK_DGRAM = 2;
-pub const SOCK_RAW = 3;
-pub const SOCK_RDM = 4;
-pub const SOCK_SEQPACKET = 5;
-
-pub const SOCK_CLOEXEC = 0x10000000;
-pub const SOCK_NONBLOCK = 0x20000000;
-
-pub const SO_DEBUG = 0x00000001;
-pub const SO_ACCEPTCONN = 0x00000002;
-pub const SO_REUSEADDR = 0x00000004;
-pub const SO_KEEPALIVE = 0x00000008;
-pub const SO_DONTROUTE = 0x00000010;
-pub const SO_BROADCAST = 0x00000020;
-pub const SO_USELOOPBACK = 0x00000040;
-pub const SO_LINGER = 0x00000080;
-pub const SO_OOBINLINE = 0x00000100;
-pub const SO_REUSEPORT = 0x00000200;
-pub const SO_TIMESTAMP = 0x00000400;
-pub const SO_NOSIGPIPE = 0x00000800;
-pub const SO_ACCEPTFILTER = 0x00001000;
-pub const SO_BINTIME = 0x00002000;
-pub const SO_NO_OFFLOAD = 0x00004000;
-pub const SO_NO_DDP = 0x00008000;
-pub const SO_REUSEPORT_LB = 0x00010000;
-
-pub const SO_SNDBUF = 0x1001;
-pub const SO_RCVBUF = 0x1002;
-pub const SO_SNDLOWAT = 0x1003;
-pub const SO_RCVLOWAT = 0x1004;
-pub const SO_SNDTIMEO = 0x1005;
-pub const SO_RCVTIMEO = 0x1006;
-pub const SO_ERROR = 0x1007;
-pub const SO_TYPE = 0x1008;
-pub const SO_LABEL = 0x1009;
-pub const SO_PEERLABEL = 0x1010;
-pub const SO_LISTENQLIMIT = 0x1011;
-pub const SO_LISTENQLEN = 0x1012;
-pub const SO_LISTENINCQLEN = 0x1013;
-pub const SO_SETFIB = 0x1014;
-pub const SO_USER_COOKIE = 0x1015;
-pub const SO_PROTOCOL = 0x1016;
-pub const SO_PROTOTYPE = SO_PROTOCOL;
-pub const SO_TS_CLOCK = 0x1017;
-pub const SO_MAX_PACING_RATE = 0x1018;
-pub const SO_DOMAIN = 0x1019;
-
-pub const SOL_SOCKET = 0xffff;
-
-pub const PF_UNSPEC = AF_UNSPEC;
-pub const PF_LOCAL = AF_LOCAL;
-pub const PF_UNIX = PF_LOCAL;
-pub const PF_INET = AF_INET;
-pub const PF_IMPLINK = AF_IMPLINK;
-pub const PF_PUP = AF_PUP;
-pub const PF_CHAOS = AF_CHAOS;
-pub const PF_NETBIOS = AF_NETBIOS;
-pub const PF_ISO = AF_ISO;
-pub const PF_OSI = AF_ISO;
-pub const PF_ECMA = AF_ECMA;
-pub const PF_DATAKIT = AF_DATAKIT;
-pub const PF_CCITT = AF_CCITT;
-pub const PF_DECnet = AF_DECnet;
-pub const PF_DLI = AF_DLI;
-pub const PF_LAT = AF_LAT;
-pub const PF_HYLINK = AF_HYLINK;
-pub const PF_APPLETALK = AF_APPLETALK;
-pub const PF_ROUTE = AF_ROUTE;
-pub const PF_LINK = AF_LINK;
-pub const PF_XTP = pseudo_AF_XTP;
-pub const PF_COIP = AF_COIP;
-pub const PF_CNT = AF_CNT;
-pub const PF_SIP = AF_SIP;
-pub const PF_IPX = AF_IPX;
-pub const PF_RTIP = pseudo_AF_RTIP;
-pub const PF_PIP = psuedo_AF_PIP;
-pub const PF_ISDN = AF_ISDN;
-pub const PF_KEY = pseudo_AF_KEY;
-pub const PF_INET6 = pseudo_AF_INET6;
-pub const PF_NATM = AF_NATM;
-pub const PF_ATM = AF_ATM;
-pub const PF_NETGRAPH = AF_NETGRAPH;
-pub const PF_SLOW = AF_SLOW;
-pub const PF_SCLUSTER = AF_SCLUSTER;
-pub const PF_ARP = AF_ARP;
-pub const PF_BLUETOOTH = AF_BLUETOOTH;
-pub const PF_IEEE80211 = AF_IEEE80211;
-pub const PF_INET_SDP = AF_INET_SDP;
-pub const PF_INET6_SDP = AF_INET6_SDP;
-pub const PF_MAX = AF_MAX;
-
-pub const AF_UNSPEC = 0;
-pub const AF_UNIX = 1;
-pub const AF_LOCAL = AF_UNIX;
-pub const AF_FILE = AF_LOCAL;
-pub const AF_INET = 2;
-pub const AF_IMPLINK = 3;
-pub const AF_PUP = 4;
-pub const AF_CHAOS = 5;
-pub const AF_NETBIOS = 6;
-pub const AF_ISO = 7;
-pub const AF_OSI = AF_ISO;
-pub const AF_ECMA = 8;
-pub const AF_DATAKIT = 9;
-pub const AF_CCITT = 10;
-pub const AF_SNA = 11;
-pub const AF_DECnet = 12;
-pub const AF_DLI = 13;
-pub const AF_LAT = 14;
-pub const AF_HYLINK = 15;
-pub const AF_APPLETALK = 16;
-pub const AF_ROUTE = 17;
-pub const AF_LINK = 18;
-pub const pseudo_AF_XTP = 19;
-pub const AF_COIP = 20;
-pub const AF_CNT = 21;
-pub const pseudo_AF_RTIP = 22;
-pub const AF_IPX = 23;
-pub const AF_SIP = 24;
-pub const pseudo_AF_PIP = 25;
-pub const AF_ISDN = 26;
-pub const AF_E164 = AF_ISDN;
-pub const pseudo_AF_KEY = 27;
-pub const AF_INET6 = 28;
-pub const AF_NATM = 29;
-pub const AF_ATM = 30;
-pub const pseudo_AF_HDRCMPLT = 31;
-pub const AF_NETGRAPH = 32;
-pub const AF_SLOW = 33;
-pub const AF_SCLUSTER = 34;
-pub const AF_ARP = 35;
-pub const AF_BLUETOOTH = 36;
-pub const AF_IEEE80211 = 37;
-pub const AF_INET_SDP = 40;
-pub const AF_INET6_SDP = 42;
-pub const AF_MAX = 42;
-
-pub const DT_UNKNOWN = 0;
-pub const DT_FIFO = 1;
-pub const DT_CHR = 2;
-pub const DT_DIR = 4;
-pub const DT_BLK = 6;
-pub const DT_REG = 8;
-pub const DT_LNK = 10;
-pub const DT_SOCK = 12;
-pub const DT_WHT = 14;
-
-/// add event to kq (implies enable)
-pub const EV_ADD = 0x0001;
-
-/// delete event from kq
-pub const EV_DELETE = 0x0002;
-
-/// enable event
-pub const EV_ENABLE = 0x0004;
-
-/// disable event (not reported)
-pub const EV_DISABLE = 0x0008;
-
-/// only report one occurrence
-pub const EV_ONESHOT = 0x0010;
-
-/// clear event state after reporting
-pub const EV_CLEAR = 0x0020;
-
-/// force immediate event output
-/// ... with or without EV_ERROR
-/// ... use KEVENT_FLAG_ERROR_EVENTS
-/// on syscalls supporting flags
-pub const EV_RECEIPT = 0x0040;
-
-/// disable event after reporting
-pub const EV_DISPATCH = 0x0080;
-
-pub const EVFILT_READ = -1;
-pub const EVFILT_WRITE = -2;
-
-/// attached to aio requests
-pub const EVFILT_AIO = -3;
-
-/// attached to vnodes
-pub const EVFILT_VNODE = -4;
-
-/// attached to struct proc
-pub const EVFILT_PROC = -5;
-
-/// attached to struct proc
-pub const EVFILT_SIGNAL = -6;
-
-/// timers
-pub const EVFILT_TIMER = -7;
-
-/// Process descriptors
-pub const EVFILT_PROCDESC = -8;
-
-/// Filesystem events
-pub const EVFILT_FS = -9;
-
-pub const EVFILT_LIO = -10;
-
-/// User events
-pub const EVFILT_USER = -11;
-
-/// Sendfile events
-pub const EVFILT_SENDFILE = -12;
-
-pub const EVFILT_EMPTY = -13;
-
-pub const TCGETA = 0x8000;
-pub const TCSETA = 0x8001;
-pub const TCSETAW = 0x8004;
-pub const TCSETAF = 0x8003;
-pub const TCSBRK = 08005;
-pub const TCXONC = 0x8007;
-pub const TCFLSH = 0x8006;
-
-pub const TIOCSCTTY = 0x8017;
-pub const TIOCGPGRP = 0x8015;
-pub const TIOCSPGRP = 0x8016;
-pub const TIOCGWINSZ = 0x8012;
-pub const TIOCSWINSZ = 0x8013;
-pub const TIOCMGET = 0x8018;
-pub const TIOCMBIS = 0x8022;
-pub const TIOCMBIC = 0x8023;
-pub const TIOCMSET = 0x8019;
-pub const FIONREAD = 0xbe000001;
-pub const FIONBIO = 0xbe000000;
-pub const TIOCSBRK = 0x8020;
-pub const TIOCCBRK = 0x8021;
-pub const TIOCGSID = 0x8024;
-
-pub fn WEXITSTATUS(s: u32) u8 {
- return @intCast(u8, s & 0xff);
-}
-
-pub fn WTERMSIG(s: u32) u32 {
- return (s >> 8) & 0xff;
-}
-
-pub fn WSTOPSIG(s: u32) u32 {
- return WEXITSTATUS(s);
-}
-
-pub fn WIFEXITED(s: u32) bool {
- return WTERMSIG(s) == 0;
-}
-
-pub fn WIFSTOPPED(s: u32) bool {
- return ((s >> 16) & 0xff) != 0;
-}
-
-pub fn WIFSIGNALED(s: u32) bool {
- return ((s >> 8) & 0xff) != 0;
-}
-
-pub const winsize = extern struct {
- ws_row: u16,
- ws_col: u16,
- ws_xpixel: u16,
- ws_ypixel: u16,
-};
-
-const NSIG = 32;
-
-pub const SIG_ERR = @intToPtr(fn (i32) callconv(.C) void, maxInt(usize));
-pub const SIG_DFL = @intToPtr(fn (i32) callconv(.C) void, 0);
-pub const SIG_IGN = @intToPtr(fn (i32) callconv(.C) void, 1);
-
-/// Renamed from `sigaction` to `Sigaction` to avoid conflict with the syscall.
-pub const Sigaction = extern struct {
- /// signal handler
- __sigaction_u: extern union {
- __sa_handler: fn (i32) callconv(.C) void,
- __sa_sigaction: fn (i32, *__siginfo, usize) callconv(.C) void,
- },
-
- /// see signal options
- sa_flags: u32,
-
- /// signal mask to apply
- sa_mask: sigset_t,
-};
-
-pub const _SIG_WORDS = 4;
-pub const _SIG_MAXSIG = 128;
-pub inline fn _SIG_IDX(sig: usize) usize {
- return sig - 1;
-}
-pub inline fn _SIG_WORD(sig: usize) usize {
- return_SIG_IDX(sig) >> 5;
-}
-pub inline fn _SIG_BIT(sig: usize) usize {
- return 1 << (_SIG_IDX(sig) & 31);
-}
-pub inline fn _SIG_VALID(sig: usize) usize {
- return sig <= _SIG_MAXSIG and sig > 0;
-}
-
-pub const sigset_t = extern struct {
- __bits: [_SIG_WORDS]u32,
-};
-
-pub const E = enum(i32) {
- /// No error occurred.
- SUCCESS = 0,
- PERM = -0x7ffffff1, // Operation not permitted
- NOENT = -0x7fff9ffd, // No such file or directory
- SRCH = -0x7fff8ff3, // No such process
- INTR = -0x7ffffff6, // Interrupted system call
- IO = -0x7fffffff, // Input/output error
- NXIO = -0x7fff8ff5, // Device not configured
- @"2BIG" = -0x7fff8fff, // Argument list too long
- NOEXEC = -0x7fffecfe, // Exec format error
- CHILD = -0x7fff8ffe, // No child processes
- DEADLK = -0x7fff8ffd, // Resource deadlock avoided
- NOMEM = -0x80000000, // Cannot allocate memory
- ACCES = -0x7ffffffe, // Permission denied
- FAULT = -0x7fffecff, // Bad address
- BUSY = -0x7ffffff2, // Device busy
- EXIST = -0x7fff9ffe, // File exists
- XDEV = -0x7fff9ff5, // Cross-device link
- NODEV = -0x7fff8ff9, // Operation not supported by device
- NOTDIR = -0x7fff9ffb, // Not a directory
- ISDIR = -0x7fff9ff7, // Is a directory
- INVAL = -0x7ffffffb, // Invalid argument
- NFILE = -0x7fff8ffa, // Too many open files in system
- MFILE = -0x7fff9ff6, // Too many open files
- NOTTY = -0x7fff8ff6, // Inappropriate ioctl for device
- TXTBSY = -0x7fff8fc5, // Text file busy
- FBIG = -0x7fff8ffc, // File too large
- NOSPC = -0x7fff9ff9, // No space left on device
- SPIPE = -0x7fff8ff4, // Illegal seek
- ROFS = -0x7fff9ff8, // Read-only filesystem
- MLINK = -0x7fff8ffb, // Too many links
- PIPE = -0x7fff9ff3, // Broken pipe
- BADF = -0x7fffa000, // Bad file descriptor
-
- // math software
- DOM = 33, // Numerical argument out of domain
- RANGE = 34, // Result too large
-
- // non-blocking and interrupt i/o
-
- /// Also used for `WOULDBLOCK`.
- AGAIN = -0x7ffffff5,
- INPROGRESS = -0x7fff8fdc,
- ALREADY = -0x7fff8fdb,
-
- // ipc/network software -- argument errors
- NOTSOCK = 38, // Socket operation on non-socket
- DESTADDRREQ = 39, // Destination address required
- MSGSIZE = 40, // Message too long
- PROTOTYPE = 41, // Protocol wrong type for socket
- NOPROTOOPT = 42, // Protocol not available
- PROTONOSUPPORT = 43, // Protocol not supported
- SOCKTNOSUPPORT = 44, // Socket type not supported
- /// Also used for `NOTSUP`.
- OPNOTSUPP = 45, // Operation not supported
- PFNOSUPPORT = 46, // Protocol family not supported
- AFNOSUPPORT = 47, // Address family not supported by protocol family
- ADDRINUSE = 48, // Address already in use
- ADDRNOTAVAIL = 49, // Can't assign requested address
-
- // ipc/network software -- operational errors
- NETDOWN = 50, // Network is down
- NETUNREACH = 51, // Network is unreachable
- NETRESET = 52, // Network dropped connection on reset
- CONNABORTED = 53, // Software caused connection abort
- CONNRESET = 54, // Connection reset by peer
- NOBUFS = 55, // No buffer space available
- ISCONN = 56, // Socket is already connected
- NOTCONN = 57, // Socket is not connected
- SHUTDOWN = 58, // Can't send after socket shutdown
- TOOMANYREFS = 59, // Too many references: can't splice
- TIMEDOUT = 60, // Operation timed out
- CONNREFUSED = 61, // Connection refused
-
- LOOP = 62, // Too many levels of symbolic links
- NAMETOOLONG = 63, // File name too long
-
- // should be rearranged
- HOSTDOWN = 64, // Host is down
- HOSTUNREACH = 65, // No route to host
- NOTEMPTY = 66, // Directory not empty
-
- // quotas & mush
- PROCLIM = 67, // Too many processes
- USERS = 68, // Too many users
- DQUOT = 69, // Disc quota exceeded
-
- // Network File System
- STALE = 70, // Stale NFS file handle
- REMOTE = 71, // Too many levels of remote in path
- BADRPC = 72, // RPC struct is bad
- RPCMISMATCH = 73, // RPC version wrong
- PROGUNAVAIL = 74, // RPC prog. not avail
- PROGMISMATCH = 75, // Program version wrong
- PROCUNAVAIL = 76, // Bad procedure for program
-
- NOLCK = 77, // No locks available
- NOSYS = 78, // Function not implemented
-
- FTYPE = 79, // Inappropriate file type or format
- AUTH = 80, // Authentication error
- NEEDAUTH = 81, // Need authenticator
- IDRM = 82, // Identifier removed
- NOMSG = 83, // No message of desired type
- OVERFLOW = 84, // Value too large to be stored in data type
- CANCELED = 85, // Operation canceled
- ILSEQ = 86, // Illegal byte sequence
- NOATTR = 87, // Attribute not found
-
- DOOFUS = 88, // Programming error
-
- BADMSG = 89, // Bad message
- MULTIHOP = 90, // Multihop attempted
- NOLINK = 91, // Link has been severed
- PROTO = 92, // Protocol error
-
- NOTCAPABLE = 93, // Capabilities insufficient
- CAPMODE = 94, // Not permitted in capability mode
- NOTRECOVERABLE = 95, // State not recoverable
- OWNERDEAD = 96, // Previous owner died
-
- _,
-};
-
-pub const MINSIGSTKSZ = switch (builtin.cpu.arch) {
- .i386, .x86_64 => 2048,
- .arm, .aarch64 => 4096,
- else => @compileError("MINSIGSTKSZ not defined for this architecture"),
-};
-pub const SIGSTKSZ = MINSIGSTKSZ + 32768;
-
-pub const SS_ONSTACK = 1;
-pub const SS_DISABLE = 4;
-
-pub const stack_t = extern struct {
- ss_sp: [*]u8,
- ss_size: isize,
- ss_flags: i32,
-};
-
-pub const S_IFMT = 0o170000;
-
-pub const S_IFIFO = 0o010000;
-pub const S_IFCHR = 0o020000;
-pub const S_IFDIR = 0o040000;
-pub const S_IFBLK = 0o060000;
-pub const S_IFREG = 0o100000;
-pub const S_IFLNK = 0o120000;
-pub const S_IFSOCK = 0o140000;
-pub const S_IFWHT = 0o160000;
-
-pub const S_ISUID = 0o4000;
-pub const S_ISGID = 0o2000;
-pub const S_ISVTX = 0o1000;
-pub const S_IRWXU = 0o700;
-pub const S_IRUSR = 0o400;
-pub const S_IWUSR = 0o200;
-pub const S_IXUSR = 0o100;
-pub const S_IRWXG = 0o070;
-pub const S_IRGRP = 0o040;
-pub const S_IWGRP = 0o020;
-pub const S_IXGRP = 0o010;
-pub const S_IRWXO = 0o007;
-pub const S_IROTH = 0o004;
-pub const S_IWOTH = 0o002;
-pub const S_IXOTH = 0o001;
-
-pub fn S_ISFIFO(m: u32) bool {
- return m & S_IFMT == S_IFIFO;
-}
-
-pub fn S_ISCHR(m: u32) bool {
- return m & S_IFMT == S_IFCHR;
-}
-
-pub fn S_ISDIR(m: u32) bool {
- return m & S_IFMT == S_IFDIR;
-}
-
-pub fn S_ISBLK(m: u32) bool {
- return m & S_IFMT == S_IFBLK;
-}
-
-pub fn S_ISREG(m: u32) bool {
- return m & S_IFMT == S_IFREG;
-}
-
-pub fn S_ISLNK(m: u32) bool {
- return m & S_IFMT == S_IFLNK;
-}
-
-pub fn S_ISSOCK(m: u32) bool {
- return m & S_IFMT == S_IFSOCK;
-}
-
-pub fn S_IWHT(m: u32) bool {
- return m & S_IFMT == S_IFWHT;
-}
-
-pub const HOST_NAME_MAX = 255;
-
-/// 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 AT_FDCWD = -100;
-
-/// Check access using effective user and group ID
-pub const AT_EACCESS = 0x0100;
-
-/// Do not follow symbolic links
-pub const AT_SYMLINK_NOFOLLOW = 0x0200;
-
-/// Follow symbolic link
-pub const AT_SYMLINK_FOLLOW = 0x0400;
-
-/// Remove directory instead of file
-pub const AT_REMOVEDIR = 0x0800;
-
-pub const addrinfo = extern struct {
- flags: i32,
- family: i32,
- socktype: i32,
- protocol: i32,
- addrlen: socklen_t,
- canonname: ?[*:0]u8,
- addr: ?*sockaddr,
- next: ?*addrinfo,
-};
-
-/// Fail if not under dirfd
-pub const AT_BENEATH = 0x1000;
-
-/// dummy for IP
-pub const IPPROTO_IP = 0;
-
-/// control message protocol
-pub const IPPROTO_ICMP = 1;
-
-/// tcp
-pub const IPPROTO_TCP = 6;
-
-/// user datagram protocol
-pub const IPPROTO_UDP = 17;
-
-/// IP6 header
-pub const IPPROTO_IPV6 = 41;
-
-/// raw IP packet
-pub const IPPROTO_RAW = 255;
-
-/// IP6 hop-by-hop options
-pub const IPPROTO_HOPOPTS = 0;
-
-/// group mgmt protocol
-pub const IPPROTO_IGMP = 2;
-
-/// gateway^2 (deprecated)
-pub const IPPROTO_GGP = 3;
-
-/// IPv4 encapsulation
-pub const IPPROTO_IPV4 = 4;
-
-/// for compatibility
-pub const IPPROTO_IPIP = IPPROTO_IPV4;
-
-/// Stream protocol II
-pub const IPPROTO_ST = 7;
-
-/// exterior gateway protocol
-pub const IPPROTO_EGP = 8;
-
-/// private interior gateway
-pub const IPPROTO_PIGP = 9;
-
-/// BBN RCC Monitoring
-pub const IPPROTO_RCCMON = 10;
-
-/// network voice protocol
-pub const IPPROTO_NVPII = 11;
-
-/// pup
-pub const IPPROTO_PUP = 12;
-
-/// Argus
-pub const IPPROTO_ARGUS = 13;
-
-/// EMCON
-pub const IPPROTO_EMCON = 14;
-
-/// Cross Net Debugger
-pub const IPPROTO_XNET = 15;
-
-/// Chaos
-pub const IPPROTO_CHAOS = 16;
-
-/// Multiplexing
-pub const IPPROTO_MUX = 18;
-
-/// DCN Measurement Subsystems
-pub const IPPROTO_MEAS = 19;
-
-/// Host Monitoring
-pub const IPPROTO_HMP = 20;
-
-/// Packet Radio Measurement
-pub const IPPROTO_PRM = 21;
-
-/// xns idp
-pub const IPPROTO_IDP = 22;
-
-/// Trunk-1
-pub const IPPROTO_TRUNK1 = 23;
-
-/// Trunk-2
-pub const IPPROTO_TRUNK2 = 24;
-
-/// Leaf-1
-pub const IPPROTO_LEAF1 = 25;
-
-/// Leaf-2
-pub const IPPROTO_LEAF2 = 26;
-
-/// Reliable Data
-pub const IPPROTO_RDP = 27;
-
-/// Reliable Transaction
-pub const IPPROTO_IRTP = 28;
-
-/// tp-4 w/ class negotiation
-pub const IPPROTO_TP = 29;
-
-/// Bulk Data Transfer
-pub const IPPROTO_BLT = 30;
-
-/// Network Services
-pub const IPPROTO_NSP = 31;
-
-/// Merit Internodal
-pub const IPPROTO_INP = 32;
-
-/// Datagram Congestion Control Protocol
-pub const IPPROTO_DCCP = 33;
-
-/// Third Party Connect
-pub const IPPROTO_3PC = 34;
-
-/// InterDomain Policy Routing
-pub const IPPROTO_IDPR = 35;
-
-/// XTP
-pub const IPPROTO_XTP = 36;
-
-/// Datagram Delivery
-pub const IPPROTO_DDP = 37;
-
-/// Control Message Transport
-pub const IPPROTO_CMTP = 38;
-
-/// TP++ Transport
-pub const IPPROTO_TPXX = 39;
-
-/// IL transport protocol
-pub const IPPROTO_IL = 40;
-
-/// Source Demand Routing
-pub const IPPROTO_SDRP = 42;
-
-/// IP6 routing header
-pub const IPPROTO_ROUTING = 43;
-
-/// IP6 fragmentation header
-pub const IPPROTO_FRAGMENT = 44;
-
-/// InterDomain Routing
-pub const IPPROTO_IDRP = 45;
-
-/// resource reservation
-pub const IPPROTO_RSVP = 46;
-
-/// General Routing Encap.
-pub const IPPROTO_GRE = 47;
-
-/// Mobile Host Routing
-pub const IPPROTO_MHRP = 48;
-
-/// BHA
-pub const IPPROTO_BHA = 49;
-
-/// IP6 Encap Sec. Payload
-pub const IPPROTO_ESP = 50;
-
-/// IP6 Auth Header
-pub const IPPROTO_AH = 51;
-
-/// Integ. Net Layer Security
-pub const IPPROTO_INLSP = 52;
-
-/// IP with encryption
-pub const IPPROTO_SWIPE = 53;
-
-/// Next Hop Resolution
-pub const IPPROTO_NHRP = 54;
-
-/// IP Mobility
-pub const IPPROTO_MOBILE = 55;
-
-/// Transport Layer Security
-pub const IPPROTO_TLSP = 56;
-
-/// SKIP
-pub const IPPROTO_SKIP = 57;
-
-/// ICMP6
-pub const IPPROTO_ICMPV6 = 58;
-
-/// IP6 no next header
-pub const IPPROTO_NONE = 59;
-
-/// IP6 destination option
-pub const IPPROTO_DSTOPTS = 60;
-
-/// any host internal protocol
-pub const IPPROTO_AHIP = 61;
-
-/// CFTP
-pub const IPPROTO_CFTP = 62;
-
-/// "hello" routing protocol
-pub const IPPROTO_HELLO = 63;
-
-/// SATNET/Backroom EXPAK
-pub const IPPROTO_SATEXPAK = 64;
-
-/// Kryptolan
-pub const IPPROTO_KRYPTOLAN = 65;
-
-/// Remote Virtual Disk
-pub const IPPROTO_RVD = 66;
-
-/// Pluribus Packet Core
-pub const IPPROTO_IPPC = 67;
-
-/// Any distributed FS
-pub const IPPROTO_ADFS = 68;
-
-/// Satnet Monitoring
-pub const IPPROTO_SATMON = 69;
-
-/// VISA Protocol
-pub const IPPROTO_VISA = 70;
-
-/// Packet Core Utility
-pub const IPPROTO_IPCV = 71;
-
-/// Comp. Prot. Net. Executive
-pub const IPPROTO_CPNX = 72;
-
-/// Comp. Prot. HeartBeat
-pub const IPPROTO_CPHB = 73;
-
-/// Wang Span Network
-pub const IPPROTO_WSN = 74;
-
-/// Packet Video Protocol
-pub const IPPROTO_PVP = 75;
-
-/// BackRoom SATNET Monitoring
-pub const IPPROTO_BRSATMON = 76;
-
-/// Sun net disk proto (temp.)
-pub const IPPROTO_ND = 77;
-
-/// WIDEBAND Monitoring
-pub const IPPROTO_WBMON = 78;
-
-/// WIDEBAND EXPAK
-pub const IPPROTO_WBEXPAK = 79;
-
-/// ISO cnlp
-pub const IPPROTO_EON = 80;
-
-/// VMTP
-pub const IPPROTO_VMTP = 81;
-
-/// Secure VMTP
-pub const IPPROTO_SVMTP = 82;
-
-/// Banyon VINES
-pub const IPPROTO_VINES = 83;
-
-/// TTP
-pub const IPPROTO_TTP = 84;
-
-/// NSFNET-IGP
-pub const IPPROTO_IGP = 85;
-
-/// dissimilar gateway prot.
-pub const IPPROTO_DGP = 86;
-
-/// TCF
-pub const IPPROTO_TCF = 87;
-
-/// Cisco/GXS IGRP
-pub const IPPROTO_IGRP = 88;
-
-/// OSPFIGP
-pub const IPPROTO_OSPFIGP = 89;
-
-/// Strite RPC protocol
-pub const IPPROTO_SRPC = 90;
-
-/// Locus Address Resoloution
-pub const IPPROTO_LARP = 91;
-
-/// Multicast Transport
-pub const IPPROTO_MTP = 92;
-
-/// AX.25 Frames
-pub const IPPROTO_AX25 = 93;
-
-/// IP encapsulated in IP
-pub const IPPROTO_IPEIP = 94;
-
-/// Mobile Int.ing control
-pub const IPPROTO_MICP = 95;
-
-/// Semaphore Comm. security
-pub const IPPROTO_SCCSP = 96;
-
-/// Ethernet IP encapsulation
-pub const IPPROTO_ETHERIP = 97;
-
-/// encapsulation header
-pub const IPPROTO_ENCAP = 98;
-
-/// any private encr. scheme
-pub const IPPROTO_APES = 99;
-
-/// GMTP
-pub const IPPROTO_GMTP = 100;
-
-/// payload compression (IPComp)
-pub const IPPROTO_IPCOMP = 108;
-
-/// SCTP
-pub const IPPROTO_SCTP = 132;
-
-/// IPv6 Mobility Header
-pub const IPPROTO_MH = 135;
-
-/// UDP-Lite
-pub const IPPROTO_UDPLITE = 136;
-
-/// IP6 Host Identity Protocol
-pub const IPPROTO_HIP = 139;
-
-/// IP6 Shim6 Protocol
-pub const IPPROTO_SHIM6 = 140;
-
-/// Protocol Independent Mcast
-pub const IPPROTO_PIM = 103;
-
-/// CARP
-pub const IPPROTO_CARP = 112;
-
-/// PGM
-pub const IPPROTO_PGM = 113;
-
-/// MPLS-in-IP
-pub const IPPROTO_MPLS = 137;
-
-/// PFSYNC
-pub const IPPROTO_PFSYNC = 240;
-
-/// Reserved
-pub const IPPROTO_RESERVED_253 = 253;
-
-/// Reserved
-pub const IPPROTO_RESERVED_254 = 254;
-
-pub const rlimit_resource = enum(c_int) {
- CPU = 0,
- FSIZE = 1,
- DATA = 2,
- STACK = 3,
- CORE = 4,
- RSS = 5,
- MEMLOCK = 6,
- NPROC = 7,
- NOFILE = 8,
- SBSIZE = 9,
- VMEM = 10,
- NPTS = 11,
- SWAP = 12,
- KQUEUES = 13,
- UMTXP = 14,
- _,
-
- pub const AS: rlimit_resource = .VMEM;
-};
-
-pub const rlim_t = i64;
-
-/// No limit
-pub const RLIM_INFINITY: rlim_t = (1 << 63) - 1;
-
-pub const RLIM_SAVED_MAX = RLIM_INFINITY;
-pub const RLIM_SAVED_CUR = RLIM_INFINITY;
-
-pub const rlimit = extern struct {
- /// Soft limit
- cur: rlim_t,
- /// Hard limit
- max: rlim_t,
-};
-
-pub const SHUT_RD = 0;
-pub const SHUT_WR = 1;
-pub const SHUT_RDWR = 2;
-
-// TODO fill out if needed
-pub const directory_which = enum(c_int) {
- B_USER_SETTINGS_DIRECTORY = 0xbbe,
-
- _,
-};
-
-pub const cc_t = u8;
-pub const speed_t = u8;
-pub const tcflag_t = u32;
-
-pub const NCCS = 32;
-
-pub const termios = extern struct {
- c_iflag: tcflag_t,
- c_oflag: tcflag_t,
- c_cflag: tcflag_t,
- c_lflag: tcflag_t,
- c_line: cc_t,
- c_ispeed: speed_t,
- c_ospeed: speed_t,
- cc_t: [NCCS]cc_t,
-};
diff --git a/lib/std/os/bits/linux/arm-eabi.zig b/lib/std/os/bits/linux/arm-eabi.zig
index 91ca2b32d2..c948700e83 100644
--- a/lib/std/os/bits/linux/arm-eabi.zig
+++ b/lib/std/os/bits/linux/arm-eabi.zig
@@ -551,7 +551,7 @@ pub const dev_t = u64;
pub const blkcnt_t = i64;
// The `stat` definition used by the Linux kernel.
-pub const kernel_stat = extern struct {
+pub const Stat = extern struct {
dev: dev_t,
__dev_padding: u32,
__ino_truncated: u32,
@@ -582,9 +582,6 @@ pub const kernel_stat = extern struct {
}
};
-// The `stat64` definition used by the libc.
-pub const libc_stat = kernel_stat;
-
pub const timespec = extern struct {
tv_sec: i32,
tv_nsec: i32,
diff --git a/lib/std/os/bits/linux/arm64.zig b/lib/std/os/bits/linux/arm64.zig
index 67c77ce186..46d730d441 100644
--- a/lib/std/os/bits/linux/arm64.zig
+++ b/lib/std/os/bits/linux/arm64.zig
@@ -424,7 +424,7 @@ pub const dev_t = usize;
pub const blkcnt_t = isize;
// The `stat` definition used by the Linux kernel.
-pub const kernel_stat = extern struct {
+pub const Stat = extern struct {
dev: dev_t,
ino: ino_t,
mode: mode_t,
@@ -455,9 +455,6 @@ pub const kernel_stat = extern struct {
}
};
-// The `stat64` definition used by the libc.
-pub const libc_stat = kernel_stat;
-
pub const timespec = extern struct {
tv_sec: time_t,
tv_nsec: isize,
diff --git a/lib/std/os/bits/linux/i386.zig b/lib/std/os/bits/linux/i386.zig
index 723a249177..5c197e070a 100644
--- a/lib/std/os/bits/linux/i386.zig
+++ b/lib/std/os/bits/linux/i386.zig
@@ -599,7 +599,7 @@ pub const dev_t = u64;
pub const blkcnt_t = i64;
// The `stat` definition used by the Linux kernel.
-pub const kernel_stat = extern struct {
+pub const Stat = extern struct {
dev: dev_t,
__dev_padding: u32,
__ino_truncated: u32,
@@ -630,9 +630,6 @@ pub const kernel_stat = extern struct {
}
};
-// The `stat64` definition used by the libc.
-pub const libc_stat = kernel_stat;
-
pub const timespec = extern struct {
tv_sec: i32,
tv_nsec: i32,
diff --git a/lib/std/os/bits/linux/mips.zig b/lib/std/os/bits/linux/mips.zig
index ddf241fb4d..14c686575a 100644
--- a/lib/std/os/bits/linux/mips.zig
+++ b/lib/std/os/bits/linux/mips.zig
@@ -540,7 +540,7 @@ pub const dev_t = u64;
pub const blkcnt_t = i64;
// The `stat` definition used by the Linux kernel.
-pub const kernel_stat = extern struct {
+pub const Stat = extern struct {
dev: u32,
__pad0: [3]u32, // Reserved for st_dev expansion
ino: ino_t,
@@ -572,38 +572,6 @@ pub const kernel_stat = extern struct {
}
};
-pub const libc_stat = extern struct {
- dev: dev_t,
- __pad0: [2]u32,
- ino: ino_t,
- mode: mode_t,
- nlink: nlink_t,
- uid: uid_t,
- gid: gid_t,
- rdev: dev_t,
- __pad1: [2]u32,
- size: off_t,
- atim: timespec,
- mtim: timespec,
- ctim: timespec,
- blksize: blksize_t,
- __pad3: u32,
- blocks: blkcnt_t,
- __pad4: [14]u32,
-
- pub fn atime(self: @This()) timespec {
- return self.atim;
- }
-
- pub fn mtime(self: @This()) timespec {
- return self.mtim;
- }
-
- pub fn ctime(self: @This()) timespec {
- return self.ctim;
- }
-};
-
pub const timespec = extern struct {
tv_sec: isize,
tv_nsec: isize,
diff --git a/lib/std/os/bits/linux/powerpc.zig b/lib/std/os/bits/linux/powerpc.zig
index 06f8e326ba..9c11de9ed5 100644
--- a/lib/std/os/bits/linux/powerpc.zig
+++ b/lib/std/os/bits/linux/powerpc.zig
@@ -539,7 +539,7 @@ pub const dev_t = u64;
pub const blkcnt_t = i64;
// The `stat` definition used by the Linux kernel.
-pub const kernel_stat = extern struct {
+pub const Stat = extern struct {
dev: dev_t,
ino: ino_t,
mode: mode_t,
@@ -569,9 +569,6 @@ pub const kernel_stat = extern struct {
}
};
-// The `stat64` definition used by the libc.
-pub const libc_stat = kernel_stat;
-
pub const timespec = extern struct {
tv_sec: time_t,
tv_nsec: isize,
diff --git a/lib/std/os/bits/linux/powerpc64.zig b/lib/std/os/bits/linux/powerpc64.zig
index 74c6ad11fc..5f1307d1fa 100644
--- a/lib/std/os/bits/linux/powerpc64.zig
+++ b/lib/std/os/bits/linux/powerpc64.zig
@@ -515,7 +515,7 @@ pub const dev_t = u64;
pub const blkcnt_t = i64;
// The `stat` definition used by the Linux kernel.
-pub const kernel_stat = extern struct {
+pub const Stat = extern struct {
dev: dev_t,
ino: ino_t,
nlink: nlink_t,
@@ -544,9 +544,6 @@ pub const kernel_stat = extern struct {
}
};
-// The `stat64` definition used by the libc.
-pub const libc_stat = kernel_stat;
-
pub const timespec = extern struct {
tv_sec: time_t,
tv_nsec: isize,
diff --git a/lib/std/os/bits/linux/riscv64.zig b/lib/std/os/bits/linux/riscv64.zig
index 7a0811cc1a..5e392cd817 100644
--- a/lib/std/os/bits/linux/riscv64.zig
+++ b/lib/std/os/bits/linux/riscv64.zig
@@ -386,7 +386,7 @@ pub const Flock = extern struct {
};
// The `stat` definition used by the Linux kernel.
-pub const kernel_stat = extern struct {
+pub const Stat = extern struct {
dev: dev_t,
ino: ino_t,
mode: mode_t,
@@ -417,7 +417,4 @@ pub const kernel_stat = extern struct {
}
};
-// The `stat64` definition used by the libc.
-pub const libc_stat = kernel_stat;
-
pub const Elf_Symndx = u32;
diff --git a/lib/std/os/bits/linux/sparc64.zig b/lib/std/os/bits/linux/sparc64.zig
index 5c67b745f0..39b061080e 100644
--- a/lib/std/os/bits/linux/sparc64.zig
+++ b/lib/std/os/bits/linux/sparc64.zig
@@ -489,42 +489,8 @@ pub const off_t = i64;
pub const ino_t = u64;
pub const mode_t = u32;
-// The `stat64` definition used by the libc.
-pub const libc_stat = extern struct {
- dev: u64,
- ino: ino_t,
- mode: u32,
- nlink: usize,
-
- uid: u32,
- gid: u32,
- rdev: u64,
- __pad0: u32,
-
- size: off_t,
- blksize: isize,
- blocks: i64,
-
- atim: timespec,
- mtim: timespec,
- ctim: timespec,
- __unused: [2]isize,
-
- pub fn atime(self: libc_stat) timespec {
- return self.atim;
- }
-
- pub fn mtime(self: libc_stat) timespec {
- return self.mtim;
- }
-
- pub fn ctime(self: libc_stat) timespec {
- return self.ctim;
- }
-};
-
// The `stat64` definition used by the kernel.
-pub const kernel_stat = extern struct {
+pub const Stat = extern struct {
dev: u64,
ino: u64,
nlink: u64,
diff --git a/lib/std/os/bits/netbsd.zig b/lib/std/os/bits/netbsd.zig
deleted file mode 100644
index 2ed4d89aa4..0000000000
--- a/lib/std/os/bits/netbsd.zig
+++ /dev/null
@@ -1,1326 +0,0 @@
-const std = @import("../../std.zig");
-const builtin = std.builtin;
-const maxInt = std.math.maxInt;
-
-pub const blkcnt_t = i64;
-pub const blksize_t = i32;
-pub const clock_t = u32;
-pub const dev_t = u64;
-pub const fd_t = i32;
-pub const gid_t = u32;
-pub const ino_t = u64;
-pub const mode_t = u32;
-pub const nlink_t = u32;
-pub const off_t = i64;
-pub const pid_t = i32;
-pub const socklen_t = u32;
-pub const time_t = i64;
-pub const uid_t = u32;
-pub const lwpid_t = i32;
-pub const suseconds_t = c_int;
-
-/// Renamed from `kevent` to `Kevent` to avoid conflict with function name.
-pub const Kevent = extern struct {
- ident: usize,
- filter: i32,
- flags: u32,
- fflags: u32,
- data: i64,
- udata: usize,
-};
-
-pub const RTLD_LAZY = 1;
-pub const RTLD_NOW = 2;
-pub const RTLD_GLOBAL = 0x100;
-pub const RTLD_LOCAL = 0x200;
-pub const RTLD_NODELETE = 0x01000;
-pub const RTLD_NOLOAD = 0x02000;
-
-pub const RTLD_NEXT = @intToPtr(*c_void, @bitCast(usize, @as(isize, -1)));
-pub const RTLD_DEFAULT = @intToPtr(*c_void, @bitCast(usize, @as(isize, -2)));
-pub const RTLD_SELF = @intToPtr(*c_void, @bitCast(usize, @as(isize, -3)));
-
-pub const dl_phdr_info = extern struct {
- dlpi_addr: usize,
- dlpi_name: ?[*:0]const u8,
- dlpi_phdr: [*]std.elf.Phdr,
- dlpi_phnum: u16,
-};
-
-pub const Flock = extern struct {
- l_start: off_t,
- l_len: off_t,
- l_pid: pid_t,
- l_type: i16,
- l_whence: i16,
-};
-
-pub const addrinfo = extern struct {
- flags: i32,
- family: i32,
- socktype: i32,
- protocol: i32,
- addrlen: socklen_t,
- canonname: ?[*:0]u8,
- addr: ?*sockaddr,
- next: ?*addrinfo,
-};
-
-pub const EAI = 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,
-
- /// invalid value for hints
- BADHINTS = 12,
-
- /// resolved protocol is unknown
- PROTOCOL = 13,
-
- /// argument buffer overflow
- OVERFLOW = 14,
-
- _,
-};
-
-pub const EAI_MAX = 15;
-
-pub const msghdr = extern struct {
- /// optional address
- msg_name: ?*sockaddr,
-
- /// size of address
- msg_namelen: socklen_t,
-
- /// scatter/gather array
- msg_iov: [*]iovec,
-
- /// # elements in msg_iov
- msg_iovlen: i32,
-
- /// ancillary data
- msg_control: ?*c_void,
-
- /// ancillary data buffer len
- msg_controllen: socklen_t,
-
- /// flags on received message
- msg_flags: i32,
-};
-
-pub const msghdr_const = extern struct {
- /// optional address
- msg_name: ?*const sockaddr,
-
- /// size of address
- msg_namelen: socklen_t,
-
- /// scatter/gather array
- msg_iov: [*]iovec_const,
-
- /// # elements in msg_iov
- msg_iovlen: i32,
-
- /// ancillary data
- msg_control: ?*c_void,
-
- /// ancillary data buffer len
- msg_controllen: socklen_t,
-
- /// flags on received message
- msg_flags: i32,
-};
-
-pub const libc_stat = extern struct {
- dev: dev_t,
- mode: mode_t,
- ino: ino_t,
- nlink: nlink_t,
- uid: uid_t,
- gid: gid_t,
- rdev: dev_t,
- atim: timespec,
- mtim: timespec,
- ctim: timespec,
- birthtim: timespec,
- size: off_t,
- blocks: blkcnt_t,
- blksize: blksize_t,
- flags: u32,
- gen: u32,
- __spare: [2]u32,
-
- pub fn atime(self: @This()) timespec {
- return self.atim;
- }
-
- pub fn mtime(self: @This()) timespec {
- return self.mtim;
- }
-
- pub fn ctime(self: @This()) timespec {
- return self.ctim;
- }
-};
-
-pub const timespec = extern struct {
- tv_sec: i64,
- tv_nsec: isize,
-};
-
-pub const timeval = extern struct {
- /// seconds
- tv_sec: time_t,
- /// microseconds
- tv_usec: suseconds_t,
-};
-
-pub const MAXNAMLEN = 511;
-
-pub const dirent = extern struct {
- d_fileno: ino_t,
- d_reclen: u16,
- d_namlen: u16,
- d_type: u8,
- d_name: [MAXNAMLEN:0]u8,
-
- pub fn reclen(self: dirent) u16 {
- return self.d_reclen;
- }
-};
-
-pub const SOCK_STREAM = 1;
-pub const SOCK_DGRAM = 2;
-pub const SOCK_RAW = 3;
-pub const SOCK_RDM = 4;
-pub const SOCK_SEQPACKET = 5;
-pub const SOCK_CONN_DGRAM = 6;
-pub const SOCK_DCCP = SOCK_CONN_DGRAM;
-
-pub const SOCK_CLOEXEC = 0x10000000;
-pub const SOCK_NONBLOCK = 0x20000000;
-pub const SOCK_NOSIGPIPE = 0x40000000;
-pub const SOCK_FLAGS_MASK = 0xf0000000;
-
-pub const SO_DEBUG = 0x0001;
-pub const SO_ACCEPTCONN = 0x0002;
-pub const SO_REUSEADDR = 0x0004;
-pub const SO_KEEPALIVE = 0x0008;
-pub const SO_DONTROUTE = 0x0010;
-pub const SO_BROADCAST = 0x0020;
-pub const SO_USELOOPBACK = 0x0040;
-pub const SO_LINGER = 0x0080;
-pub const SO_OOBINLINE = 0x0100;
-pub const SO_REUSEPORT = 0x0200;
-pub const SO_NOSIGPIPE = 0x0800;
-pub const SO_ACCEPTFILTER = 0x1000;
-pub const SO_TIMESTAMP = 0x2000;
-pub const SO_RERROR = 0x4000;
-
-pub const SO_SNDBUF = 0x1001;
-pub const SO_RCVBUF = 0x1002;
-pub const SO_SNDLOWAT = 0x1003;
-pub const SO_RCVLOWAT = 0x1004;
-pub const SO_ERROR = 0x1007;
-pub const SO_TYPE = 0x1008;
-pub const SO_OVERFLOWED = 0x1009;
-
-pub const SO_NOHEADER = 0x100a;
-pub const SO_SNDTIMEO = 0x100b;
-pub const SO_RCVTIMEO = 0x100c;
-
-pub const SOL_SOCKET = 0xffff;
-
-pub const PF_UNSPEC = AF_UNSPEC;
-pub const PF_LOCAL = AF_LOCAL;
-pub const PF_UNIX = PF_LOCAL;
-pub const PF_INET = AF_INET;
-pub const PF_IMPLINK = AF_IMPLINK;
-pub const PF_PUP = AF_PUP;
-pub const PF_CHAOS = AF_CHAOS;
-pub const PF_NS = AF_NS;
-pub const PF_ISO = AF_ISO;
-pub const PF_OSI = AF_ISO;
-pub const PF_ECMA = AF_ECMA;
-pub const PF_DATAKIT = AF_DATAKIT;
-pub const PF_CCITT = AF_CCITT;
-pub const PF_SNA = AF_SNA;
-pub const PF_DECnet = AF_DECnet;
-pub const PF_DLI = AF_DLI;
-pub const PF_LAT = AF_LAT;
-pub const PF_HYLINK = AF_HYLINK;
-pub const PF_APPLETALK = AF_APPLETALK;
-pub const PF_OROUTE = AF_OROUTE;
-pub const PF_LINK = AF_LINK;
-pub const PF_COIP = AF_COIP;
-pub const PF_CNT = AF_CNT;
-pub const PF_INET6 = AF_INET6;
-pub const PF_IPX = AF_IPX;
-pub const PF_ISDN = AF_ISDN;
-pub const PF_E164 = AF_E164;
-pub const PF_NATM = AF_NATM;
-pub const PF_ARP = AF_ARP;
-pub const PF_BLUETOOTH = AF_BLUETOOTH;
-pub const PF_MPLS = AF_MPLS;
-pub const PF_ROUTE = AF_ROUTE;
-pub const PF_CAN = AF_CAN;
-pub const PF_ETHER = AF_ETHER;
-pub const PF_MAX = AF_MAX;
-
-pub const AF_UNSPEC = 0;
-pub const AF_LOCAL = 1;
-pub const AF_UNIX = AF_LOCAL;
-pub const AF_INET = 2;
-pub const AF_IMPLINK = 3;
-pub const AF_PUP = 4;
-pub const AF_CHAOS = 5;
-pub const AF_NS = 6;
-pub const AF_ISO = 7;
-pub const AF_OSI = AF_ISO;
-pub const AF_ECMA = 8;
-pub const AF_DATAKIT = 9;
-pub const AF_CCITT = 10;
-pub const AF_SNA = 11;
-pub const AF_DECnet = 12;
-pub const AF_DLI = 13;
-pub const AF_LAT = 14;
-pub const AF_HYLINK = 15;
-pub const AF_APPLETALK = 16;
-pub const AF_OROUTE = 17;
-pub const AF_LINK = 18;
-pub const AF_COIP = 20;
-pub const AF_CNT = 21;
-pub const AF_IPX = 23;
-pub const AF_INET6 = 24;
-pub const AF_ISDN = 26;
-pub const AF_E164 = AF_ISDN;
-pub const AF_NATM = 27;
-pub const AF_ARP = 28;
-pub const AF_BLUETOOTH = 31;
-pub const AF_IEEE80211 = 32;
-pub const AF_MPLS = 33;
-pub const AF_ROUTE = 34;
-pub const AF_CAN = 35;
-pub const AF_ETHER = 36;
-pub const AF_MAX = 37;
-
-pub const in_port_t = u16;
-pub const sa_family_t = u8;
-
-pub const sockaddr = extern struct {
- /// total length
- len: u8,
-
- /// address family
- family: sa_family_t,
-
- /// actually longer; address value
- data: [14]u8,
-};
-
-pub const sockaddr_storage = std.x.os.Socket.Address.Native.Storage;
-
-pub const sockaddr_in = extern struct {
- len: u8 = @sizeOf(sockaddr_in),
- family: sa_family_t = AF_INET,
- port: in_port_t,
- addr: u32,
- zero: [8]u8 = [8]u8{ 0, 0, 0, 0, 0, 0, 0, 0 },
-};
-
-pub const sockaddr_in6 = extern struct {
- len: u8 = @sizeOf(sockaddr_in6),
- family: sa_family_t = AF_INET6,
- port: in_port_t,
- flowinfo: u32,
- addr: [16]u8,
- scope_id: u32,
-};
-
-/// Definitions for UNIX IPC domain.
-pub const sockaddr_un = extern struct {
- /// total sockaddr length
- len: u8 = @sizeOf(sockaddr_un),
-
- /// AF_LOCAL
- family: sa_family_t = AF_LOCAL,
-
- /// path name
- path: [104]u8,
-};
-
-/// get address to use bind()
-pub const AI_PASSIVE = 0x00000001;
-
-/// fill ai_canonname
-pub const AI_CANONNAME = 0x00000002;
-
-/// prevent host name resolution
-pub const AI_NUMERICHOST = 0x00000004;
-
-/// prevent service name resolution
-pub const AI_NUMERICSERV = 0x00000008;
-
-/// only if any address is assigned
-pub const AI_ADDRCONFIG = 0x00000400;
-
-pub const CTL_KERN = 1;
-pub const CTL_DEBUG = 5;
-
-pub const KERN_PROC_ARGS = 48; // struct: process argv/env
-pub const KERN_PROC_PATHNAME = 5; // path to executable
-pub const KERN_IOV_MAX = 38;
-
-pub const PATH_MAX = 1024;
-pub const IOV_MAX = KERN_IOV_MAX;
-
-pub const STDIN_FILENO = 0;
-pub const STDOUT_FILENO = 1;
-pub const STDERR_FILENO = 2;
-
-pub const PROT_NONE = 0;
-pub const PROT_READ = 1;
-pub const PROT_WRITE = 2;
-pub const PROT_EXEC = 4;
-
-pub const CLOCK_REALTIME = 0;
-pub const CLOCK_VIRTUAL = 1;
-pub const CLOCK_PROF = 2;
-pub const CLOCK_MONOTONIC = 3;
-pub const CLOCK_THREAD_CPUTIME_ID = 0x20000000;
-pub const CLOCK_PROCESS_CPUTIME_ID = 0x40000000;
-
-pub const MAP_FAILED = @intToPtr(*c_void, maxInt(usize));
-pub const MAP_SHARED = 0x0001;
-pub const MAP_PRIVATE = 0x0002;
-pub const MAP_REMAPDUP = 0x0004;
-pub const MAP_FIXED = 0x0010;
-pub const MAP_RENAME = 0x0020;
-pub const MAP_NORESERVE = 0x0040;
-pub const MAP_INHERIT = 0x0080;
-pub const MAP_HASSEMAPHORE = 0x0200;
-pub const MAP_TRYFIXED = 0x0400;
-pub const MAP_WIRED = 0x0800;
-
-pub const MAP_FILE = 0x0000;
-pub const MAP_NOSYNC = 0x0800;
-pub const MAP_ANON = 0x1000;
-pub const MAP_ANONYMOUS = MAP_ANON;
-pub const MAP_STACK = 0x2000;
-
-pub const WNOHANG = 0x00000001;
-pub const WUNTRACED = 0x00000002;
-pub const WSTOPPED = WUNTRACED;
-pub const WCONTINUED = 0x00000010;
-pub const WNOWAIT = 0x00010000;
-pub const WEXITED = 0x00000020;
-pub const WTRAPPED = 0x00000040;
-
-pub const SA_ONSTACK = 0x0001;
-pub const SA_RESTART = 0x0002;
-pub const SA_RESETHAND = 0x0004;
-pub const SA_NOCLDSTOP = 0x0008;
-pub const SA_NODEFER = 0x0010;
-pub const SA_NOCLDWAIT = 0x0020;
-pub const SA_SIGINFO = 0x0040;
-
-pub const SIGHUP = 1;
-pub const SIGINT = 2;
-pub const SIGQUIT = 3;
-pub const SIGILL = 4;
-pub const SIGTRAP = 5;
-pub const SIGABRT = 6;
-pub const SIGIOT = SIGABRT;
-pub const SIGEMT = 7;
-pub const SIGFPE = 8;
-pub const SIGKILL = 9;
-pub const SIGBUS = 10;
-pub const SIGSEGV = 11;
-pub const SIGSYS = 12;
-pub const SIGPIPE = 13;
-pub const SIGALRM = 14;
-pub const SIGTERM = 15;
-pub const SIGURG = 16;
-pub const SIGSTOP = 17;
-pub const SIGTSTP = 18;
-pub const SIGCONT = 19;
-pub const SIGCHLD = 20;
-pub const SIGTTIN = 21;
-pub const SIGTTOU = 22;
-pub const SIGIO = 23;
-pub const SIGXCPU = 24;
-pub const SIGXFSZ = 25;
-pub const SIGVTALRM = 26;
-pub const SIGPROF = 27;
-pub const SIGWINCH = 28;
-pub const SIGINFO = 29;
-pub const SIGUSR1 = 30;
-pub const SIGUSR2 = 31;
-pub const SIGPWR = 32;
-
-pub const SIGRTMIN = 33;
-pub const SIGRTMAX = 63;
-
-// access function
-pub const F_OK = 0; // test for existence of file
-pub const X_OK = 1; // test for execute or search permission
-pub const W_OK = 2; // test for write permission
-pub const R_OK = 4; // test for read permission
-
-/// open for reading only
-pub const O_RDONLY = 0x00000000;
-
-/// open for writing only
-pub const O_WRONLY = 0x00000001;
-
-/// open for reading and writing
-pub const O_RDWR = 0x00000002;
-
-/// mask for above modes
-pub const O_ACCMODE = 0x00000003;
-
-/// no delay
-pub const O_NONBLOCK = 0x00000004;
-
-/// set append mode
-pub const O_APPEND = 0x00000008;
-
-/// open with shared file lock
-pub const O_SHLOCK = 0x00000010;
-
-/// open with exclusive file lock
-pub const O_EXLOCK = 0x00000020;
-
-/// signal pgrp when data ready
-pub const O_ASYNC = 0x00000040;
-
-/// synchronous writes
-pub const O_SYNC = 0x00000080;
-
-/// don't follow symlinks on the last
-pub const O_NOFOLLOW = 0x00000100;
-
-/// create if nonexistent
-pub const O_CREAT = 0x00000200;
-
-/// truncate to zero length
-pub const O_TRUNC = 0x00000400;
-
-/// error if already exists
-pub const O_EXCL = 0x00000800;
-
-/// don't assign controlling terminal
-pub const O_NOCTTY = 0x00008000;
-
-/// write: I/O data completion
-pub const O_DSYNC = 0x00010000;
-
-/// read: I/O completion as for write
-pub const O_RSYNC = 0x00020000;
-
-/// use alternate i/o semantics
-pub const O_ALT_IO = 0x00040000;
-
-/// direct I/O hint
-pub const O_DIRECT = 0x00080000;
-
-/// fail if not a directory
-pub const O_DIRECTORY = 0x00200000;
-
-/// set close on exec
-pub const O_CLOEXEC = 0x00400000;
-
-/// skip search permission checks
-pub const O_SEARCH = 0x00800000;
-
-pub const F_DUPFD = 0;
-pub const F_GETFD = 1;
-pub const F_SETFD = 2;
-pub const F_GETFL = 3;
-pub const F_SETFL = 4;
-
-pub const F_GETOWN = 5;
-pub const F_SETOWN = 6;
-
-pub const F_GETLK = 7;
-pub const F_SETLK = 8;
-pub const F_SETLKW = 9;
-
-pub const F_RDLCK = 1;
-pub const F_WRLCK = 3;
-pub const F_UNLCK = 2;
-
-pub const LOCK_SH = 1;
-pub const LOCK_EX = 2;
-pub const LOCK_UN = 8;
-pub const LOCK_NB = 4;
-
-pub const FD_CLOEXEC = 1;
-
-pub const SEEK_SET = 0;
-pub const SEEK_CUR = 1;
-pub const SEEK_END = 2;
-
-pub const SIG_BLOCK = 1;
-pub const SIG_UNBLOCK = 2;
-pub const SIG_SETMASK = 3;
-
-pub const DT_UNKNOWN = 0;
-pub const DT_FIFO = 1;
-pub const DT_CHR = 2;
-pub const DT_DIR = 4;
-pub const DT_BLK = 6;
-pub const DT_REG = 8;
-pub const DT_LNK = 10;
-pub const DT_SOCK = 12;
-pub const DT_WHT = 14;
-
-/// add event to kq (implies enable)
-pub const EV_ADD = 0x0001;
-
-/// delete event from kq
-pub const EV_DELETE = 0x0002;
-
-/// enable event
-pub const EV_ENABLE = 0x0004;
-
-/// disable event (not reported)
-pub const EV_DISABLE = 0x0008;
-
-/// only report one occurrence
-pub const EV_ONESHOT = 0x0010;
-
-/// clear event state after reporting
-pub const EV_CLEAR = 0x0020;
-
-/// force immediate event output
-/// ... with or without EV_ERROR
-/// ... use KEVENT_FLAG_ERROR_EVENTS
-/// on syscalls supporting flags
-pub const EV_RECEIPT = 0x0040;
-
-/// disable event after reporting
-pub const EV_DISPATCH = 0x0080;
-
-pub const EVFILT_READ = 0;
-pub const EVFILT_WRITE = 1;
-
-/// attached to aio requests
-pub const EVFILT_AIO = 2;
-
-/// attached to vnodes
-pub const EVFILT_VNODE = 3;
-
-/// attached to struct proc
-pub const EVFILT_PROC = 4;
-
-/// attached to struct proc
-pub const EVFILT_SIGNAL = 5;
-
-/// timers
-pub const EVFILT_TIMER = 6;
-
-/// Filesystem events
-pub const EVFILT_FS = 7;
-
-/// On input, NOTE_TRIGGER causes the event to be triggered for output.
-pub const NOTE_TRIGGER = 0x08000000;
-
-/// low water mark
-pub const NOTE_LOWAT = 0x00000001;
-
-/// vnode was removed
-pub const NOTE_DELETE = 0x00000001;
-
-/// data contents changed
-pub const NOTE_WRITE = 0x00000002;
-
-/// size increased
-pub const NOTE_EXTEND = 0x00000004;
-
-/// attributes changed
-pub const NOTE_ATTRIB = 0x00000008;
-
-/// link count changed
-pub const NOTE_LINK = 0x00000010;
-
-/// vnode was renamed
-pub const NOTE_RENAME = 0x00000020;
-
-/// vnode access was revoked
-pub const NOTE_REVOKE = 0x00000040;
-
-/// process exited
-pub const NOTE_EXIT = 0x80000000;
-
-/// process forked
-pub const NOTE_FORK = 0x40000000;
-
-/// process exec'd
-pub const NOTE_EXEC = 0x20000000;
-
-/// mask for signal & exit status
-pub const NOTE_PDATAMASK = 0x000fffff;
-pub const NOTE_PCTRLMASK = 0xf0000000;
-
-pub const TIOCCBRK = 0x2000747a;
-pub const TIOCCDTR = 0x20007478;
-pub const TIOCCONS = 0x80047462;
-pub const TIOCDCDTIMESTAMP = 0x40107458;
-pub const TIOCDRAIN = 0x2000745e;
-pub const TIOCEXCL = 0x2000740d;
-pub const TIOCEXT = 0x80047460;
-pub const TIOCFLAG_CDTRCTS = 0x10;
-pub const TIOCFLAG_CLOCAL = 0x2;
-pub const TIOCFLAG_CRTSCTS = 0x4;
-pub const TIOCFLAG_MDMBUF = 0x8;
-pub const TIOCFLAG_SOFTCAR = 0x1;
-pub const TIOCFLUSH = 0x80047410;
-pub const TIOCGETA = 0x402c7413;
-pub const TIOCGETD = 0x4004741a;
-pub const TIOCGFLAGS = 0x4004745d;
-pub const TIOCGLINED = 0x40207442;
-pub const TIOCGPGRP = 0x40047477;
-pub const TIOCGQSIZE = 0x40047481;
-pub const TIOCGRANTPT = 0x20007447;
-pub const TIOCGSID = 0x40047463;
-pub const TIOCGSIZE = 0x40087468;
-pub const TIOCGWINSZ = 0x40087468;
-pub const TIOCMBIC = 0x8004746b;
-pub const TIOCMBIS = 0x8004746c;
-pub const TIOCMGET = 0x4004746a;
-pub const TIOCMSET = 0x8004746d;
-pub const TIOCM_CAR = 0x40;
-pub const TIOCM_CD = 0x40;
-pub const TIOCM_CTS = 0x20;
-pub const TIOCM_DSR = 0x100;
-pub const TIOCM_DTR = 0x2;
-pub const TIOCM_LE = 0x1;
-pub const TIOCM_RI = 0x80;
-pub const TIOCM_RNG = 0x80;
-pub const TIOCM_RTS = 0x4;
-pub const TIOCM_SR = 0x10;
-pub const TIOCM_ST = 0x8;
-pub const TIOCNOTTY = 0x20007471;
-pub const TIOCNXCL = 0x2000740e;
-pub const TIOCOUTQ = 0x40047473;
-pub const TIOCPKT = 0x80047470;
-pub const TIOCPKT_DATA = 0x0;
-pub const TIOCPKT_DOSTOP = 0x20;
-pub const TIOCPKT_FLUSHREAD = 0x1;
-pub const TIOCPKT_FLUSHWRITE = 0x2;
-pub const TIOCPKT_IOCTL = 0x40;
-pub const TIOCPKT_NOSTOP = 0x10;
-pub const TIOCPKT_START = 0x8;
-pub const TIOCPKT_STOP = 0x4;
-pub const TIOCPTMGET = 0x40287446;
-pub const TIOCPTSNAME = 0x40287448;
-pub const TIOCRCVFRAME = 0x80087445;
-pub const TIOCREMOTE = 0x80047469;
-pub const TIOCSBRK = 0x2000747b;
-pub const TIOCSCTTY = 0x20007461;
-pub const TIOCSDTR = 0x20007479;
-pub const TIOCSETA = 0x802c7414;
-pub const TIOCSETAF = 0x802c7416;
-pub const TIOCSETAW = 0x802c7415;
-pub const TIOCSETD = 0x8004741b;
-pub const TIOCSFLAGS = 0x8004745c;
-pub const TIOCSIG = 0x2000745f;
-pub const TIOCSLINED = 0x80207443;
-pub const TIOCSPGRP = 0x80047476;
-pub const TIOCSQSIZE = 0x80047480;
-pub const TIOCSSIZE = 0x80087467;
-pub const TIOCSTART = 0x2000746e;
-pub const TIOCSTAT = 0x80047465;
-pub const TIOCSTI = 0x80017472;
-pub const TIOCSTOP = 0x2000746f;
-pub const TIOCSWINSZ = 0x80087467;
-pub const TIOCUCNTL = 0x80047466;
-pub const TIOCXMTFRAME = 0x80087444;
-
-pub fn WEXITSTATUS(s: u32) u8 {
- return @intCast(u8, (s >> 8) & 0xff);
-}
-pub fn WTERMSIG(s: u32) u32 {
- return s & 0x7f;
-}
-pub fn WSTOPSIG(s: u32) u32 {
- return WEXITSTATUS(s);
-}
-pub fn WIFEXITED(s: u32) bool {
- return WTERMSIG(s) == 0;
-}
-
-pub fn WIFCONTINUED(s: u32) bool {
- return ((s & 0x7f) == 0xffff);
-}
-
-pub fn WIFSTOPPED(s: u32) bool {
- return ((s & 0x7f != 0x7f) and !WIFCONTINUED(s));
-}
-
-pub fn WIFSIGNALED(s: u32) bool {
- return !WIFSTOPPED(s) and !WIFCONTINUED(s) and !WIFEXITED(s);
-}
-
-pub const winsize = extern struct {
- ws_row: u16,
- ws_col: u16,
- ws_xpixel: u16,
- ws_ypixel: u16,
-};
-
-const NSIG = 32;
-
-pub const SIG_DFL = @intToPtr(?Sigaction.sigaction_fn, 0);
-pub const SIG_IGN = @intToPtr(?Sigaction.sigaction_fn, 1);
-pub const SIG_ERR = @intToPtr(?Sigaction.sigaction_fn, maxInt(usize));
-
-/// Renamed from `sigaction` to `Sigaction` to avoid conflict with the syscall.
-pub const Sigaction = extern struct {
- pub const handler_fn = fn (c_int) callconv(.C) void;
- pub const sigaction_fn = fn (c_int, *const siginfo_t, ?*const c_void) callconv(.C) void;
-
- /// signal handler
- handler: extern union {
- handler: ?handler_fn,
- sigaction: ?sigaction_fn,
- },
- /// signal mask to apply
- mask: sigset_t,
- /// signal options
- flags: c_uint,
-};
-
-pub const sigval_t = extern union {
- int: i32,
- ptr: ?*c_void,
-};
-
-pub const siginfo_t = extern union {
- pad: [128]u8,
- info: _ksiginfo,
-};
-
-pub const _ksiginfo = extern struct {
- signo: i32,
- code: i32,
- errno: i32,
- // 64bit architectures insert 4bytes of padding here, this is done by
- // correctly aligning the reason field
- reason: extern union {
- rt: extern struct {
- pid: pid_t,
- uid: uid_t,
- value: sigval_t,
- },
- child: extern struct {
- pid: pid_t,
- uid: uid_t,
- status: i32,
- utime: clock_t,
- stime: clock_t,
- },
- fault: extern struct {
- addr: ?*c_void,
- trap: i32,
- trap2: i32,
- trap3: i32,
- },
- poll: extern struct {
- band: i32,
- fd: i32,
- },
- syscall: extern struct {
- sysnum: i32,
- retval: [2]i32,
- @"error": i32,
- args: [8]u64,
- },
- ptrace_state: extern struct {
- pe_report_event: i32,
- option: extern union {
- pe_other_pid: pid_t,
- pe_lwp: lwpid_t,
- },
- },
- } align(@sizeOf(usize)),
-};
-
-pub const _SIG_WORDS = 4;
-pub const _SIG_MAXSIG = 128;
-
-pub inline fn _SIG_IDX(sig: usize) usize {
- return sig - 1;
-}
-pub inline fn _SIG_WORD(sig: usize) usize {
- return_SIG_IDX(sig) >> 5;
-}
-pub inline fn _SIG_BIT(sig: usize) usize {
- return 1 << (_SIG_IDX(sig) & 31);
-}
-pub inline fn _SIG_VALID(sig: usize) usize {
- return sig <= _SIG_MAXSIG and sig > 0;
-}
-
-pub const sigset_t = extern struct {
- __bits: [_SIG_WORDS]u32,
-};
-
-pub const empty_sigset = sigset_t{ .__bits = [_]u32{0} ** _SIG_WORDS };
-
-// XXX x86_64 specific
-pub const mcontext_t = extern struct {
- gregs: [26]u64,
- mc_tlsbase: u64,
- fpregs: [512]u8 align(8),
-};
-
-pub const REG_RBP = 12;
-pub const REG_RIP = 21;
-pub const REG_RSP = 24;
-
-pub const ucontext_t = extern struct {
- flags: u32,
- link: ?*ucontext_t,
- sigmask: sigset_t,
- stack: stack_t,
- mcontext: mcontext_t,
- __pad: [
- switch (builtin.cpu.arch) {
- .i386 => 4,
- .mips, .mipsel, .mips64, .mips64el => 14,
- .arm, .armeb, .thumb, .thumbeb => 1,
- .sparc, .sparcel, .sparcv9 => if (@sizeOf(usize) == 4) 43 else 8,
- else => 0,
- }
- ]u32,
-};
-
-pub const E = enum(u16) {
- /// No error occurred.
- SUCCESS = 0,
- PERM = 1, // Operation not permitted
- NOENT = 2, // No such file or directory
- SRCH = 3, // No such process
- INTR = 4, // Interrupted system call
- IO = 5, // Input/output error
- NXIO = 6, // Device not configured
- @"2BIG" = 7, // Argument list too long
- NOEXEC = 8, // Exec format error
- BADF = 9, // Bad file descriptor
- CHILD = 10, // No child processes
- DEADLK = 11, // Resource deadlock avoided
- // 11 was AGAIN
- NOMEM = 12, // Cannot allocate memory
- ACCES = 13, // Permission denied
- FAULT = 14, // Bad address
- NOTBLK = 15, // Block device required
- BUSY = 16, // Device busy
- EXIST = 17, // File exists
- XDEV = 18, // Cross-device link
- NODEV = 19, // Operation not supported by device
- NOTDIR = 20, // Not a directory
- ISDIR = 21, // Is a directory
- INVAL = 22, // Invalid argument
- NFILE = 23, // Too many open files in system
- MFILE = 24, // Too many open files
- NOTTY = 25, // Inappropriate ioctl for device
- TXTBSY = 26, // Text file busy
- FBIG = 27, // File too large
- NOSPC = 28, // No space left on device
- SPIPE = 29, // Illegal seek
- ROFS = 30, // Read-only file system
- MLINK = 31, // Too many links
- PIPE = 32, // Broken pipe
-
- // math software
- DOM = 33, // Numerical argument out of domain
- RANGE = 34, // Result too large or too small
-
- // non-blocking and interrupt i/o
- // also: WOULDBLOCK: operation would block
- AGAIN = 35, // Resource temporarily unavailable
- INPROGRESS = 36, // Operation now in progress
- ALREADY = 37, // Operation already in progress
-
- // ipc/network software -- argument errors
- NOTSOCK = 38, // Socket operation on non-socket
- DESTADDRREQ = 39, // Destination address required
- MSGSIZE = 40, // Message too long
- PROTOTYPE = 41, // Protocol wrong type for socket
- NOPROTOOPT = 42, // Protocol option not available
- PROTONOSUPPORT = 43, // Protocol not supported
- SOCKTNOSUPPORT = 44, // Socket type not supported
- OPNOTSUPP = 45, // Operation not supported
- PFNOSUPPORT = 46, // Protocol family not supported
- AFNOSUPPORT = 47, // Address family not supported by protocol family
- ADDRINUSE = 48, // Address already in use
- ADDRNOTAVAIL = 49, // Can't assign requested address
-
- // ipc/network software -- operational errors
- NETDOWN = 50, // Network is down
- NETUNREACH = 51, // Network is unreachable
- NETRESET = 52, // Network dropped connection on reset
- CONNABORTED = 53, // Software caused connection abort
- CONNRESET = 54, // Connection reset by peer
- NOBUFS = 55, // No buffer space available
- ISCONN = 56, // Socket is already connected
- NOTCONN = 57, // Socket is not connected
- SHUTDOWN = 58, // Can't send after socket shutdown
- TOOMANYREFS = 59, // Too many references: can't splice
- TIMEDOUT = 60, // Operation timed out
- CONNREFUSED = 61, // Connection refused
-
- LOOP = 62, // Too many levels of symbolic links
- NAMETOOLONG = 63, // File name too long
-
- // should be rearranged
- HOSTDOWN = 64, // Host is down
- HOSTUNREACH = 65, // No route to host
- NOTEMPTY = 66, // Directory not empty
-
- // quotas & mush
- PROCLIM = 67, // Too many processes
- USERS = 68, // Too many users
- DQUOT = 69, // Disc quota exceeded
-
- // Network File System
- STALE = 70, // Stale NFS file handle
- REMOTE = 71, // Too many levels of remote in path
- BADRPC = 72, // RPC struct is bad
- RPCMISMATCH = 73, // RPC version wrong
- PROGUNAVAIL = 74, // RPC prog. not avail
- PROGMISMATCH = 75, // Program version wrong
- PROCUNAVAIL = 76, // Bad procedure for program
-
- NOLCK = 77, // No locks available
- NOSYS = 78, // Function not implemented
-
- FTYPE = 79, // Inappropriate file type or format
- AUTH = 80, // Authentication error
- NEEDAUTH = 81, // Need authenticator
-
- // SystemV IPC
- IDRM = 82, // Identifier removed
- NOMSG = 83, // No message of desired type
- OVERFLOW = 84, // Value too large to be stored in data type
-
- // Wide/multibyte-character handling, ISO/IEC 9899/AMD1:1995
- ILSEQ = 85, // Illegal byte sequence
-
- // From IEEE Std 1003.1-2001
- // Base, Realtime, Threads or Thread Priority Scheduling option errors
- NOTSUP = 86, // Not supported
-
- // Realtime option errors
- CANCELED = 87, // Operation canceled
-
- // Realtime, XSI STREAMS option errors
- BADMSG = 88, // Bad or Corrupt message
-
- // XSI STREAMS option errors
- NODATA = 89, // No message available
- NOSR = 90, // No STREAM resources
- NOSTR = 91, // Not a STREAM
- TIME = 92, // STREAM ioctl timeout
-
- // File system extended attribute errors
- NOATTR = 93, // Attribute not found
-
- // Realtime, XSI STREAMS option errors
- MULTIHOP = 94, // Multihop attempted
- NOLINK = 95, // Link has been severed
- PROTO = 96, // Protocol error
-
- _,
-};
-
-pub const MINSIGSTKSZ = 8192;
-pub const SIGSTKSZ = MINSIGSTKSZ + 32768;
-
-pub const SS_ONSTACK = 1;
-pub const SS_DISABLE = 4;
-
-pub const stack_t = extern struct {
- ss_sp: [*]u8,
- ss_size: isize,
- ss_flags: i32,
-};
-
-pub const S_IFMT = 0o170000;
-
-pub const S_IFIFO = 0o010000;
-pub const S_IFCHR = 0o020000;
-pub const S_IFDIR = 0o040000;
-pub const S_IFBLK = 0o060000;
-pub const S_IFREG = 0o100000;
-pub const S_IFLNK = 0o120000;
-pub const S_IFSOCK = 0o140000;
-pub const S_IFWHT = 0o160000;
-
-pub const S_ISUID = 0o4000;
-pub const S_ISGID = 0o2000;
-pub const S_ISVTX = 0o1000;
-pub const S_IRWXU = 0o700;
-pub const S_IRUSR = 0o400;
-pub const S_IWUSR = 0o200;
-pub const S_IXUSR = 0o100;
-pub const S_IRWXG = 0o070;
-pub const S_IRGRP = 0o040;
-pub const S_IWGRP = 0o020;
-pub const S_IXGRP = 0o010;
-pub const S_IRWXO = 0o007;
-pub const S_IROTH = 0o004;
-pub const S_IWOTH = 0o002;
-pub const S_IXOTH = 0o001;
-
-pub fn S_ISFIFO(m: u32) bool {
- return m & S_IFMT == S_IFIFO;
-}
-
-pub fn S_ISCHR(m: u32) bool {
- return m & S_IFMT == S_IFCHR;
-}
-
-pub fn S_ISDIR(m: u32) bool {
- return m & S_IFMT == S_IFDIR;
-}
-
-pub fn S_ISBLK(m: u32) bool {
- return m & S_IFMT == S_IFBLK;
-}
-
-pub fn S_ISREG(m: u32) bool {
- return m & S_IFMT == S_IFREG;
-}
-
-pub fn S_ISLNK(m: u32) bool {
- return m & S_IFMT == S_IFLNK;
-}
-
-pub fn S_ISSOCK(m: u32) bool {
- return m & S_IFMT == S_IFSOCK;
-}
-
-pub fn S_IWHT(m: u32) bool {
- return m & S_IFMT == S_IFWHT;
-}
-
-/// 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 AT_FDCWD = -100;
-
-/// Check access using effective user and group ID
-pub const AT_EACCESS = 0x0100;
-
-/// Do not follow symbolic links
-pub const AT_SYMLINK_NOFOLLOW = 0x0200;
-
-/// Follow symbolic link
-pub const AT_SYMLINK_FOLLOW = 0x0400;
-
-/// Remove directory instead of file
-pub const AT_REMOVEDIR = 0x0800;
-
-pub const HOST_NAME_MAX = 255;
-
-/// dummy for IP
-pub const IPPROTO_IP = 0;
-
-/// IP6 hop-by-hop options
-pub const IPPROTO_HOPOPTS = 0;
-
-/// control message protocol
-pub const IPPROTO_ICMP = 1;
-
-/// group mgmt protocol
-pub const IPPROTO_IGMP = 2;
-
-/// gateway^2 (deprecated)
-pub const IPPROTO_GGP = 3;
-
-/// IP header
-pub const IPPROTO_IPV4 = 4;
-
-/// IP inside IP
-pub const IPPROTO_IPIP = 4;
-
-/// tcp
-pub const IPPROTO_TCP = 6;
-
-/// exterior gateway protocol
-pub const IPPROTO_EGP = 8;
-
-/// pup
-pub const IPPROTO_PUP = 12;
-
-/// user datagram protocol
-pub const IPPROTO_UDP = 17;
-
-/// xns idp
-pub const IPPROTO_IDP = 22;
-
-/// tp-4 w/ class negotiation
-pub const IPPROTO_TP = 29;
-
-/// DCCP
-pub const IPPROTO_DCCP = 33;
-
-/// IP6 header
-pub const IPPROTO_IPV6 = 41;
-
-/// IP6 routing header
-pub const IPPROTO_ROUTING = 43;
-
-/// IP6 fragmentation header
-pub const IPPROTO_FRAGMENT = 44;
-
-/// resource reservation
-pub const IPPROTO_RSVP = 46;
-
-/// GRE encaps RFC 1701
-pub const IPPROTO_GRE = 47;
-
-/// encap. security payload
-pub const IPPROTO_ESP = 50;
-
-/// authentication header
-pub const IPPROTO_AH = 51;
-
-/// IP Mobility RFC 2004
-pub const IPPROTO_MOBILE = 55;
-
-/// IPv6 ICMP
-pub const IPPROTO_IPV6_ICMP = 58;
-
-/// ICMP6
-pub const IPPROTO_ICMPV6 = 58;
-
-/// IP6 no next header
-pub const IPPROTO_NONE = 59;
-
-/// IP6 destination option
-pub const IPPROTO_DSTOPTS = 60;
-
-/// ISO cnlp
-pub const IPPROTO_EON = 80;
-
-/// Ethernet-in-IP
-pub const IPPROTO_ETHERIP = 97;
-
-/// encapsulation header
-pub const IPPROTO_ENCAP = 98;
-
-/// Protocol indep. multicast
-pub const IPPROTO_PIM = 103;
-
-/// IP Payload Comp. Protocol
-pub const IPPROTO_IPCOMP = 108;
-
-/// VRRP RFC 2338
-pub const IPPROTO_VRRP = 112;
-
-/// Common Address Resolution Protocol
-pub const IPPROTO_CARP = 112;
-
-/// L2TPv3
-pub const IPPROTO_L2TP = 115;
-
-/// SCTP
-pub const IPPROTO_SCTP = 132;
-
-/// PFSYNC
-pub const IPPROTO_PFSYNC = 240;
-
-/// raw IP packet
-pub const IPPROTO_RAW = 255;
-
-pub const rlimit_resource = enum(c_int) {
- CPU = 0,
- FSIZE = 1,
- DATA = 2,
- STACK = 3,
- CORE = 4,
- RSS = 5,
- MEMLOCK = 6,
- NPROC = 7,
- NOFILE = 8,
- SBSIZE = 9,
- VMEM = 10,
- NTHR = 11,
- _,
-
- pub const AS: rlimit_resource = .VMEM;
-};
-
-pub const rlim_t = u64;
-
-/// No limit
-pub const RLIM_INFINITY: rlim_t = (1 << 63) - 1;
-
-pub const RLIM_SAVED_MAX = RLIM_INFINITY;
-pub const RLIM_SAVED_CUR = RLIM_INFINITY;
-
-pub const rlimit = extern struct {
- /// Soft limit
- cur: rlim_t,
- /// Hard limit
- max: rlim_t,
-};
-
-pub const SHUT_RD = 0;
-pub const SHUT_WR = 1;
-pub const SHUT_RDWR = 2;
-
-pub const nfds_t = u32;
-
-pub const pollfd = extern struct {
- fd: fd_t,
- events: i16,
- revents: i16,
-};
-
-/// Testable events (may be specified in events field).
-pub const POLLIN = 0x0001;
-pub const POLLPRI = 0x0002;
-pub const POLLOUT = 0x0004;
-pub const POLLRDNORM = 0x0040;
-pub const POLLWRNORM = POLLOUT;
-pub const POLLRDBAND = 0x0080;
-pub const POLLWRBAND = 0x0100;
-
-/// Non-testable events (may not be specified in events field).
-pub const POLLERR = 0x0008;
-pub const POLLHUP = 0x0010;
-pub const POLLNVAL = 0x0020;
diff --git a/lib/std/os/bits/openbsd.zig b/lib/std/os/bits/openbsd.zig
deleted file mode 100644
index d984c9063e..0000000000
--- a/lib/std/os/bits/openbsd.zig
+++ /dev/null
@@ -1,1328 +0,0 @@
-const std = @import("../../std.zig");
-const builtin = std.builtin;
-const maxInt = std.math.maxInt;
-
-pub const blkcnt_t = i64;
-pub const blksize_t = i32;
-pub const clock_t = i64;
-pub const dev_t = i32;
-pub const fd_t = c_int;
-pub const gid_t = u32;
-pub const ino_t = u64;
-pub const mode_t = u32;
-pub const nlink_t = u32;
-pub const off_t = i64;
-pub const pid_t = i32;
-pub const socklen_t = u32;
-pub const time_t = i64;
-pub const uid_t = u32;
-
-/// Renamed from `kevent` to `Kevent` to avoid conflict with function name.
-pub const Kevent = extern struct {
- ident: usize,
- filter: c_short,
- flags: u16,
- fflags: c_uint,
- data: i64,
- udata: usize,
-};
-
-// Modes and flags for dlopen()
-// include/dlfcn.h
-
-/// Bind function calls lazily.
-pub const RTLD_LAZY = 1;
-
-/// Bind function calls immediately.
-pub const RTLD_NOW = 2;
-
-/// Make symbols globally available.
-pub const RTLD_GLOBAL = 0x100;
-
-/// Opposite of RTLD_GLOBAL, and the default.
-pub const RTLD_LOCAL = 0x000;
-
-/// Trace loaded objects and exit.
-pub const RTLD_TRACE = 0x200;
-
-pub const dl_phdr_info = extern struct {
- dlpi_addr: std.elf.Addr,
- dlpi_name: ?[*:0]const u8,
- dlpi_phdr: [*]std.elf.Phdr,
- dlpi_phnum: std.elf.Half,
-};
-
-pub const Flock = extern struct {
- l_start: off_t,
- l_len: off_t,
- l_pid: pid_t,
- l_type: c_short,
- l_whence: c_short,
-};
-
-pub const addrinfo = extern struct {
- flags: c_int,
- family: c_int,
- socktype: c_int,
- protocol: c_int,
- addrlen: socklen_t,
- addr: ?*sockaddr,
- canonname: ?[*:0]u8,
- next: ?*addrinfo,
-};
-
-pub const EAI = 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,
-
- _,
-};
-
-pub const EAI_MAX = 15;
-
-pub const msghdr = extern struct {
- /// optional address
- msg_name: ?*sockaddr,
-
- /// size of address
- msg_namelen: socklen_t,
-
- /// scatter/gather array
- msg_iov: [*]iovec,
-
- /// # elements in msg_iov
- msg_iovlen: c_uint,
-
- /// ancillary data
- msg_control: ?*c_void,
-
- /// ancillary data buffer len
- msg_controllen: socklen_t,
-
- /// flags on received message
- msg_flags: c_int,
-};
-
-pub const msghdr_const = extern struct {
- /// optional address
- msg_name: ?*const sockaddr,
-
- /// size of address
- msg_namelen: socklen_t,
-
- /// scatter/gather array
- msg_iov: [*]iovec_const,
-
- /// # elements in msg_iov
- msg_iovlen: c_uint,
-
- /// ancillary data
- msg_control: ?*c_void,
-
- /// ancillary data buffer len
- msg_controllen: socklen_t,
-
- /// flags on received message
- msg_flags: c_int,
-};
-
-pub const libc_stat = extern struct {
- mode: mode_t,
- dev: dev_t,
- ino: ino_t,
- nlink: nlink_t,
- uid: uid_t,
- gid: gid_t,
- rdev: dev_t,
- atim: timespec,
- mtim: timespec,
- ctim: timespec,
- size: off_t,
- blocks: blkcnt_t,
- blksize: blksize_t,
- flags: u32,
- gen: u32,
- birthtim: timespec,
-
- pub fn atime(self: @This()) timespec {
- return self.atim;
- }
-
- pub fn mtime(self: @This()) timespec {
- return self.mtim;
- }
-
- pub fn ctime(self: @This()) timespec {
- return self.ctim;
- }
-};
-
-pub const timespec = extern struct {
- tv_sec: time_t,
- tv_nsec: c_long,
-};
-
-pub const timeval = extern struct {
- tv_sec: time_t,
- tv_usec: c_long,
-};
-
-pub const timezone = extern struct {
- tz_minuteswest: c_int,
- tz_dsttime: c_int,
-};
-
-pub const MAXNAMLEN = 255;
-
-pub const dirent = extern struct {
- d_fileno: ino_t,
- d_off: off_t,
- d_reclen: u16,
- d_type: u8,
- d_namlen: u8,
- __d_padding: [4]u8,
- d_name: [MAXNAMLEN + 1]u8,
-
- pub fn reclen(self: dirent) u16 {
- return self.d_reclen;
- }
-};
-
-pub const in_port_t = u16;
-pub const sa_family_t = u8;
-
-pub const sockaddr = extern struct {
- /// total length
- len: u8,
-
- /// address family
- family: sa_family_t,
-
- /// actually longer; address value
- data: [14]u8,
-};
-
-pub const sockaddr_storage = std.x.os.Socket.Address.Native.Storage;
-
-pub const sockaddr_in = extern struct {
- len: u8 = @sizeOf(sockaddr_in),
- family: sa_family_t = AF_INET,
- port: in_port_t,
- addr: u32,
- zero: [8]u8 = [8]u8{ 0, 0, 0, 0, 0, 0, 0, 0 },
-};
-
-pub const sockaddr_in6 = extern struct {
- len: u8 = @sizeOf(sockaddr_in6),
- family: sa_family_t = AF_INET6,
- port: in_port_t,
- flowinfo: u32,
- addr: [16]u8,
- scope_id: u32,
-};
-
-/// Definitions for UNIX IPC domain.
-pub const sockaddr_un = extern struct {
- /// total sockaddr length
- len: u8 = @sizeOf(sockaddr_un),
-
- /// AF_LOCAL
- family: sa_family_t = AF_LOCAL,
-
- /// path name
- path: [104]u8,
-};
-
-/// get address to use bind()
-pub const AI_PASSIVE = 1;
-
-/// fill ai_canonname
-pub const AI_CANONNAME = 2;
-
-/// prevent host name resolution
-pub const AI_NUMERICHOST = 4;
-
-/// prevent service name resolution
-pub const AI_NUMERICSERV = 16;
-
-/// only if any address is assigned
-pub const AI_ADDRCONFIG = 64;
-
-pub const PATH_MAX = 1024;
-pub const IOV_MAX = 1024;
-
-pub const STDIN_FILENO = 0;
-pub const STDOUT_FILENO = 1;
-pub const STDERR_FILENO = 2;
-
-pub const PROT_NONE = 0;
-pub const PROT_READ = 1;
-pub const PROT_WRITE = 2;
-pub const PROT_EXEC = 4;
-
-pub const CLOCK_REALTIME = 0;
-pub const CLOCK_PROCESS_CPUTIME_ID = 2;
-pub const CLOCK_MONOTONIC = 3;
-pub const CLOCK_THREAD_CPUTIME_ID = 4;
-
-pub const MAP_FAILED = @intToPtr(*c_void, maxInt(usize));
-pub const MAP_SHARED = 0x0001;
-pub const MAP_PRIVATE = 0x0002;
-pub const MAP_FIXED = 0x0010;
-pub const MAP_RENAME = 0;
-pub const MAP_NORESERVE = 0;
-pub const MAP_INHERIT = 0;
-pub const MAP_HASSEMAPHORE = 0;
-pub const MAP_TRYFIXED = 0;
-
-pub const MAP_FILE = 0;
-pub const MAP_ANON = 0x1000;
-pub const MAP_ANONYMOUS = MAP_ANON;
-pub const MAP_STACK = 0x4000;
-pub const MAP_CONCEAL = 0x8000;
-
-pub const WNOHANG = 1;
-pub const WUNTRACED = 2;
-pub const WCONTINUED = 8;
-
-pub const SA_ONSTACK = 0x0001;
-pub const SA_RESTART = 0x0002;
-pub const SA_RESETHAND = 0x0004;
-pub const SA_NOCLDSTOP = 0x0008;
-pub const SA_NODEFER = 0x0010;
-pub const SA_NOCLDWAIT = 0x0020;
-pub const SA_SIGINFO = 0x0040;
-
-pub const SIGHUP = 1;
-pub const SIGINT = 2;
-pub const SIGQUIT = 3;
-pub const SIGILL = 4;
-pub const SIGTRAP = 5;
-pub const SIGABRT = 6;
-pub const SIGIOT = SIGABRT;
-pub const SIGEMT = 7;
-pub const SIGFPE = 8;
-pub const SIGKILL = 9;
-pub const SIGBUS = 10;
-pub const SIGSEGV = 11;
-pub const SIGSYS = 12;
-pub const SIGPIPE = 13;
-pub const SIGALRM = 14;
-pub const SIGTERM = 15;
-pub const SIGURG = 16;
-pub const SIGSTOP = 17;
-pub const SIGTSTP = 18;
-pub const SIGCONT = 19;
-pub const SIGCHLD = 20;
-pub const SIGTTIN = 21;
-pub const SIGTTOU = 22;
-pub const SIGIO = 23;
-pub const SIGXCPU = 24;
-pub const SIGXFSZ = 25;
-pub const SIGVTALRM = 26;
-pub const SIGPROF = 27;
-pub const SIGWINCH = 28;
-pub const SIGINFO = 29;
-pub const SIGUSR1 = 30;
-pub const SIGUSR2 = 31;
-pub const SIGPWR = 32;
-
-// access function
-pub const F_OK = 0; // test for existence of file
-pub const X_OK = 1; // test for execute or search permission
-pub const W_OK = 2; // test for write permission
-pub const R_OK = 4; // test for read permission
-
-/// open for reading only
-pub const O_RDONLY = 0x00000000;
-
-/// open for writing only
-pub const O_WRONLY = 0x00000001;
-
-/// open for reading and writing
-pub const O_RDWR = 0x00000002;
-
-/// mask for above modes
-pub const O_ACCMODE = 0x00000003;
-
-/// no delay
-pub const O_NONBLOCK = 0x00000004;
-
-/// set append mode
-pub const O_APPEND = 0x00000008;
-
-/// open with shared file lock
-pub const O_SHLOCK = 0x00000010;
-
-/// open with exclusive file lock
-pub const O_EXLOCK = 0x00000020;
-
-/// signal pgrp when data ready
-pub const O_ASYNC = 0x00000040;
-
-/// synchronous writes
-pub const O_SYNC = 0x00000080;
-
-/// don't follow symlinks on the last
-pub const O_NOFOLLOW = 0x00000100;
-
-/// create if nonexistent
-pub const O_CREAT = 0x00000200;
-
-/// truncate to zero length
-pub const O_TRUNC = 0x00000400;
-
-/// error if already exists
-pub const O_EXCL = 0x00000800;
-
-/// don't assign controlling terminal
-pub const O_NOCTTY = 0x00008000;
-
-/// write: I/O data completion
-pub const O_DSYNC = O_SYNC;
-
-/// read: I/O completion as for write
-pub const O_RSYNC = O_SYNC;
-
-/// fail if not a directory
-pub const O_DIRECTORY = 0x20000;
-
-/// set close on exec
-pub const O_CLOEXEC = 0x10000;
-
-pub const F_DUPFD = 0;
-pub const F_GETFD = 1;
-pub const F_SETFD = 2;
-pub const F_GETFL = 3;
-pub const F_SETFL = 4;
-
-pub const F_GETOWN = 5;
-pub const F_SETOWN = 6;
-
-pub const F_GETLK = 7;
-pub const F_SETLK = 8;
-pub const F_SETLKW = 9;
-
-pub const F_RDLCK = 1;
-pub const F_UNLCK = 2;
-pub const F_WRLCK = 3;
-
-pub const LOCK_SH = 0x01;
-pub const LOCK_EX = 0x02;
-pub const LOCK_NB = 0x04;
-pub const LOCK_UN = 0x08;
-
-pub const FD_CLOEXEC = 1;
-
-pub const SEEK_SET = 0;
-pub const SEEK_CUR = 1;
-pub const SEEK_END = 2;
-
-pub const SIG_BLOCK = 1;
-pub const SIG_UNBLOCK = 2;
-pub const SIG_SETMASK = 3;
-
-pub const SOCK_STREAM = 1;
-pub const SOCK_DGRAM = 2;
-pub const SOCK_RAW = 3;
-pub const SOCK_RDM = 4;
-pub const SOCK_SEQPACKET = 5;
-
-pub const SOCK_CLOEXEC = 0x8000;
-pub const SOCK_NONBLOCK = 0x4000;
-
-pub const SO_DEBUG = 0x0001;
-pub const SO_ACCEPTCONN = 0x0002;
-pub const SO_REUSEADDR = 0x0004;
-pub const SO_KEEPALIVE = 0x0008;
-pub const SO_DONTROUTE = 0x0010;
-pub const SO_BROADCAST = 0x0020;
-pub const SO_USELOOPBACK = 0x0040;
-pub const SO_LINGER = 0x0080;
-pub const SO_OOBINLINE = 0x0100;
-pub const SO_REUSEPORT = 0x0200;
-pub const SO_TIMESTAMP = 0x0800;
-pub const SO_BINDANY = 0x1000;
-pub const SO_ZEROIZE = 0x2000;
-pub const SO_SNDBUF = 0x1001;
-pub const SO_RCVBUF = 0x1002;
-pub const SO_SNDLOWAT = 0x1003;
-pub const SO_RCVLOWAT = 0x1004;
-pub const SO_SNDTIMEO = 0x1005;
-pub const SO_RCVTIMEO = 0x1006;
-pub const SO_ERROR = 0x1007;
-pub const SO_TYPE = 0x1008;
-pub const SO_NETPROC = 0x1020;
-pub const SO_RTABLE = 0x1021;
-pub const SO_PEERCRED = 0x1022;
-pub const SO_SPLICE = 0x1023;
-pub const SO_DOMAIN = 0x1024;
-pub const SO_PROTOCOL = 0x1025;
-
-pub const SOL_SOCKET = 0xffff;
-
-pub const PF_UNSPEC = AF_UNSPEC;
-pub const PF_LOCAL = AF_LOCAL;
-pub const PF_UNIX = AF_UNIX;
-pub const PF_INET = AF_INET;
-pub const PF_APPLETALK = AF_APPLETALK;
-pub const PF_INET6 = AF_INET6;
-pub const PF_DECnet = AF_DECnet;
-pub const PF_KEY = AF_KEY;
-pub const PF_ROUTE = AF_ROUTE;
-pub const PF_SNA = AF_SNA;
-pub const PF_MPLS = AF_MPLS;
-pub const PF_BLUETOOTH = AF_BLUETOOTH;
-pub const PF_ISDN = AF_ISDN;
-pub const PF_MAX = AF_MAX;
-
-pub const AF_UNSPEC = 0;
-pub const AF_UNIX = 1;
-pub const AF_LOCAL = AF_UNIX;
-pub const AF_INET = 2;
-pub const AF_APPLETALK = 16;
-pub const AF_INET6 = 24;
-pub const AF_KEY = 30;
-pub const AF_ROUTE = 17;
-pub const AF_SNA = 11;
-pub const AF_MPLS = 33;
-pub const AF_BLUETOOTH = 32;
-pub const AF_ISDN = 26;
-pub const AF_MAX = 36;
-
-pub const DT_UNKNOWN = 0;
-pub const DT_FIFO = 1;
-pub const DT_CHR = 2;
-pub const DT_DIR = 4;
-pub const DT_BLK = 6;
-pub const DT_REG = 8;
-pub const DT_LNK = 10;
-pub const DT_SOCK = 12;
-pub const DT_WHT = 14; // XXX
-
-pub const EV_ADD = 0x0001;
-pub const EV_DELETE = 0x0002;
-pub const EV_ENABLE = 0x0004;
-pub const EV_DISABLE = 0x0008;
-pub const EV_ONESHOT = 0x0010;
-pub const EV_CLEAR = 0x0020;
-pub const EV_RECEIPT = 0x0040;
-pub const EV_DISPATCH = 0x0080;
-pub const EV_FLAG1 = 0x2000;
-pub const EV_ERROR = 0x4000;
-pub const EV_EOF = 0x8000;
-
-pub const EVFILT_READ = -1;
-pub const EVFILT_WRITE = -2;
-pub const EVFILT_AIO = -3;
-pub const EVFILT_VNODE = -4;
-pub const EVFILT_PROC = -5;
-pub const EVFILT_SIGNAL = -6;
-pub const EVFILT_TIMER = -7;
-pub const EVFILT_EXCEPT = -9;
-
-// data/hint flags for EVFILT_{READ|WRITE}
-pub const NOTE_LOWAT = 0x0001;
-pub const NOTE_EOF = 0x0002;
-
-// data/hint flags for EVFILT_EXCEPT and EVFILT_{READ|WRITE}
-pub const NOTE_OOB = 0x0004;
-
-// data/hint flags for EVFILT_VNODE
-pub const NOTE_DELETE = 0x0001;
-pub const NOTE_WRITE = 0x0002;
-pub const NOTE_EXTEND = 0x0004;
-pub const NOTE_ATTRIB = 0x0008;
-pub const NOTE_LINK = 0x0010;
-pub const NOTE_RENAME = 0x0020;
-pub const NOTE_REVOKE = 0x0040;
-pub const NOTE_TRUNCATE = 0x0080;
-
-// data/hint flags for EVFILT_PROC
-pub const NOTE_EXIT = 0x80000000;
-pub const NOTE_FORK = 0x40000000;
-pub const NOTE_EXEC = 0x20000000;
-pub const NOTE_PDATAMASK = 0x000fffff;
-pub const NOTE_PCTRLMASK = 0xf0000000;
-pub const NOTE_TRACK = 0x00000001;
-pub const NOTE_TRACKERR = 0x00000002;
-pub const NOTE_CHILD = 0x00000004;
-
-// data/hint flags for EVFILT_DEVICE
-pub const NOTE_CHANGE = 0x00000001;
-
-pub const TIOCCBRK = 0x2000747a;
-pub const TIOCCDTR = 0x20007478;
-pub const TIOCCONS = 0x80047462;
-pub const TIOCDCDTIMESTAMP = 0x40107458;
-pub const TIOCDRAIN = 0x2000745e;
-pub const TIOCEXCL = 0x2000740d;
-pub const TIOCEXT = 0x80047460;
-pub const TIOCFLAG_CDTRCTS = 0x10;
-pub const TIOCFLAG_CLOCAL = 0x2;
-pub const TIOCFLAG_CRTSCTS = 0x4;
-pub const TIOCFLAG_MDMBUF = 0x8;
-pub const TIOCFLAG_SOFTCAR = 0x1;
-pub const TIOCFLUSH = 0x80047410;
-pub const TIOCGETA = 0x402c7413;
-pub const TIOCGETD = 0x4004741a;
-pub const TIOCGFLAGS = 0x4004745d;
-pub const TIOCGLINED = 0x40207442;
-pub const TIOCGPGRP = 0x40047477;
-pub const TIOCGQSIZE = 0x40047481;
-pub const TIOCGRANTPT = 0x20007447;
-pub const TIOCGSID = 0x40047463;
-pub const TIOCGSIZE = 0x40087468;
-pub const TIOCGWINSZ = 0x40087468;
-pub const TIOCMBIC = 0x8004746b;
-pub const TIOCMBIS = 0x8004746c;
-pub const TIOCMGET = 0x4004746a;
-pub const TIOCMSET = 0x8004746d;
-pub const TIOCM_CAR = 0x40;
-pub const TIOCM_CD = 0x40;
-pub const TIOCM_CTS = 0x20;
-pub const TIOCM_DSR = 0x100;
-pub const TIOCM_DTR = 0x2;
-pub const TIOCM_LE = 0x1;
-pub const TIOCM_RI = 0x80;
-pub const TIOCM_RNG = 0x80;
-pub const TIOCM_RTS = 0x4;
-pub const TIOCM_SR = 0x10;
-pub const TIOCM_ST = 0x8;
-pub const TIOCNOTTY = 0x20007471;
-pub const TIOCNXCL = 0x2000740e;
-pub const TIOCOUTQ = 0x40047473;
-pub const TIOCPKT = 0x80047470;
-pub const TIOCPKT_DATA = 0x0;
-pub const TIOCPKT_DOSTOP = 0x20;
-pub const TIOCPKT_FLUSHREAD = 0x1;
-pub const TIOCPKT_FLUSHWRITE = 0x2;
-pub const TIOCPKT_IOCTL = 0x40;
-pub const TIOCPKT_NOSTOP = 0x10;
-pub const TIOCPKT_START = 0x8;
-pub const TIOCPKT_STOP = 0x4;
-pub const TIOCPTMGET = 0x40287446;
-pub const TIOCPTSNAME = 0x40287448;
-pub const TIOCRCVFRAME = 0x80087445;
-pub const TIOCREMOTE = 0x80047469;
-pub const TIOCSBRK = 0x2000747b;
-pub const TIOCSCTTY = 0x20007461;
-pub const TIOCSDTR = 0x20007479;
-pub const TIOCSETA = 0x802c7414;
-pub const TIOCSETAF = 0x802c7416;
-pub const TIOCSETAW = 0x802c7415;
-pub const TIOCSETD = 0x8004741b;
-pub const TIOCSFLAGS = 0x8004745c;
-pub const TIOCSIG = 0x2000745f;
-pub const TIOCSLINED = 0x80207443;
-pub const TIOCSPGRP = 0x80047476;
-pub const TIOCSQSIZE = 0x80047480;
-pub const TIOCSSIZE = 0x80087467;
-pub const TIOCSTART = 0x2000746e;
-pub const TIOCSTAT = 0x80047465;
-pub const TIOCSTI = 0x80017472;
-pub const TIOCSTOP = 0x2000746f;
-pub const TIOCSWINSZ = 0x80087467;
-pub const TIOCUCNTL = 0x80047466;
-pub const TIOCXMTFRAME = 0x80087444;
-
-pub fn WEXITSTATUS(s: u32) u8 {
- return @intCast(u8, (s >> 8) & 0xff);
-}
-pub fn WTERMSIG(s: u32) u32 {
- return (s & 0x7f);
-}
-pub fn WSTOPSIG(s: u32) u32 {
- return WEXITSTATUS(s);
-}
-pub fn WIFEXITED(s: u32) bool {
- return WTERMSIG(s) == 0;
-}
-
-pub fn WIFCONTINUED(s: u32) bool {
- return ((s & 0o177777) == 0o177777);
-}
-
-pub fn WIFSTOPPED(s: u32) bool {
- return (s & 0xff == 0o177);
-}
-
-pub fn WIFSIGNALED(s: u32) bool {
- return (((s) & 0o177) != 0o177) and (((s) & 0o177) != 0);
-}
-
-pub const winsize = extern struct {
- ws_row: c_ushort,
- ws_col: c_ushort,
- ws_xpixel: c_ushort,
- ws_ypixel: c_ushort,
-};
-
-const NSIG = 33;
-
-pub const SIG_DFL = @intToPtr(?Sigaction.sigaction_fn, 0);
-pub const SIG_IGN = @intToPtr(?Sigaction.sigaction_fn, 1);
-pub const SIG_ERR = @intToPtr(?Sigaction.sigaction_fn, maxInt(usize));
-pub const SIG_CATCH = @intToPtr(?Sigaction.sigaction_fn, 2);
-pub const SIG_HOLD = @intToPtr(?Sigaction.sigaction_fn, 3);
-
-/// Renamed from `sigaction` to `Sigaction` to avoid conflict with the syscall.
-pub const Sigaction = extern struct {
- pub const handler_fn = fn (c_int) callconv(.C) void;
- pub const sigaction_fn = fn (c_int, *const siginfo_t, ?*const c_void) callconv(.C) void;
-
- /// signal handler
- handler: extern union {
- handler: ?handler_fn,
- sigaction: ?sigaction_fn,
- },
- /// signal mask to apply
- mask: sigset_t,
- /// signal options
- flags: c_uint,
-};
-
-pub const sigval = extern union {
- int: c_int,
- ptr: ?*c_void,
-};
-
-pub const siginfo_t = 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: ?*c_void,
- trapno: c_int,
- },
- __pad: [128 - 3 * @sizeOf(c_int)]u8,
- },
-};
-
-comptime {
- if (@sizeOf(usize) == 4)
- std.debug.assert(@sizeOf(siginfo_t) == 128)
- else
- // Take into account the padding between errno and data fields.
- std.debug.assert(@sizeOf(siginfo_t) == 136);
-}
-
-pub usingnamespace switch (builtin.target.cpu.arch) {
- .x86_64 => struct {
- pub const ucontext_t = extern struct {
- sc_rdi: c_long,
- sc_rsi: c_long,
- sc_rdx: c_long,
- sc_rcx: c_long,
- sc_r8: c_long,
- sc_r9: c_long,
- sc_r10: c_long,
- sc_r11: c_long,
- sc_r12: c_long,
- sc_r13: c_long,
- sc_r14: c_long,
- sc_r15: c_long,
- sc_rbp: c_long,
- sc_rbx: c_long,
- sc_rax: c_long,
- sc_gs: c_long,
- sc_fs: c_long,
- sc_es: c_long,
- sc_ds: c_long,
- sc_trapno: c_long,
- sc_err: c_long,
- sc_rip: c_long,
- sc_cs: c_long,
- sc_rflags: c_long,
- sc_rsp: c_long,
- sc_ss: c_long,
-
- sc_fpstate: fxsave64,
- __sc_unused: c_int,
- sc_mask: c_int,
- sc_cookie: c_long,
- };
-
- pub const fxsave64 = packed struct {
- fx_fcw: u16,
- fx_fsw: u16,
- fx_ftw: u8,
- fx_unused1: u8,
- fx_fop: u16,
- fx_rip: u64,
- fx_rdp: u64,
- fx_mxcsr: u32,
- fx_mxcsr_mask: u32,
- fx_st: [8][2]u64,
- fx_xmm: [16][2]u64,
- fx_unused3: [96]u8,
- };
- },
- else => struct {},
-};
-
-pub const sigset_t = c_uint;
-pub const empty_sigset: sigset_t = 0;
-
-pub const E = enum(u16) {
- /// No error occurred.
- SUCCESS = 0,
- PERM = 1, // Operation not permitted
- NOENT = 2, // No such file or directory
- SRCH = 3, // No such process
- INTR = 4, // Interrupted system call
- IO = 5, // Input/output error
- NXIO = 6, // Device not configured
- @"2BIG" = 7, // Argument list too long
- NOEXEC = 8, // Exec format error
- BADF = 9, // Bad file descriptor
- CHILD = 10, // No child processes
- DEADLK = 11, // Resource deadlock avoided
- // 11 was AGAIN
- NOMEM = 12, // Cannot allocate memory
- ACCES = 13, // Permission denied
- FAULT = 14, // Bad address
- NOTBLK = 15, // Block device required
- BUSY = 16, // Device busy
- EXIST = 17, // File exists
- XDEV = 18, // Cross-device link
- NODEV = 19, // Operation not supported by device
- NOTDIR = 20, // Not a directory
- ISDIR = 21, // Is a directory
- INVAL = 22, // Invalid argument
- NFILE = 23, // Too many open files in system
- MFILE = 24, // Too many open files
- NOTTY = 25, // Inappropriate ioctl for device
- TXTBSY = 26, // Text file busy
- FBIG = 27, // File too large
- NOSPC = 28, // No space left on device
- SPIPE = 29, // Illegal seek
- ROFS = 30, // Read-only file system
- MLINK = 31, // Too many links
- PIPE = 32, // Broken pipe
-
- // math software
- DOM = 33, // Numerical argument out of domain
- RANGE = 34, // Result too large or too small
-
- // non-blocking and interrupt i/o
- // also: WOULDBLOCK: operation would block
- AGAIN = 35, // Resource temporarily unavailable
- INPROGRESS = 36, // Operation now in progress
- ALREADY = 37, // Operation already in progress
-
- // ipc/network software -- argument errors
- NOTSOCK = 38, // Socket operation on non-socket
- DESTADDRREQ = 39, // Destination address required
- MSGSIZE = 40, // Message too long
- PROTOTYPE = 41, // Protocol wrong type for socket
- NOPROTOOPT = 42, // Protocol option not available
- PROTONOSUPPORT = 43, // Protocol not supported
- SOCKTNOSUPPORT = 44, // Socket type not supported
- OPNOTSUPP = 45, // Operation not supported
- PFNOSUPPORT = 46, // Protocol family not supported
- AFNOSUPPORT = 47, // Address family not supported by protocol family
- ADDRINUSE = 48, // Address already in use
- ADDRNOTAVAIL = 49, // Can't assign requested address
-
- // ipc/network software -- operational errors
- NETDOWN = 50, // Network is down
- NETUNREACH = 51, // Network is unreachable
- NETRESET = 52, // Network dropped connection on reset
- CONNABORTED = 53, // Software caused connection abort
- CONNRESET = 54, // Connection reset by peer
- NOBUFS = 55, // No buffer space available
- ISCONN = 56, // Socket is already connected
- NOTCONN = 57, // Socket is not connected
- SHUTDOWN = 58, // Can't send after socket shutdown
- TOOMANYREFS = 59, // Too many references: can't splice
- TIMEDOUT = 60, // Operation timed out
- CONNREFUSED = 61, // Connection refused
-
- LOOP = 62, // Too many levels of symbolic links
- NAMETOOLONG = 63, // File name too long
-
- // should be rearranged
- HOSTDOWN = 64, // Host is down
- HOSTUNREACH = 65, // No route to host
- NOTEMPTY = 66, // Directory not empty
-
- // quotas & mush
- PROCLIM = 67, // Too many processes
- USERS = 68, // Too many users
- DQUOT = 69, // Disc quota exceeded
-
- // Network File System
- STALE = 70, // Stale NFS file handle
- REMOTE = 71, // Too many levels of remote in path
- BADRPC = 72, // RPC struct is bad
- RPCMISMATCH = 73, // RPC version wrong
- PROGUNAVAIL = 74, // RPC prog. not avail
- PROGMISMATCH = 75, // Program version wrong
- PROCUNAVAIL = 76, // Bad procedure for program
-
- NOLCK = 77, // No locks available
- NOSYS = 78, // Function not implemented
-
- FTYPE = 79, // Inappropriate file type or format
- AUTH = 80, // Authentication error
- NEEDAUTH = 81, // Need authenticator
- IPSEC = 82, // IPsec processing failure
- NOATTR = 83, // Attribute not found
-
- // Wide/multibyte-character handling, ISO/IEC 9899/AMD1:1995
- ILSEQ = 84, // Illegal byte sequence
-
- NOMEDIUM = 85, // No medium found
- MEDIUMTYPE = 86, // Wrong medium type
- OVERFLOW = 87, // Value too large to be stored in data type
- CANCELED = 88, // Operation canceled
- IDRM = 89, // Identifier removed
- NOMSG = 90, // No message of desired type
- NOTSUP = 91, // Not supported
- BADMSG = 92, // Bad or Corrupt message
- NOTRECOVERABLE = 93, // State not recoverable
- OWNERDEAD = 94, // Previous owner died
- PROTO = 95, // Protocol error
-
- _,
-};
-
-const _MAX_PAGE_SHIFT = switch (builtin.target.cpu.arch) {
- .i386 => 12,
- .sparcv9 => 13,
-};
-pub const MINSIGSTKSZ = 1 << _MAX_PAGE_SHIFT;
-pub const SIGSTKSZ = MINSIGSTKSZ + (1 << _MAX_PAGE_SHIFT) * 4;
-
-pub const SS_ONSTACK = 0x0001;
-pub const SS_DISABLE = 0x0004;
-
-pub const stack_t = extern struct {
- ss_sp: [*]u8,
- ss_size: usize,
- ss_flags: c_int,
-};
-
-pub const S_IFMT = 0o170000;
-
-pub const S_IFIFO = 0o010000;
-pub const S_IFCHR = 0o020000;
-pub const S_IFDIR = 0o040000;
-pub const S_IFBLK = 0o060000;
-pub const S_IFREG = 0o100000;
-pub const S_IFLNK = 0o120000;
-pub const S_IFSOCK = 0o140000;
-
-pub const S_ISUID = 0o4000;
-pub const S_ISGID = 0o2000;
-pub const S_ISVTX = 0o1000;
-pub const S_IRWXU = 0o700;
-pub const S_IRUSR = 0o400;
-pub const S_IWUSR = 0o200;
-pub const S_IXUSR = 0o100;
-pub const S_IRWXG = 0o070;
-pub const S_IRGRP = 0o040;
-pub const S_IWGRP = 0o020;
-pub const S_IXGRP = 0o010;
-pub const S_IRWXO = 0o007;
-pub const S_IROTH = 0o004;
-pub const S_IWOTH = 0o002;
-pub const S_IXOTH = 0o001;
-
-pub fn S_ISFIFO(m: u32) bool {
- return m & S_IFMT == S_IFIFO;
-}
-
-pub fn S_ISCHR(m: u32) bool {
- return m & S_IFMT == S_IFCHR;
-}
-
-pub fn S_ISDIR(m: u32) bool {
- return m & S_IFMT == S_IFDIR;
-}
-
-pub fn S_ISBLK(m: u32) bool {
- return m & S_IFMT == S_IFBLK;
-}
-
-pub fn S_ISREG(m: u32) bool {
- return m & S_IFMT == S_IFREG;
-}
-
-pub fn S_ISLNK(m: u32) bool {
- return m & S_IFMT == S_IFLNK;
-}
-
-pub fn S_ISSOCK(m: u32) bool {
- return m & S_IFMT == S_IFSOCK;
-}
-
-/// 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 AT_FDCWD = -100;
-
-/// Check access using effective user and group ID
-pub const AT_EACCESS = 0x01;
-
-/// Do not follow symbolic links
-pub const AT_SYMLINK_NOFOLLOW = 0x02;
-
-/// Follow symbolic link
-pub const AT_SYMLINK_FOLLOW = 0x04;
-
-/// Remove directory instead of file
-pub const AT_REMOVEDIR = 0x08;
-
-pub const HOST_NAME_MAX = 255;
-
-/// dummy for IP
-pub const IPPROTO_IP = 0;
-
-/// IP6 hop-by-hop options
-pub const IPPROTO_HOPOPTS = IPPROTO_IP;
-
-/// control message protocol
-pub const IPPROTO_ICMP = 1;
-
-/// group mgmt protocol
-pub const IPPROTO_IGMP = 2;
-
-/// gateway^2 (deprecated)
-pub const IPPROTO_GGP = 3;
-
-/// IP header
-pub const IPPROTO_IPV4 = IPPROTO_IPIP;
-
-/// IP inside IP
-pub const IPPROTO_IPIP = 4;
-
-/// tcp
-pub const IPPROTO_TCP = 6;
-
-/// exterior gateway protocol
-pub const IPPROTO_EGP = 8;
-
-/// pup
-pub const IPPROTO_PUP = 12;
-
-/// user datagram protocol
-pub const IPPROTO_UDP = 17;
-
-/// xns idp
-pub const IPPROTO_IDP = 22;
-
-/// tp-4 w/ class negotiation
-pub const IPPROTO_TP = 29;
-
-/// IP6 header
-pub const IPPROTO_IPV6 = 41;
-
-/// IP6 routing header
-pub const IPPROTO_ROUTING = 43;
-
-/// IP6 fragmentation header
-pub const IPPROTO_FRAGMENT = 44;
-
-/// resource reservation
-pub const IPPROTO_RSVP = 46;
-
-/// GRE encaps RFC 1701
-pub const IPPROTO_GRE = 47;
-
-/// encap. security payload
-pub const IPPROTO_ESP = 50;
-
-/// authentication header
-pub const IPPROTO_AH = 51;
-
-/// IP Mobility RFC 2004
-pub const IPPROTO_MOBILE = 55;
-
-/// IPv6 ICMP
-pub const IPPROTO_IPV6_ICMP = 58;
-
-/// ICMP6
-pub const IPPROTO_ICMPV6 = 58;
-
-/// IP6 no next header
-pub const IPPROTO_NONE = 59;
-
-/// IP6 destination option
-pub const IPPROTO_DSTOPTS = 60;
-
-/// ISO cnlp
-pub const IPPROTO_EON = 80;
-
-/// Ethernet-in-IP
-pub const IPPROTO_ETHERIP = 97;
-
-/// encapsulation header
-pub const IPPROTO_ENCAP = 98;
-
-/// Protocol indep. multicast
-pub const IPPROTO_PIM = 103;
-
-/// IP Payload Comp. Protocol
-pub const IPPROTO_IPCOMP = 108;
-
-/// VRRP RFC 2338
-pub const IPPROTO_VRRP = 112;
-
-/// Common Address Resolution Protocol
-pub const IPPROTO_CARP = 112;
-
-/// PFSYNC
-pub const IPPROTO_PFSYNC = 240;
-
-/// raw IP packet
-pub const IPPROTO_RAW = 255;
-
-pub const rlimit_resource = enum(c_int) {
- CPU,
- FSIZE,
- DATA,
- STACK,
- CORE,
- RSS,
- MEMLOCK,
- NPROC,
- NOFILE,
-
- _,
-};
-
-pub const rlim_t = u64;
-
-/// No limit
-pub const RLIM_INFINITY: rlim_t = (1 << 63) - 1;
-
-pub const RLIM_SAVED_MAX = RLIM_INFINITY;
-pub const RLIM_SAVED_CUR = RLIM_INFINITY;
-
-pub const rlimit = extern struct {
- /// Soft limit
- cur: rlim_t,
- /// Hard limit
- max: rlim_t,
-};
-
-pub const SHUT_RD = 0;
-pub const SHUT_WR = 1;
-pub const SHUT_RDWR = 2;
-
-pub const nfds_t = c_uint;
-
-pub const pollfd = extern struct {
- fd: fd_t,
- events: c_short,
- revents: c_short,
-};
-
-pub const POLLIN = 0x0001;
-pub const POLLPRI = 0x0002;
-pub const POLLOUT = 0x0004;
-pub const POLLERR = 0x0008;
-pub const POLLHUP = 0x0010;
-pub const POLLNVAL = 0x0020;
-pub const POLLRDNORM = 0x0040;
-pub const POLLNORM = POLLRDNORM;
-pub const POLLWRNORM = POLLOUT;
-pub const POLLRDBAND = 0x0080;
-pub const POLLWRBAND = 0x0100;
-
-// sysctl mib
-pub const CTL_UNSPEC = 0;
-pub const CTL_KERN = 1;
-pub const CTL_VM = 2;
-pub const CTL_FS = 3;
-pub const CTL_NET = 4;
-pub const CTL_DEBUG = 5;
-pub const CTL_HW = 6;
-pub const CTL_MACHDEP = 7;
-
-pub const CTL_DDB = 9;
-pub const CTL_VFS = 10;
-
-pub const KERN_OSTYPE = 1;
-pub const KERN_OSRELEASE = 2;
-pub const KERN_OSREV = 3;
-pub const KERN_VERSION = 4;
-pub const KERN_MAXVNODES = 5;
-pub const KERN_MAXPROC = 6;
-pub const KERN_MAXFILES = 7;
-pub const KERN_ARGMAX = 8;
-pub const KERN_SECURELVL = 9;
-pub const KERN_HOSTNAME = 10;
-pub const KERN_HOSTID = 11;
-pub const KERN_CLOCKRATE = 12;
-
-pub const KERN_PROF = 16;
-pub const KERN_POSIX1 = 17;
-pub const KERN_NGROUPS = 18;
-pub const KERN_JOB_CONTROL = 19;
-pub const KERN_SAVED_IDS = 20;
-pub const KERN_BOOTTIME = 21;
-pub const KERN_DOMAINNAME = 22;
-pub const KERN_MAXPARTITIONS = 23;
-pub const KERN_RAWPARTITION = 24;
-pub const KERN_MAXTHREAD = 25;
-pub const KERN_NTHREADS = 26;
-pub const KERN_OSVERSION = 27;
-pub const KERN_SOMAXCONN = 28;
-pub const KERN_SOMINCONN = 29;
-
-pub const KERN_NOSUIDCOREDUMP = 32;
-pub const KERN_FSYNC = 33;
-pub const KERN_SYSVMSG = 34;
-pub const KERN_SYSVSEM = 35;
-pub const KERN_SYSVSHM = 36;
-
-pub const KERN_MSGBUFSIZE = 38;
-pub const KERN_MALLOCSTATS = 39;
-pub const KERN_CPTIME = 40;
-pub const KERN_NCHSTATS = 41;
-pub const KERN_FORKSTAT = 42;
-pub const KERN_NSELCOLL = 43;
-pub const KERN_TTY = 44;
-pub const KERN_CCPU = 45;
-pub const KERN_FSCALE = 46;
-pub const KERN_NPROCS = 47;
-pub const KERN_MSGBUF = 48;
-pub const KERN_POOL = 49;
-pub const KERN_STACKGAPRANDOM = 50;
-pub const KERN_SYSVIPC_INFO = 51;
-pub const KERN_ALLOWKMEM = 52;
-pub const KERN_WITNESSWATCH = 53;
-pub const KERN_SPLASSERT = 54;
-pub const KERN_PROC_ARGS = 55;
-pub const KERN_NFILES = 56;
-pub const KERN_TTYCOUNT = 57;
-pub const KERN_NUMVNODES = 58;
-pub const KERN_MBSTAT = 59;
-pub const KERN_WITNESS = 60;
-pub const KERN_SEMINFO = 61;
-pub const KERN_SHMINFO = 62;
-pub const KERN_INTRCNT = 63;
-pub const KERN_WATCHDOG = 64;
-pub const KERN_ALLOWDT = 65;
-pub const KERN_PROC = 66;
-pub const KERN_MAXCLUSTERS = 67;
-pub const KERN_EVCOUNT = 68;
-pub const KERN_TIMECOUNTER = 69;
-pub const KERN_MAXLOCKSPERUID = 70;
-pub const KERN_CPTIME2 = 71;
-pub const KERN_CACHEPCT = 72;
-pub const KERN_FILE = 73;
-pub const KERN_WXABORT = 74;
-pub const KERN_CONSDEV = 75;
-pub const KERN_NETLIVELOCKS = 76;
-pub const KERN_POOL_DEBUG = 77;
-pub const KERN_PROC_CWD = 78;
-pub const KERN_PROC_NOBROADCASTKILL = 79;
-pub const KERN_PROC_VMMAP = 80;
-pub const KERN_GLOBAL_PTRACE = 81;
-pub const KERN_CONSBUFSIZE = 82;
-pub const KERN_CONSBUF = 83;
-pub const KERN_AUDIO = 84;
-pub const KERN_CPUSTATS = 85;
-pub const KERN_PFSTATUS = 86;
-pub const KERN_TIMEOUT_STATS = 87;
-pub const KERN_UTC_OFFSET = 88;
-pub const KERN_VIDEO = 89;
-
-pub const HW_MACHINE = 1;
-pub const HW_MODEL = 2;
-pub const HW_NCPU = 3;
-pub const HW_BYTEORDER = 4;
-pub const HW_PHYSMEM = 5;
-pub const HW_USERMEM = 6;
-pub const HW_PAGESIZE = 7;
-pub const HW_DISKNAMES = 8;
-pub const HW_DISKSTATS = 9;
-pub const HW_DISKCOUNT = 10;
-pub const HW_SENSORS = 11;
-pub const HW_CPUSPEED = 12;
-pub const HW_SETPERF = 13;
-pub const HW_VENDOR = 14;
-pub const HW_PRODUCT = 15;
-pub const HW_VERSION = 16;
-pub const HW_SERIALNO = 17;
-pub const HW_UUID = 18;
-pub const HW_PHYSMEM64 = 19;
-pub const HW_USERMEM64 = 20;
-pub const HW_NCPUFOUND = 21;
-pub const HW_ALLOWPOWERDOWN = 22;
-pub const HW_PERFPOLICY = 23;
-pub const HW_SMT = 24;
-pub const HW_NCPUONLINE = 25;
-
-pub const KERN_PROC_ALL = 0;
-pub const KERN_PROC_PID = 1;
-pub const KERN_PROC_PGRP = 2;
-pub const KERN_PROC_SESSION = 3;
-pub const KERN_PROC_TTY = 4;
-pub const KERN_PROC_UID = 5;
-pub const KERN_PROC_RUID = 6;
-pub const KERN_PROC_KTHREAD = 7;
-pub const KERN_PROC_SHOW_THREADS = 0x40000000;
-
-pub const KERN_PROC_ARGV = 1;
-pub const KERN_PROC_NARGV = 2;
-pub const KERN_PROC_ENV = 3;
-pub const KERN_PROC_NENV = 4;
diff --git a/lib/std/os/bits/wasi.zig b/lib/std/os/bits/wasi.zig
deleted file mode 100644
index 91cf0653af..0000000000
--- a/lib/std/os/bits/wasi.zig
+++ /dev/null
@@ -1,491 +0,0 @@
-// Convenience types and consts used by std.os module
-const builtin = @import("builtin");
-pub const iovec = posix.iovec;
-pub const iovec_const = posix.iovec_const;
-
-pub const STDIN_FILENO = 0;
-pub const STDOUT_FILENO = 1;
-pub const STDERR_FILENO = 2;
-
-pub const mode_t = u32;
-
-pub const time_t = i64; // match https://github.com/CraneStation/wasi-libc
-
-pub const timespec = struct {
- tv_sec: time_t,
- tv_nsec: isize,
-
- pub fn fromTimestamp(tm: timestamp_t) timespec {
- const tv_sec: timestamp_t = tm / 1_000_000_000;
- const tv_nsec = tm - tv_sec * 1_000_000_000;
- return timespec{
- .tv_sec = @intCast(time_t, tv_sec),
- .tv_nsec = @intCast(isize, tv_nsec),
- };
- }
-
- pub fn toTimestamp(ts: timespec) timestamp_t {
- const tm = @intCast(timestamp_t, ts.tv_sec * 1_000_000_000) + @intCast(timestamp_t, ts.tv_nsec);
- return tm;
- }
-};
-
-pub const kernel_stat = struct {
- dev: device_t,
- ino: inode_t,
- mode: mode_t,
- filetype: filetype_t,
- nlink: linkcount_t,
- size: filesize_t,
- atim: timespec,
- mtim: timespec,
- ctim: timespec,
-
- const Self = @This();
-
- pub fn fromFilestat(stat: filestat_t) Self {
- return Self{
- .dev = stat.dev,
- .ino = stat.ino,
- .mode = 0,
- .filetype = stat.filetype,
- .nlink = stat.nlink,
- .size = stat.size,
- .atim = stat.atime(),
- .mtim = stat.mtime(),
- .ctim = stat.ctime(),
- };
- }
-
- pub fn atime(self: Self) timespec {
- return self.atim;
- }
-
- pub fn mtime(self: Self) timespec {
- return self.mtim;
- }
-
- pub fn ctime(self: Self) timespec {
- return self.ctim;
- }
-};
-
-pub const IOV_MAX = 1024;
-
-pub const AT_REMOVEDIR: u32 = 0x4;
-pub const AT_FDCWD: fd_t = -2;
-
-// As defined in the wasi_snapshot_preview1 spec file:
-// https://github.com/WebAssembly/WASI/blob/master/phases/snapshot/witx/typenames.witx
-pub const advice_t = u8;
-pub const ADVICE_NORMAL: advice_t = 0;
-pub const ADVICE_SEQUENTIAL: advice_t = 1;
-pub const ADVICE_RANDOM: advice_t = 2;
-pub const ADVICE_WILLNEED: advice_t = 3;
-pub const ADVICE_DONTNEED: advice_t = 4;
-pub const ADVICE_NOREUSE: advice_t = 5;
-
-pub const clockid_t = u32;
-pub const CLOCK = struct {
- pub const REALTIME: clockid_t = 0;
- pub const MONOTONIC: clockid_t = 1;
- pub const PROCESS_CPUTIME_ID: clockid_t = 2;
- pub const THREAD_CPUTIME_ID: clockid_t = 3;
-};
-
-pub const device_t = u64;
-
-pub const dircookie_t = u64;
-pub const DIRCOOKIE_START: dircookie_t = 0;
-
-pub const dirnamlen_t = u32;
-
-pub const dirent_t = extern struct {
- d_next: dircookie_t,
- d_ino: inode_t,
- d_namlen: dirnamlen_t,
- d_type: filetype_t,
-};
-
-pub const errno_t = enum(u16) {
- SUCCESS = 0,
- @"2BIG" = 1,
- ACCES = 2,
- ADDRINUSE = 3,
- ADDRNOTAVAIL = 4,
- AFNOSUPPORT = 5,
- /// This is also the error code used for `WOULDBLOCK`.
- AGAIN = 6,
- ALREADY = 7,
- BADF = 8,
- BADMSG = 9,
- BUSY = 10,
- CANCELED = 11,
- CHILD = 12,
- CONNABORTED = 13,
- CONNREFUSED = 14,
- CONNRESET = 15,
- DEADLK = 16,
- DESTADDRREQ = 17,
- DOM = 18,
- DQUOT = 19,
- EXIST = 20,
- FAULT = 21,
- FBIG = 22,
- HOSTUNREACH = 23,
- IDRM = 24,
- ILSEQ = 25,
- INPROGRESS = 26,
- INTR = 27,
- INVAL = 28,
- IO = 29,
- ISCONN = 30,
- ISDIR = 31,
- LOOP = 32,
- MFILE = 33,
- MLINK = 34,
- MSGSIZE = 35,
- MULTIHOP = 36,
- NAMETOOLONG = 37,
- NETDOWN = 38,
- NETRESET = 39,
- NETUNREACH = 40,
- NFILE = 41,
- NOBUFS = 42,
- NODEV = 43,
- NOENT = 44,
- NOEXEC = 45,
- NOLCK = 46,
- NOLINK = 47,
- NOMEM = 48,
- NOMSG = 49,
- NOPROTOOPT = 50,
- NOSPC = 51,
- NOSYS = 52,
- NOTCONN = 53,
- NOTDIR = 54,
- NOTEMPTY = 55,
- NOTRECOVERABLE = 56,
- NOTSOCK = 57,
- /// This is also the code used for `NOTSUP`.
- OPNOTSUPP = 58,
- NOTTY = 59,
- NXIO = 60,
- OVERFLOW = 61,
- OWNERDEAD = 62,
- PERM = 63,
- PIPE = 64,
- PROTO = 65,
- PROTONOSUPPORT = 66,
- PROTOTYPE = 67,
- RANGE = 68,
- ROFS = 69,
- SPIPE = 70,
- SRCH = 71,
- STALE = 72,
- TIMEDOUT = 73,
- TXTBSY = 74,
- XDEV = 75,
- NOTCAPABLE = 76,
- _,
-};
-pub const E = errno_t;
-
-pub const event_t = extern struct {
- userdata: userdata_t,
- @"error": errno_t,
- @"type": eventtype_t,
- fd_readwrite: eventfdreadwrite_t,
-};
-
-pub const eventfdreadwrite_t = extern struct {
- nbytes: filesize_t,
- flags: eventrwflags_t,
-};
-
-pub const eventrwflags_t = u16;
-pub const EVENT_FD_READWRITE_HANGUP: eventrwflags_t = 0x0001;
-
-pub const eventtype_t = u8;
-pub const EVENTTYPE_CLOCK: eventtype_t = 0;
-pub const EVENTTYPE_FD_READ: eventtype_t = 1;
-pub const EVENTTYPE_FD_WRITE: eventtype_t = 2;
-
-pub const exitcode_t = u32;
-
-pub const fd_t = if (builtin.link_libc) c_int else u32;
-
-pub const fdflags_t = u16;
-pub const FDFLAG_APPEND: fdflags_t = 0x0001;
-pub const FDFLAG_DSYNC: fdflags_t = 0x0002;
-pub const FDFLAG_NONBLOCK: fdflags_t = 0x0004;
-pub const FDFLAG_RSYNC: fdflags_t = 0x0008;
-pub const FDFLAG_SYNC: fdflags_t = 0x0010;
-
-pub const fdstat_t = extern struct {
- fs_filetype: filetype_t,
- fs_flags: fdflags_t,
- fs_rights_base: rights_t,
- fs_rights_inheriting: rights_t,
-};
-
-pub const filedelta_t = i64;
-
-pub const filesize_t = u64;
-
-pub const filestat_t = extern struct {
- dev: device_t,
- ino: inode_t,
- filetype: filetype_t,
- nlink: linkcount_t,
- size: filesize_t,
- atim: timestamp_t,
- mtim: timestamp_t,
- ctim: timestamp_t,
-
- pub fn atime(self: filestat_t) timespec {
- return timespec.fromTimestamp(self.atim);
- }
-
- pub fn mtime(self: filestat_t) timespec {
- return timespec.fromTimestamp(self.mtim);
- }
-
- pub fn ctime(self: filestat_t) timespec {
- return timespec.fromTimestamp(self.ctim);
- }
-};
-
-pub const filetype_t = u8;
-pub const FILETYPE_UNKNOWN: filetype_t = 0;
-pub const FILETYPE_BLOCK_DEVICE: filetype_t = 1;
-pub const FILETYPE_CHARACTER_DEVICE: filetype_t = 2;
-pub const FILETYPE_DIRECTORY: filetype_t = 3;
-pub const FILETYPE_REGULAR_FILE: filetype_t = 4;
-pub const FILETYPE_SOCKET_DGRAM: filetype_t = 5;
-pub const FILETYPE_SOCKET_STREAM: filetype_t = 6;
-pub const FILETYPE_SYMBOLIC_LINK: filetype_t = 7;
-
-pub const fstflags_t = u16;
-pub const FILESTAT_SET_ATIM: fstflags_t = 0x0001;
-pub const FILESTAT_SET_ATIM_NOW: fstflags_t = 0x0002;
-pub const FILESTAT_SET_MTIM: fstflags_t = 0x0004;
-pub const FILESTAT_SET_MTIM_NOW: fstflags_t = 0x0008;
-
-pub const inode_t = u64;
-pub const ino_t = inode_t;
-
-pub const linkcount_t = u64;
-
-pub const lookupflags_t = u32;
-pub const LOOKUP_SYMLINK_FOLLOW: lookupflags_t = 0x00000001;
-
-pub usingnamespace if (builtin.link_libc) struct {
- // Derived from https://github.com/WebAssembly/wasi-libc/blob/main/expected/wasm32-wasi/predefined-macros.txt
- pub const O_ACCMODE = (O_EXEC | O_RDWR | O_SEARCH);
- pub const O_APPEND = FDFLAG_APPEND;
- pub const O_CLOEXEC = (0);
- pub const O_CREAT = ((1 << 0) << 12); // = __WASI_OFLAGS_CREAT << 12
- pub const O_DIRECTORY = ((1 << 1) << 12); // = __WASI_OFLAGS_DIRECTORY << 12
- pub const O_DSYNC = FDFLAG_DSYNC;
- pub const O_EXCL = ((1 << 2) << 12); // = __WASI_OFLAGS_EXCL << 12
- pub const O_EXEC = (0x02000000);
- pub const O_NOCTTY = (0);
- pub const O_NOFOLLOW = (0x01000000);
- pub const O_NONBLOCK = (1 << FDFLAG_NONBLOCK);
- pub const O_RDONLY = (0x04000000);
- pub const O_RDWR = (O_RDONLY | O_WRONLY);
- pub const O_RSYNC = (1 << FDFLAG_RSYNC);
- pub const O_SEARCH = (0x08000000);
- pub const O_SYNC = (1 << FDFLAG_SYNC);
- pub const O_TRUNC = ((1 << 3) << 12); // = __WASI_OFLAGS_TRUNC << 12
- pub const O_TTY_INIT = (0);
- pub const O_WRONLY = (0x10000000);
-} else struct {
- pub const oflags_t = u16;
- pub const O_CREAT: oflags_t = 0x0001;
- pub const O_DIRECTORY: oflags_t = 0x0002;
- pub const O_EXCL: oflags_t = 0x0004;
- pub const O_TRUNC: oflags_t = 0x0008;
-};
-
-pub const preopentype_t = u8;
-pub const PREOPENTYPE_DIR: preopentype_t = 0;
-
-pub const prestat_t = extern struct {
- pr_type: preopentype_t,
- u: prestat_u_t,
-};
-
-pub const prestat_dir_t = extern struct {
- pr_name_len: usize,
-};
-
-pub const prestat_u_t = extern union {
- dir: prestat_dir_t,
-};
-
-pub const riflags_t = u16;
-pub const SOCK_RECV_PEEK: riflags_t = 0x0001;
-pub const SOCK_RECV_WAITALL: riflags_t = 0x0002;
-
-pub const rights_t = u64;
-pub const RIGHT_FD_DATASYNC: rights_t = 0x0000000000000001;
-pub const RIGHT_FD_READ: rights_t = 0x0000000000000002;
-pub const RIGHT_FD_SEEK: rights_t = 0x0000000000000004;
-pub const RIGHT_FD_FDSTAT_SET_FLAGS: rights_t = 0x0000000000000008;
-pub const RIGHT_FD_SYNC: rights_t = 0x0000000000000010;
-pub const RIGHT_FD_TELL: rights_t = 0x0000000000000020;
-pub const RIGHT_FD_WRITE: rights_t = 0x0000000000000040;
-pub const RIGHT_FD_ADVISE: rights_t = 0x0000000000000080;
-pub const RIGHT_FD_ALLOCATE: rights_t = 0x0000000000000100;
-pub const RIGHT_PATH_CREATE_DIRECTORY: rights_t = 0x0000000000000200;
-pub const RIGHT_PATH_CREATE_FILE: rights_t = 0x0000000000000400;
-pub const RIGHT_PATH_LINK_SOURCE: rights_t = 0x0000000000000800;
-pub const RIGHT_PATH_LINK_TARGET: rights_t = 0x0000000000001000;
-pub const RIGHT_PATH_OPEN: rights_t = 0x0000000000002000;
-pub const RIGHT_FD_READDIR: rights_t = 0x0000000000004000;
-pub const RIGHT_PATH_READLINK: rights_t = 0x0000000000008000;
-pub const RIGHT_PATH_RENAME_SOURCE: rights_t = 0x0000000000010000;
-pub const RIGHT_PATH_RENAME_TARGET: rights_t = 0x0000000000020000;
-pub const RIGHT_PATH_FILESTAT_GET: rights_t = 0x0000000000040000;
-pub const RIGHT_PATH_FILESTAT_SET_SIZE: rights_t = 0x0000000000080000;
-pub const RIGHT_PATH_FILESTAT_SET_TIMES: rights_t = 0x0000000000100000;
-pub const RIGHT_FD_FILESTAT_GET: rights_t = 0x0000000000200000;
-pub const RIGHT_FD_FILESTAT_SET_SIZE: rights_t = 0x0000000000400000;
-pub const RIGHT_FD_FILESTAT_SET_TIMES: rights_t = 0x0000000000800000;
-pub const RIGHT_PATH_SYMLINK: rights_t = 0x0000000001000000;
-pub const RIGHT_PATH_REMOVE_DIRECTORY: rights_t = 0x0000000002000000;
-pub const RIGHT_PATH_UNLINK_FILE: rights_t = 0x0000000004000000;
-pub const RIGHT_POLL_FD_READWRITE: rights_t = 0x0000000008000000;
-pub const RIGHT_SOCK_SHUTDOWN: rights_t = 0x0000000010000000;
-pub const RIGHT_ALL: rights_t = RIGHT_FD_DATASYNC |
- RIGHT_FD_READ |
- RIGHT_FD_SEEK |
- RIGHT_FD_FDSTAT_SET_FLAGS |
- RIGHT_FD_SYNC |
- RIGHT_FD_TELL |
- RIGHT_FD_WRITE |
- RIGHT_FD_ADVISE |
- RIGHT_FD_ALLOCATE |
- RIGHT_PATH_CREATE_DIRECTORY |
- RIGHT_PATH_CREATE_FILE |
- RIGHT_PATH_LINK_SOURCE |
- RIGHT_PATH_LINK_TARGET |
- RIGHT_PATH_OPEN |
- RIGHT_FD_READDIR |
- RIGHT_PATH_READLINK |
- RIGHT_PATH_RENAME_SOURCE |
- RIGHT_PATH_RENAME_TARGET |
- RIGHT_PATH_FILESTAT_GET |
- RIGHT_PATH_FILESTAT_SET_SIZE |
- RIGHT_PATH_FILESTAT_SET_TIMES |
- RIGHT_FD_FILESTAT_GET |
- RIGHT_FD_FILESTAT_SET_SIZE |
- RIGHT_FD_FILESTAT_SET_TIMES |
- RIGHT_PATH_SYMLINK |
- RIGHT_PATH_REMOVE_DIRECTORY |
- RIGHT_PATH_UNLINK_FILE |
- RIGHT_POLL_FD_READWRITE |
- RIGHT_SOCK_SHUTDOWN;
-
-pub const roflags_t = u16;
-pub const SOCK_RECV_DATA_TRUNCATED: roflags_t = 0x0001;
-
-pub const sdflags_t = u8;
-pub const SHUT_RD: sdflags_t = 0x01;
-pub const SHUT_WR: sdflags_t = 0x02;
-
-pub const siflags_t = u16;
-
-pub const signal_t = u8;
-pub const SIGNONE: signal_t = 0;
-pub const SIGHUP: signal_t = 1;
-pub const SIGINT: signal_t = 2;
-pub const SIGQUIT: signal_t = 3;
-pub const SIGILL: signal_t = 4;
-pub const SIGTRAP: signal_t = 5;
-pub const SIGABRT: signal_t = 6;
-pub const SIGBUS: signal_t = 7;
-pub const SIGFPE: signal_t = 8;
-pub const SIGKILL: signal_t = 9;
-pub const SIGUSR1: signal_t = 10;
-pub const SIGSEGV: signal_t = 11;
-pub const SIGUSR2: signal_t = 12;
-pub const SIGPIPE: signal_t = 13;
-pub const SIGALRM: signal_t = 14;
-pub const SIGTERM: signal_t = 15;
-pub const SIGCHLD: signal_t = 16;
-pub const SIGCONT: signal_t = 17;
-pub const SIGSTOP: signal_t = 18;
-pub const SIGTSTP: signal_t = 19;
-pub const SIGTTIN: signal_t = 20;
-pub const SIGTTOU: signal_t = 21;
-pub const SIGURG: signal_t = 22;
-pub const SIGXCPU: signal_t = 23;
-pub const SIGXFSZ: signal_t = 24;
-pub const SIGVTALRM: signal_t = 25;
-pub const SIGPROF: signal_t = 26;
-pub const SIGWINCH: signal_t = 27;
-pub const SIGPOLL: signal_t = 28;
-pub const SIGPWR: signal_t = 29;
-pub const SIGSYS: signal_t = 30;
-
-pub const subclockflags_t = u16;
-pub const SUBSCRIPTION_CLOCK_ABSTIME: subclockflags_t = 0x0001;
-
-pub const subscription_t = extern struct {
- userdata: userdata_t,
- u: subscription_u_t,
-};
-
-pub const subscription_clock_t = extern struct {
- id: clockid_t,
- timeout: timestamp_t,
- precision: timestamp_t,
- flags: subclockflags_t,
-};
-
-pub const subscription_fd_readwrite_t = extern struct {
- fd: fd_t,
-};
-
-pub const subscription_u_t = extern struct {
- tag: eventtype_t,
- u: subscription_u_u_t,
-};
-
-pub const subscription_u_u_t = extern union {
- clock: subscription_clock_t,
- fd_read: subscription_fd_readwrite_t,
- fd_write: subscription_fd_readwrite_t,
-};
-
-pub const timestamp_t = u64;
-
-pub const userdata_t = u64;
-
-pub const whence_t = u8;
-pub const WHENCE_SET: whence_t = 0;
-pub const WHENCE_CUR: whence_t = 1;
-pub const WHENCE_END: whence_t = 2;
-
-pub const S_IEXEC = S_IXUSR;
-pub const S_IFBLK = 0x6000;
-pub const S_IFCHR = 0x2000;
-pub const S_IFDIR = 0x4000;
-pub const S_IFIFO = 0xc000;
-pub const S_IFLNK = 0xa000;
-pub const S_IFMT = S_IFBLK | S_IFCHR | S_IFDIR | S_IFIFO | S_IFLNK | S_IFREG | S_IFSOCK;
-pub const S_IFREG = 0x8000;
-// There's no concept of UNIX domain socket but we define this value here in order to line with other OSes.
-pub const S_IFSOCK = 0x1;
-
-pub const SEEK_SET = WHENCE_SET;
-pub const SEEK_CUR = WHENCE_CUR;
-pub const SEEK_END = WHENCE_END;
-
-pub const LOCK_SH = 0x1;
-pub const LOCK_EX = 0x2;
-pub const LOCK_NB = 0x4;
-pub const LOCK_UN = 0x8;
diff --git a/lib/std/os/bits/windows.zig b/lib/std/os/bits/windows.zig
deleted file mode 100644
index e38407579a..0000000000
--- a/lib/std/os/bits/windows.zig
+++ /dev/null
@@ -1,324 +0,0 @@
-// The reference for these types and values is Microsoft Windows's ucrt (Universal C RunTime).
-
-usingnamespace @import("../windows/bits.zig");
-const ws2_32 = @import("../windows/ws2_32.zig");
-
-pub const fd_t = HANDLE;
-pub const ino_t = LARGE_INTEGER;
-pub const pid_t = HANDLE;
-pub const mode_t = u0;
-
-pub const PATH_MAX = 260;
-
-pub const time_t = c_longlong;
-
-pub const timespec = extern struct {
- tv_sec: time_t,
- tv_nsec: c_long,
-};
-
-pub const timeval = extern struct {
- tv_sec: c_long,
- tv_usec: c_long,
-};
-
-pub const sig_atomic_t = c_int;
-
-/// maximum signal number + 1
-pub const NSIG = 23;
-
-// Signal types
-
-/// interrupt
-pub const SIGINT = 2;
-
-/// illegal instruction - invalid function image
-pub const SIGILL = 4;
-
-/// floating point exception
-pub const SIGFPE = 8;
-
-/// segment violation
-pub const SIGSEGV = 11;
-
-/// Software termination signal from kill
-pub const SIGTERM = 15;
-
-/// Ctrl-Break sequence
-pub const SIGBREAK = 21;
-
-/// abnormal termination triggered by abort call
-pub const SIGABRT = 22;
-
-/// SIGABRT compatible with other platforms, same as SIGABRT
-pub const SIGABRT_COMPAT = 6;
-
-// Signal action codes
-
-/// default signal action
-pub const SIG_DFL = 0;
-
-/// ignore signal
-pub const SIG_IGN = 1;
-
-/// return current value
-pub const SIG_GET = 2;
-
-/// signal gets error
-pub const SIG_SGE = 3;
-
-/// acknowledge
-pub const SIG_ACK = 4;
-
-/// Signal error value (returned by signal call on error)
-pub const SIG_ERR = -1;
-
-pub const SEEK_SET = 0;
-pub const SEEK_CUR = 1;
-pub const SEEK_END = 2;
-
-pub const E = enum(u16) {
- /// No error occurred.
- SUCCESS = 0,
- PERM = 1,
- NOENT = 2,
- SRCH = 3,
- INTR = 4,
- IO = 5,
- NXIO = 6,
- @"2BIG" = 7,
- NOEXEC = 8,
- BADF = 9,
- CHILD = 10,
- AGAIN = 11,
- NOMEM = 12,
- ACCES = 13,
- FAULT = 14,
- BUSY = 16,
- EXIST = 17,
- XDEV = 18,
- NODEV = 19,
- NOTDIR = 20,
- ISDIR = 21,
- NFILE = 23,
- MFILE = 24,
- NOTTY = 25,
- FBIG = 27,
- NOSPC = 28,
- SPIPE = 29,
- ROFS = 30,
- MLINK = 31,
- PIPE = 32,
- DOM = 33,
- /// Also means `DEADLOCK`.
- DEADLK = 36,
- NAMETOOLONG = 38,
- NOLCK = 39,
- NOSYS = 40,
- NOTEMPTY = 41,
-
- INVAL = 22,
- RANGE = 34,
- ILSEQ = 42,
-
- // POSIX Supplement
- ADDRINUSE = 100,
- ADDRNOTAVAIL = 101,
- AFNOSUPPORT = 102,
- ALREADY = 103,
- BADMSG = 104,
- CANCELED = 105,
- CONNABORTED = 106,
- CONNREFUSED = 107,
- CONNRESET = 108,
- DESTADDRREQ = 109,
- HOSTUNREACH = 110,
- IDRM = 111,
- INPROGRESS = 112,
- ISCONN = 113,
- LOOP = 114,
- MSGSIZE = 115,
- NETDOWN = 116,
- NETRESET = 117,
- NETUNREACH = 118,
- NOBUFS = 119,
- NODATA = 120,
- NOLINK = 121,
- NOMSG = 122,
- NOPROTOOPT = 123,
- NOSR = 124,
- NOSTR = 125,
- NOTCONN = 126,
- NOTRECOVERABLE = 127,
- NOTSOCK = 128,
- NOTSUP = 129,
- OPNOTSUPP = 130,
- OTHER = 131,
- OVERFLOW = 132,
- OWNERDEAD = 133,
- PROTO = 134,
- PROTONOSUPPORT = 135,
- PROTOTYPE = 136,
- TIME = 137,
- TIMEDOUT = 138,
- TXTBSY = 139,
- WOULDBLOCK = 140,
- DQUOT = 10069,
- _,
-};
-
-pub const STRUNCATE = 80;
-
-pub const F_OK = 0;
-
-/// Remove directory instead of unlinking file
-pub const AT_REMOVEDIR = 0x200;
-
-pub const in_port_t = u16;
-pub const sa_family_t = ws2_32.ADDRESS_FAMILY;
-pub const socklen_t = ws2_32.socklen_t;
-
-pub const sockaddr = ws2_32.sockaddr;
-pub const sockaddr_in = ws2_32.sockaddr_in;
-pub const sockaddr_in6 = ws2_32.sockaddr_in6;
-pub const sockaddr_un = ws2_32.sockaddr_un;
-
-pub const in6_addr = [16]u8;
-pub const in_addr = u32;
-
-pub const addrinfo = ws2_32.addrinfo;
-
-pub const AF_UNSPEC = ws2_32.AF_UNSPEC;
-pub const AF_UNIX = ws2_32.AF_UNIX;
-pub const AF_INET = ws2_32.AF_INET;
-pub const AF_IMPLINK = ws2_32.AF_IMPLINK;
-pub const AF_PUP = ws2_32.AF_PUP;
-pub const AF_CHAOS = ws2_32.AF_CHAOS;
-pub const AF_NS = ws2_32.AF_NS;
-pub const AF_IPX = ws2_32.AF_IPX;
-pub const AF_ISO = ws2_32.AF_ISO;
-pub const AF_OSI = ws2_32.AF_OSI;
-pub const AF_ECMA = ws2_32.AF_ECMA;
-pub const AF_DATAKIT = ws2_32.AF_DATAKIT;
-pub const AF_CCITT = ws2_32.AF_CCITT;
-pub const AF_SNA = ws2_32.AF_SNA;
-pub const AF_DECnet = ws2_32.AF_DECnet;
-pub const AF_DLI = ws2_32.AF_DLI;
-pub const AF_LAT = ws2_32.AF_LAT;
-pub const AF_HYLINK = ws2_32.AF_HYLINK;
-pub const AF_APPLETALK = ws2_32.AF_APPLETALK;
-pub const AF_NETBIOS = ws2_32.AF_NETBIOS;
-pub const AF_VOICEVIEW = ws2_32.AF_VOICEVIEW;
-pub const AF_FIREFOX = ws2_32.AF_FIREFOX;
-pub const AF_UNKNOWN1 = ws2_32.AF_UNKNOWN1;
-pub const AF_BAN = ws2_32.AF_BAN;
-pub const AF_ATM = ws2_32.AF_ATM;
-pub const AF_INET6 = ws2_32.AF_INET6;
-pub const AF_CLUSTER = ws2_32.AF_CLUSTER;
-pub const AF_12844 = ws2_32.AF_12844;
-pub const AF_IRDA = ws2_32.AF_IRDA;
-pub const AF_NETDES = ws2_32.AF_NETDES;
-pub const AF_TCNPROCESS = ws2_32.AF_TCNPROCESS;
-pub const AF_TCNMESSAGE = ws2_32.AF_TCNMESSAGE;
-pub const AF_ICLFXBM = ws2_32.AF_ICLFXBM;
-pub const AF_BTH = ws2_32.AF_BTH;
-pub const AF_MAX = ws2_32.AF_MAX;
-
-pub const SOCK_STREAM = ws2_32.SOCK_STREAM;
-pub const SOCK_DGRAM = ws2_32.SOCK_DGRAM;
-pub const SOCK_RAW = ws2_32.SOCK_RAW;
-pub const SOCK_RDM = ws2_32.SOCK_RDM;
-pub const SOCK_SEQPACKET = ws2_32.SOCK_SEQPACKET;
-
-/// WARNING: this flag is not supported by windows socket functions directly,
-/// it is only supported by std.os.socket. Be sure that this value does
-/// not share any bits with any of the SOCK_* values.
-pub const SOCK_CLOEXEC = 0x10000;
-/// WARNING: this flag is not supported by windows socket functions directly,
-/// it is only supported by std.os.socket. Be sure that this value does
-/// not share any bits with any of the SOCK_* values.
-pub const SOCK_NONBLOCK = 0x20000;
-
-pub const IPPROTO_ICMP = ws2_32.IPPROTO_ICMP;
-pub const IPPROTO_IGMP = ws2_32.IPPROTO_IGMP;
-pub const BTHPROTO_RFCOMM = ws2_32.BTHPROTO_RFCOMM;
-pub const IPPROTO_TCP = ws2_32.IPPROTO_TCP;
-pub const IPPROTO_UDP = ws2_32.IPPROTO_UDP;
-pub const IPPROTO_ICMPV6 = ws2_32.IPPROTO_ICMPV6;
-pub const IPPROTO_RM = ws2_32.IPPROTO_RM;
-
-pub const nfds_t = c_ulong;
-pub const pollfd = ws2_32.pollfd;
-
-pub const POLLRDNORM = ws2_32.POLLRDNORM;
-pub const POLLRDBAND = ws2_32.POLLRDBAND;
-pub const POLLIN = ws2_32.POLLIN;
-pub const POLLPRI = ws2_32.POLLPRI;
-pub const POLLWRNORM = ws2_32.POLLWRNORM;
-pub const POLLOUT = ws2_32.POLLOUT;
-pub const POLLWRBAND = ws2_32.POLLWRBAND;
-pub const POLLERR = ws2_32.POLLERR;
-pub const POLLHUP = ws2_32.POLLHUP;
-pub const POLLNVAL = ws2_32.POLLNVAL;
-
-pub const SOL_SOCKET = ws2_32.SOL_SOCKET;
-
-pub const SO_DEBUG = ws2_32.SO_DEBUG;
-pub const SO_ACCEPTCONN = ws2_32.SO_ACCEPTCONN;
-pub const SO_REUSEADDR = ws2_32.SO_REUSEADDR;
-pub const SO_KEEPALIVE = ws2_32.SO_KEEPALIVE;
-pub const SO_DONTROUTE = ws2_32.SO_DONTROUTE;
-pub const SO_BROADCAST = ws2_32.SO_BROADCAST;
-pub const SO_USELOOPBACK = ws2_32.SO_USELOOPBACK;
-pub const SO_LINGER = ws2_32.SO_LINGER;
-pub const SO_OOBINLINE = ws2_32.SO_OOBINLINE;
-
-pub const SO_DONTLINGER = ws2_32.SO_DONTLINGER;
-pub const SO_EXCLUSIVEADDRUSE = ws2_32.SO_EXCLUSIVEADDRUSE;
-
-pub const SO_SNDBUF = ws2_32.SO_SNDBUF;
-pub const SO_RCVBUF = ws2_32.SO_RCVBUF;
-pub const SO_SNDLOWAT = ws2_32.SO_SNDLOWAT;
-pub const SO_RCVLOWAT = ws2_32.SO_RCVLOWAT;
-pub const SO_SNDTIMEO = ws2_32.SO_SNDTIMEO;
-pub const SO_RCVTIMEO = ws2_32.SO_RCVTIMEO;
-pub const SO_ERROR = ws2_32.SO_ERROR;
-pub const SO_TYPE = ws2_32.SO_TYPE;
-
-pub const SO_GROUP_ID = ws2_32.SO_GROUP_ID;
-pub const SO_GROUP_PRIORITY = ws2_32.SO_GROUP_PRIORITY;
-pub const SO_MAX_MSG_SIZE = ws2_32.SO_MAX_MSG_SIZE;
-pub const SO_PROTOCOL_INFOA = ws2_32.SO_PROTOCOL_INFOA;
-pub const SO_PROTOCOL_INFOW = ws2_32.SO_PROTOCOL_INFOW;
-
-pub const PVD_CONFIG = ws2_32.PVD_CONFIG;
-pub const SO_CONDITIONAL_ACCEPT = ws2_32.SO_CONDITIONAL_ACCEPT;
-
-pub const TCP_NODELAY = ws2_32.TCP_NODELAY;
-
-pub const O_RDONLY = 0o0;
-pub const O_WRONLY = 0o1;
-pub const O_RDWR = 0o2;
-
-pub const O_CREAT = 0o100;
-pub const O_EXCL = 0o200;
-pub const O_NOCTTY = 0o400;
-pub const O_TRUNC = 0o1000;
-pub const O_APPEND = 0o2000;
-pub const O_NONBLOCK = 0o4000;
-pub const O_DSYNC = 0o10000;
-pub const O_SYNC = 0o4010000;
-pub const O_RSYNC = 0o4010000;
-pub const O_DIRECTORY = 0o200000;
-pub const O_NOFOLLOW = 0o400000;
-pub const O_CLOEXEC = 0o2000000;
-
-pub const O_ASYNC = 0o20000;
-pub const O_DIRECT = 0o40000;
-pub const O_LARGEFILE = 0;
-pub const O_NOATIME = 0o1000000;
-pub const O_PATH = 0o10000000;
-pub const O_TMPFILE = 0o20200000;
-pub const O_NDELAY = O_NONBLOCK;
-
-pub const IFNAMESIZE = 30;
diff --git a/lib/std/os/linux.zig b/lib/std/os/linux.zig
index 9aa18f786c..37c00280e3 100644
--- a/lib/std/os/linux.zig
+++ b/lib/std/os/linux.zig
@@ -1,10 +1,10 @@
-// This file provides the system interface functions for Linux matching those
-// that are provided by libc, whether or not libc is linked. The following
-// abstractions are made:
-// * Work around kernel bugs and limitations. For example, see sendmmsg.
-// * Implement all the syscalls in the same way that libc functions will
-// provide `rename` when only the `renameat` syscall exists.
-// * Does not support POSIX thread cancellation.
+//! This file provides the system interface functions for Linux matching those
+//! that are provided by libc, whether or not libc is linked. The following
+//! abstractions are made:
+//! * Work around kernel bugs and limitations. For example, see sendmmsg.
+//! * Implement all the syscalls in the same way that libc functions will
+//! provide `rename` when only the `renameat` syscall exists.
+//! * Does not support POSIX thread cancellation.
const std = @import("../std.zig");
const assert = std.debug.assert;
const maxInt = std.math.maxInt;
@@ -63,8 +63,7 @@ pub const blkcnt_t = arch_bits.blkcnt_t;
pub const blksize_t = arch_bits.blksize_t;
pub const dev_t = arch_bits.dev_t;
pub const ino_t = arch_bits.ino_t;
-pub const kernel_stat = arch_bits.kernel_stat;
-pub const libc_stat = arch_bits.libc_stat;
+pub const Stat = arch_bits.Stat;
pub const mcontext_t = arch_bits.mcontext_t;
pub const mode_t = arch_bits.mode_t;
pub const msghdr = arch_bits.msghdr;
@@ -81,7 +80,30 @@ pub const user_desc = arch_bits.user_desc;
pub const tls = @import("linux/tls.zig");
pub const pie = @import("linux/start_pie.zig");
pub const BPF = @import("linux/bpf.zig");
-pub usingnamespace @import("linux/io_uring.zig");
+
+const io_uring = @import("linux/io_uring.zig");
+pub const IO_Uring = io_uring.IO_Uring;
+pub const SubmissionQueue = io_uring.SubmissionQueue;
+pub const CompletionQueue = io_uring.CompletionQueue;
+pub const io_uring_prep_nop = io_uring.io_uring_prep_nop;
+pub const io_uring_prep_fsync = io_uring.io_uring_prep_fsync;
+pub const io_uring_prep_rw = io_uring.io_uring_prep_rw;
+pub const io_uring_prep_read = io_uring.io_uring_prep_read;
+pub const io_uring_prep_write = io_uring.io_uring_prep_write;
+pub const io_uring_prep_readv = io_uring.io_uring_prep_readv;
+pub const io_uring_prep_writev = io_uring.io_uring_prep_writev;
+pub const io_uring_prep_accept = io_uring.io_uring_prep_accept;
+pub const io_uring_prep_connect = io_uring.io_uring_prep_connect;
+pub const io_uring_prep_epoll_ctl = io_uring.io_uring_prep_epoll_ctl;
+pub const io_uring_prep_recv = io_uring.io_uring_prep_recv;
+pub const io_uring_prep_send = io_uring.io_uring_prep_send;
+pub const io_uring_prep_openat = io_uring.io_uring_prep_openat;
+pub const io_uring_prep_close = io_uring.io_uring_prep_close;
+pub const io_uring_prep_timeout = io_uring.io_uring_prep_timeout;
+pub const io_uring_prep_timeout_remove = io_uring.io_uring_prep_timeout_remove;
+pub const io_uring_prep_poll_add = io_uring.io_uring_prep_poll_add;
+pub const io_uring_prep_poll_remove = io_uring.io_uring_prep_poll_remove;
+pub const io_uring_prep_fallocate = io_uring.io_uring_prep_fallocate;
/// Set by startup code, used by `getauxval`.
pub var elf_aux_maybe: ?[*]std.elf.Auxv = null;
@@ -1205,7 +1227,7 @@ pub fn accept4(fd: i32, noalias addr: ?*sockaddr, noalias len: ?*socklen_t, flag
return syscall4(.accept4, @bitCast(usize, @as(isize, fd)), @ptrToInt(addr), @ptrToInt(len), flags);
}
-pub fn fstat(fd: i32, stat_buf: *kernel_stat) usize {
+pub fn fstat(fd: i32, stat_buf: *Stat) usize {
if (@hasField(SYS, "fstat64")) {
return syscall2(.fstat64, @bitCast(usize, @as(isize, fd)), @ptrToInt(stat_buf));
} else {
@@ -1213,7 +1235,7 @@ pub fn fstat(fd: i32, stat_buf: *kernel_stat) usize {
}
}
-pub fn stat(pathname: [*:0]const u8, statbuf: *kernel_stat) usize {
+pub fn stat(pathname: [*:0]const u8, statbuf: *Stat) usize {
if (@hasField(SYS, "stat64")) {
return syscall2(.stat64, @ptrToInt(pathname), @ptrToInt(statbuf));
} else {
@@ -1221,7 +1243,7 @@ pub fn stat(pathname: [*:0]const u8, statbuf: *kernel_stat) usize {
}
}
-pub fn lstat(pathname: [*:0]const u8, statbuf: *kernel_stat) usize {
+pub fn lstat(pathname: [*:0]const u8, statbuf: *Stat) usize {
if (@hasField(SYS, "lstat64")) {
return syscall2(.lstat64, @ptrToInt(pathname), @ptrToInt(statbuf));
} else {
@@ -1229,7 +1251,7 @@ pub fn lstat(pathname: [*:0]const u8, statbuf: *kernel_stat) usize {
}
}
-pub fn fstatat(dirfd: i32, path: [*:0]const u8, stat_buf: *kernel_stat, flags: u32) usize {
+pub fn fstatat(dirfd: i32, path: [*:0]const u8, stat_buf: *Stat, flags: u32) usize {
if (@hasField(SYS, "fstatat64")) {
return syscall4(.fstatat64, @bitCast(usize, @as(isize, dirfd)), @ptrToInt(path), @ptrToInt(stat_buf), flags);
} else {
diff --git a/lib/std/os/linux/test.zig b/lib/std/os/linux/test.zig
index e45c9dbb99..f04496c57f 100644
--- a/lib/std/os/linux/test.zig
+++ b/lib/std/os/linux/test.zig
@@ -82,7 +82,7 @@ test "statx" {
else => unreachable,
}
- var stat_buf: linux.kernel_stat = undefined;
+ var stat_buf: linux.Stat = undefined;
switch (linux.getErrno(linux.fstatat(file.handle, "", &stat_buf, linux.AT_EMPTY_PATH))) {
.SUCCESS => {},
else => unreachable,
diff --git a/lib/std/os/linux/x86_64.zig b/lib/std/os/linux/x86_64.zig
index ee1931e4ea..bca222d77c 100644
--- a/lib/std/os/linux/x86_64.zig
+++ b/lib/std/os/linux/x86_64.zig
@@ -112,6 +112,9 @@ pub fn restore_rt() callconv(.Naked) void {
pub const mode_t = usize;
pub const time_t = isize;
+pub const nlink_t = usize;
+pub const blksize_t = isize;
+pub const blkcnt_t = isize;
pub const SYS = enum(usize) {
read = 0,
@@ -664,7 +667,7 @@ pub const ino_t = u64;
pub const dev_t = u64;
// The `stat` definition used by the Linux kernel.
-pub const kernel_stat = extern struct {
+pub const Stat = extern struct {
dev: dev_t,
ino: ino_t,
nlink: usize,
@@ -696,9 +699,6 @@ pub const kernel_stat = extern struct {
}
};
-// The `stat64` definition used by the libc.
-pub const libc_stat = kernel_stat;
-
pub const timespec = extern struct {
tv_sec: isize,
tv_nsec: isize,
diff --git a/lib/std/os/wasi.zig b/lib/std/os/wasi.zig
index 002f7ed684..8cf0c219a7 100644
--- a/lib/std/os/wasi.zig
+++ b/lib/std/os/wasi.zig
@@ -15,8 +15,8 @@ comptime {
// assert(@alignOf(u64) == 8);
}
-pub const iovec_t = iovec;
-pub const ciovec_t = iovec_const;
+pub const iovec_t = std.os.iovec;
+pub const ciovec_t = std.os.iovec_const;
pub extern "wasi_snapshot_preview1" fn args_get(argv: [*][*:0]u8, argv_buf: [*]u8) errno_t;
pub extern "wasi_snapshot_preview1" fn args_sizes_get(argc: *usize, argv_buf_size: *usize) errno_t;
@@ -79,3 +79,469 @@ pub extern "wasi_snapshot_preview1" fn sock_shutdown(sock: fd_t, how: sdflags_t)
pub fn getErrno(r: errno_t) errno_t {
return r;
}
+
+pub const STDIN_FILENO = 0;
+pub const STDOUT_FILENO = 1;
+pub const STDERR_FILENO = 2;
+
+pub const mode_t = u32;
+
+pub const time_t = i64; // match https://github.com/CraneStation/wasi-libc
+
+pub const timespec = struct {
+ tv_sec: time_t,
+ tv_nsec: isize,
+
+ pub fn fromTimestamp(tm: timestamp_t) timespec {
+ const tv_sec: timestamp_t = tm / 1_000_000_000;
+ const tv_nsec = tm - tv_sec * 1_000_000_000;
+ return timespec{
+ .tv_sec = @intCast(time_t, tv_sec),
+ .tv_nsec = @intCast(isize, tv_nsec),
+ };
+ }
+
+ pub fn toTimestamp(ts: timespec) timestamp_t {
+ const tm = @intCast(timestamp_t, ts.tv_sec * 1_000_000_000) + @intCast(timestamp_t, ts.tv_nsec);
+ return tm;
+ }
+};
+
+pub const Stat = struct {
+ dev: device_t,
+ ino: inode_t,
+ mode: mode_t,
+ filetype: filetype_t,
+ nlink: linkcount_t,
+ size: filesize_t,
+ atim: timespec,
+ mtim: timespec,
+ ctim: timespec,
+
+ const Self = @This();
+
+ pub fn fromFilestat(stat: filestat_t) Self {
+ return Self{
+ .dev = stat.dev,
+ .ino = stat.ino,
+ .mode = 0,
+ .filetype = stat.filetype,
+ .nlink = stat.nlink,
+ .size = stat.size,
+ .atim = stat.atime(),
+ .mtim = stat.mtime(),
+ .ctim = stat.ctime(),
+ };
+ }
+
+ pub fn atime(self: Self) timespec {
+ return self.atim;
+ }
+
+ pub fn mtime(self: Self) timespec {
+ return self.mtim;
+ }
+
+ pub fn ctime(self: Self) timespec {
+ return self.ctim;
+ }
+};
+
+pub const IOV_MAX = 1024;
+
+pub const AT_REMOVEDIR: u32 = 0x4;
+pub const AT_FDCWD: fd_t = -2;
+
+// As defined in the wasi_snapshot_preview1 spec file:
+// https://github.com/WebAssembly/WASI/blob/master/phases/snapshot/witx/typenames.witx
+pub const advice_t = u8;
+pub const ADVICE_NORMAL: advice_t = 0;
+pub const ADVICE_SEQUENTIAL: advice_t = 1;
+pub const ADVICE_RANDOM: advice_t = 2;
+pub const ADVICE_WILLNEED: advice_t = 3;
+pub const ADVICE_DONTNEED: advice_t = 4;
+pub const ADVICE_NOREUSE: advice_t = 5;
+
+pub const clockid_t = u32;
+pub const CLOCK = struct {
+ pub const REALTIME: clockid_t = 0;
+ pub const MONOTONIC: clockid_t = 1;
+ pub const PROCESS_CPUTIME_ID: clockid_t = 2;
+ pub const THREAD_CPUTIME_ID: clockid_t = 3;
+};
+
+pub const device_t = u64;
+
+pub const dircookie_t = u64;
+pub const DIRCOOKIE_START: dircookie_t = 0;
+
+pub const dirnamlen_t = u32;
+
+pub const dirent_t = extern struct {
+ d_next: dircookie_t,
+ d_ino: inode_t,
+ d_namlen: dirnamlen_t,
+ d_type: filetype_t,
+};
+
+pub const errno_t = enum(u16) {
+ SUCCESS = 0,
+ @"2BIG" = 1,
+ ACCES = 2,
+ ADDRINUSE = 3,
+ ADDRNOTAVAIL = 4,
+ AFNOSUPPORT = 5,
+ /// This is also the error code used for `WOULDBLOCK`.
+ AGAIN = 6,
+ ALREADY = 7,
+ BADF = 8,
+ BADMSG = 9,
+ BUSY = 10,
+ CANCELED = 11,
+ CHILD = 12,
+ CONNABORTED = 13,
+ CONNREFUSED = 14,
+ CONNRESET = 15,
+ DEADLK = 16,
+ DESTADDRREQ = 17,
+ DOM = 18,
+ DQUOT = 19,
+ EXIST = 20,
+ FAULT = 21,
+ FBIG = 22,
+ HOSTUNREACH = 23,
+ IDRM = 24,
+ ILSEQ = 25,
+ INPROGRESS = 26,
+ INTR = 27,
+ INVAL = 28,
+ IO = 29,
+ ISCONN = 30,
+ ISDIR = 31,
+ LOOP = 32,
+ MFILE = 33,
+ MLINK = 34,
+ MSGSIZE = 35,
+ MULTIHOP = 36,
+ NAMETOOLONG = 37,
+ NETDOWN = 38,
+ NETRESET = 39,
+ NETUNREACH = 40,
+ NFILE = 41,
+ NOBUFS = 42,
+ NODEV = 43,
+ NOENT = 44,
+ NOEXEC = 45,
+ NOLCK = 46,
+ NOLINK = 47,
+ NOMEM = 48,
+ NOMSG = 49,
+ NOPROTOOPT = 50,
+ NOSPC = 51,
+ NOSYS = 52,
+ NOTCONN = 53,
+ NOTDIR = 54,
+ NOTEMPTY = 55,
+ NOTRECOVERABLE = 56,
+ NOTSOCK = 57,
+ /// This is also the code used for `NOTSUP`.
+ OPNOTSUPP = 58,
+ NOTTY = 59,
+ NXIO = 60,
+ OVERFLOW = 61,
+ OWNERDEAD = 62,
+ PERM = 63,
+ PIPE = 64,
+ PROTO = 65,
+ PROTONOSUPPORT = 66,
+ PROTOTYPE = 67,
+ RANGE = 68,
+ ROFS = 69,
+ SPIPE = 70,
+ SRCH = 71,
+ STALE = 72,
+ TIMEDOUT = 73,
+ TXTBSY = 74,
+ XDEV = 75,
+ NOTCAPABLE = 76,
+ _,
+};
+pub const E = errno_t;
+
+pub const event_t = extern struct {
+ userdata: userdata_t,
+ @"error": errno_t,
+ @"type": eventtype_t,
+ fd_readwrite: eventfdreadwrite_t,
+};
+
+pub const eventfdreadwrite_t = extern struct {
+ nbytes: filesize_t,
+ flags: eventrwflags_t,
+};
+
+pub const eventrwflags_t = u16;
+pub const EVENT_FD_READWRITE_HANGUP: eventrwflags_t = 0x0001;
+
+pub const eventtype_t = u8;
+pub const EVENTTYPE_CLOCK: eventtype_t = 0;
+pub const EVENTTYPE_FD_READ: eventtype_t = 1;
+pub const EVENTTYPE_FD_WRITE: eventtype_t = 2;
+
+pub const exitcode_t = u32;
+
+pub const fd_t = u32;
+
+pub const fdflags_t = u16;
+pub const FDFLAG_APPEND: fdflags_t = 0x0001;
+pub const FDFLAG_DSYNC: fdflags_t = 0x0002;
+pub const FDFLAG_NONBLOCK: fdflags_t = 0x0004;
+pub const FDFLAG_RSYNC: fdflags_t = 0x0008;
+pub const FDFLAG_SYNC: fdflags_t = 0x0010;
+
+pub const fdstat_t = extern struct {
+ fs_filetype: filetype_t,
+ fs_flags: fdflags_t,
+ fs_rights_base: rights_t,
+ fs_rights_inheriting: rights_t,
+};
+
+pub const filedelta_t = i64;
+
+pub const filesize_t = u64;
+
+pub const filestat_t = extern struct {
+ dev: device_t,
+ ino: inode_t,
+ filetype: filetype_t,
+ nlink: linkcount_t,
+ size: filesize_t,
+ atim: timestamp_t,
+ mtim: timestamp_t,
+ ctim: timestamp_t,
+
+ pub fn atime(self: filestat_t) timespec {
+ return timespec.fromTimestamp(self.atim);
+ }
+
+ pub fn mtime(self: filestat_t) timespec {
+ return timespec.fromTimestamp(self.mtim);
+ }
+
+ pub fn ctime(self: filestat_t) timespec {
+ return timespec.fromTimestamp(self.ctim);
+ }
+};
+
+pub const filetype_t = u8;
+pub const FILETYPE_UNKNOWN: filetype_t = 0;
+pub const FILETYPE_BLOCK_DEVICE: filetype_t = 1;
+pub const FILETYPE_CHARACTER_DEVICE: filetype_t = 2;
+pub const FILETYPE_DIRECTORY: filetype_t = 3;
+pub const FILETYPE_REGULAR_FILE: filetype_t = 4;
+pub const FILETYPE_SOCKET_DGRAM: filetype_t = 5;
+pub const FILETYPE_SOCKET_STREAM: filetype_t = 6;
+pub const FILETYPE_SYMBOLIC_LINK: filetype_t = 7;
+
+pub const fstflags_t = u16;
+pub const FILESTAT_SET_ATIM: fstflags_t = 0x0001;
+pub const FILESTAT_SET_ATIM_NOW: fstflags_t = 0x0002;
+pub const FILESTAT_SET_MTIM: fstflags_t = 0x0004;
+pub const FILESTAT_SET_MTIM_NOW: fstflags_t = 0x0008;
+
+pub const inode_t = u64;
+pub const ino_t = inode_t;
+
+pub const linkcount_t = u64;
+
+pub const lookupflags_t = u32;
+pub const LOOKUP_SYMLINK_FOLLOW: lookupflags_t = 0x00000001;
+
+pub const oflags_t = u16;
+pub const O = struct {
+ pub const CREAT: oflags_t = 0x0001;
+ pub const DIRECTORY: oflags_t = 0x0002;
+ pub const EXCL: oflags_t = 0x0004;
+ pub const TRUNC: oflags_t = 0x0008;
+};
+
+pub const preopentype_t = u8;
+pub const PREOPENTYPE_DIR: preopentype_t = 0;
+
+pub const prestat_t = extern struct {
+ pr_type: preopentype_t,
+ u: prestat_u_t,
+};
+
+pub const prestat_dir_t = extern struct {
+ pr_name_len: usize,
+};
+
+pub const prestat_u_t = extern union {
+ dir: prestat_dir_t,
+};
+
+pub const riflags_t = u16;
+pub const SOCK_RECV_PEEK: riflags_t = 0x0001;
+pub const SOCK_RECV_WAITALL: riflags_t = 0x0002;
+
+pub const rights_t = u64;
+pub const RIGHT_FD_DATASYNC: rights_t = 0x0000000000000001;
+pub const RIGHT_FD_READ: rights_t = 0x0000000000000002;
+pub const RIGHT_FD_SEEK: rights_t = 0x0000000000000004;
+pub const RIGHT_FD_FDSTAT_SET_FLAGS: rights_t = 0x0000000000000008;
+pub const RIGHT_FD_SYNC: rights_t = 0x0000000000000010;
+pub const RIGHT_FD_TELL: rights_t = 0x0000000000000020;
+pub const RIGHT_FD_WRITE: rights_t = 0x0000000000000040;
+pub const RIGHT_FD_ADVISE: rights_t = 0x0000000000000080;
+pub const RIGHT_FD_ALLOCATE: rights_t = 0x0000000000000100;
+pub const RIGHT_PATH_CREATE_DIRECTORY: rights_t = 0x0000000000000200;
+pub const RIGHT_PATH_CREATE_FILE: rights_t = 0x0000000000000400;
+pub const RIGHT_PATH_LINK_SOURCE: rights_t = 0x0000000000000800;
+pub const RIGHT_PATH_LINK_TARGET: rights_t = 0x0000000000001000;
+pub const RIGHT_PATH_OPEN: rights_t = 0x0000000000002000;
+pub const RIGHT_FD_READDIR: rights_t = 0x0000000000004000;
+pub const RIGHT_PATH_READLINK: rights_t = 0x0000000000008000;
+pub const RIGHT_PATH_RENAME_SOURCE: rights_t = 0x0000000000010000;
+pub const RIGHT_PATH_RENAME_TARGET: rights_t = 0x0000000000020000;
+pub const RIGHT_PATH_FILESTAT_GET: rights_t = 0x0000000000040000;
+pub const RIGHT_PATH_FILESTAT_SET_SIZE: rights_t = 0x0000000000080000;
+pub const RIGHT_PATH_FILESTAT_SET_TIMES: rights_t = 0x0000000000100000;
+pub const RIGHT_FD_FILESTAT_GET: rights_t = 0x0000000000200000;
+pub const RIGHT_FD_FILESTAT_SET_SIZE: rights_t = 0x0000000000400000;
+pub const RIGHT_FD_FILESTAT_SET_TIMES: rights_t = 0x0000000000800000;
+pub const RIGHT_PATH_SYMLINK: rights_t = 0x0000000001000000;
+pub const RIGHT_PATH_REMOVE_DIRECTORY: rights_t = 0x0000000002000000;
+pub const RIGHT_PATH_UNLINK_FILE: rights_t = 0x0000000004000000;
+pub const RIGHT_POLL_FD_READWRITE: rights_t = 0x0000000008000000;
+pub const RIGHT_SOCK_SHUTDOWN: rights_t = 0x0000000010000000;
+pub const RIGHT_ALL: rights_t = RIGHT_FD_DATASYNC |
+ RIGHT_FD_READ |
+ RIGHT_FD_SEEK |
+ RIGHT_FD_FDSTAT_SET_FLAGS |
+ RIGHT_FD_SYNC |
+ RIGHT_FD_TELL |
+ RIGHT_FD_WRITE |
+ RIGHT_FD_ADVISE |
+ RIGHT_FD_ALLOCATE |
+ RIGHT_PATH_CREATE_DIRECTORY |
+ RIGHT_PATH_CREATE_FILE |
+ RIGHT_PATH_LINK_SOURCE |
+ RIGHT_PATH_LINK_TARGET |
+ RIGHT_PATH_OPEN |
+ RIGHT_FD_READDIR |
+ RIGHT_PATH_READLINK |
+ RIGHT_PATH_RENAME_SOURCE |
+ RIGHT_PATH_RENAME_TARGET |
+ RIGHT_PATH_FILESTAT_GET |
+ RIGHT_PATH_FILESTAT_SET_SIZE |
+ RIGHT_PATH_FILESTAT_SET_TIMES |
+ RIGHT_FD_FILESTAT_GET |
+ RIGHT_FD_FILESTAT_SET_SIZE |
+ RIGHT_FD_FILESTAT_SET_TIMES |
+ RIGHT_PATH_SYMLINK |
+ RIGHT_PATH_REMOVE_DIRECTORY |
+ RIGHT_PATH_UNLINK_FILE |
+ RIGHT_POLL_FD_READWRITE |
+ RIGHT_SOCK_SHUTDOWN;
+
+pub const roflags_t = u16;
+pub const SOCK_RECV_DATA_TRUNCATED: roflags_t = 0x0001;
+
+pub const sdflags_t = u8;
+pub const SHUT_RD: sdflags_t = 0x01;
+pub const SHUT_WR: sdflags_t = 0x02;
+
+pub const siflags_t = u16;
+
+pub const signal_t = u8;
+pub const SIGNONE: signal_t = 0;
+pub const SIGHUP: signal_t = 1;
+pub const SIGINT: signal_t = 2;
+pub const SIGQUIT: signal_t = 3;
+pub const SIGILL: signal_t = 4;
+pub const SIGTRAP: signal_t = 5;
+pub const SIGABRT: signal_t = 6;
+pub const SIGBUS: signal_t = 7;
+pub const SIGFPE: signal_t = 8;
+pub const SIGKILL: signal_t = 9;
+pub const SIGUSR1: signal_t = 10;
+pub const SIGSEGV: signal_t = 11;
+pub const SIGUSR2: signal_t = 12;
+pub const SIGPIPE: signal_t = 13;
+pub const SIGALRM: signal_t = 14;
+pub const SIGTERM: signal_t = 15;
+pub const SIGCHLD: signal_t = 16;
+pub const SIGCONT: signal_t = 17;
+pub const SIGSTOP: signal_t = 18;
+pub const SIGTSTP: signal_t = 19;
+pub const SIGTTIN: signal_t = 20;
+pub const SIGTTOU: signal_t = 21;
+pub const SIGURG: signal_t = 22;
+pub const SIGXCPU: signal_t = 23;
+pub const SIGXFSZ: signal_t = 24;
+pub const SIGVTALRM: signal_t = 25;
+pub const SIGPROF: signal_t = 26;
+pub const SIGWINCH: signal_t = 27;
+pub const SIGPOLL: signal_t = 28;
+pub const SIGPWR: signal_t = 29;
+pub const SIGSYS: signal_t = 30;
+
+pub const subclockflags_t = u16;
+pub const SUBSCRIPTION_CLOCK_ABSTIME: subclockflags_t = 0x0001;
+
+pub const subscription_t = extern struct {
+ userdata: userdata_t,
+ u: subscription_u_t,
+};
+
+pub const subscription_clock_t = extern struct {
+ id: clockid_t,
+ timeout: timestamp_t,
+ precision: timestamp_t,
+ flags: subclockflags_t,
+};
+
+pub const subscription_fd_readwrite_t = extern struct {
+ fd: fd_t,
+};
+
+pub const subscription_u_t = extern struct {
+ tag: eventtype_t,
+ u: subscription_u_u_t,
+};
+
+pub const subscription_u_u_t = extern union {
+ clock: subscription_clock_t,
+ fd_read: subscription_fd_readwrite_t,
+ fd_write: subscription_fd_readwrite_t,
+};
+
+pub const timestamp_t = u64;
+
+pub const userdata_t = u64;
+
+pub const whence_t = u8;
+pub const WHENCE_SET: whence_t = 0;
+pub const WHENCE_CUR: whence_t = 1;
+pub const WHENCE_END: whence_t = 2;
+
+pub const S_IEXEC = S_IXUSR;
+pub const S_IFBLK = 0x6000;
+pub const S_IFCHR = 0x2000;
+pub const S_IFDIR = 0x4000;
+pub const S_IFIFO = 0xc000;
+pub const S_IFLNK = 0xa000;
+pub const S_IFMT = S_IFBLK | S_IFCHR | S_IFDIR | S_IFIFO | S_IFLNK | S_IFREG | S_IFSOCK;
+pub const S_IFREG = 0x8000;
+// There's no concept of UNIX domain socket but we define this value here in order to line with other OSes.
+pub const S_IFSOCK = 0x1;
+
+pub const SEEK_SET = WHENCE_SET;
+pub const SEEK_CUR = WHENCE_CUR;
+pub const SEEK_END = WHENCE_END;
+
+pub const LOCK_SH = 0x1;
+pub const LOCK_EX = 0x2;
+pub const LOCK_NB = 0x4;
+pub const LOCK_UN = 0x8;
diff --git a/lib/std/os/windows/ws2_32.zig b/lib/std/os/windows/ws2_32.zig
index be55966917..d401509f74 100644
--- a/lib/std/os/windows/ws2_32.zig
+++ b/lib/std/os/windows/ws2_32.zig
@@ -1,5 +1,4 @@
const std = @import("../../std.zig");
-usingnamespace @import("bits.zig");
pub const SOCKET = *opaque {};
pub const INVALID_SOCKET = @intToPtr(SOCKET, ~@as(usize, 0));