// Automatically generated by clay-bindgen
// language: c

private alias OpaquePointer = RawPointer;
private alias UnknownType = Int;
private alias AUnionType = Int;


record Struct___va_list_tag (
    gp_offset : UInt,
    fp_offset : UInt,
    overflow_arg_area : RawPointer,
    reg_save_area : RawPointer,
);

alias __va_list_tag = Struct___va_list_tag;

alias __builtin_va_list = Array[__va_list_tag,1];

alias __int8_t = CChar;

alias __uint8_t = CUChar;

alias __int16_t = Short;

alias __uint16_t = UShort;

alias __int32_t = Int;

alias __uint32_t = UInt;

alias __int64_t = Int64;

alias __uint64_t = UInt64;

alias __darwin_intptr_t = CLong;

alias __darwin_natural_t = UInt;

alias __darwin_ct_rune_t = Int;

alias __mbstate_t = AUnionType;

alias __darwin_mbstate_t = __mbstate_t;

alias __darwin_ptrdiff_t = CLong;

alias __darwin_size_t = CULong;

alias __darwin_va_list = __builtin_va_list;

alias __darwin_wchar_t = Int;

alias __darwin_rune_t = Int;

alias __darwin_wint_t = Int;

alias __darwin_clock_t = CULong;

alias __darwin_socklen_t = UInt;

alias __darwin_ssize_t = CLong;

alias __darwin_time_t = CLong;

record Struct___darwin_pthread_handler_rec (
    __routine : CCodePointer[[RawPointer],[]],
    __arg : RawPointer,
    __next : Pointer[Struct___darwin_pthread_handler_rec],
);

record Struct__opaque_pthread_attr_t (
    __sig : CLong,
    __opaque : Array[CChar,56],
);

record Struct__opaque_pthread_cond_t (
    __sig : CLong,
    __opaque : Array[CChar,40],
);

record Struct__opaque_pthread_condattr_t (
    __sig : CLong,
    __opaque : Array[CChar,8],
);

record Struct__opaque_pthread_mutex_t (
    __sig : CLong,
    __opaque : Array[CChar,56],
);

record Struct__opaque_pthread_mutexattr_t (
    __sig : CLong,
    __opaque : Array[CChar,8],
);

record Struct__opaque_pthread_once_t (
    __sig : CLong,
    __opaque : Array[CChar,8],
);

record Struct__opaque_pthread_rwlock_t (
    __sig : CLong,
    __opaque : Array[CChar,192],
);

record Struct__opaque_pthread_rwlockattr_t (
    __sig : CLong,
    __opaque : Array[CChar,16],
);

record Struct__opaque_pthread_t (
    __sig : CLong,
    __cleanup_stack : Pointer[Struct___darwin_pthread_handler_rec],
    __opaque : Array[CChar,1168],
);

alias __darwin_blkcnt_t = Int64;

alias __darwin_blksize_t = Int;

alias __darwin_dev_t = Int;

alias __darwin_fsblkcnt_t = UInt;

alias __darwin_fsfilcnt_t = UInt;

alias __darwin_gid_t = UInt;

alias __darwin_id_t = UInt;

alias __darwin_ino64_t = UInt64;

alias __darwin_ino_t = UInt64;

alias __darwin_mach_port_name_t = UInt;

alias __darwin_mach_port_t = UInt;

alias __darwin_mode_t = UShort;

alias __darwin_off_t = Int64;

alias __darwin_pid_t = Int;

alias __darwin_pthread_attr_t = Struct__opaque_pthread_attr_t;

alias __darwin_pthread_cond_t = Struct__opaque_pthread_cond_t;

alias __darwin_pthread_condattr_t = Struct__opaque_pthread_condattr_t;

alias __darwin_pthread_key_t = CULong;

alias __darwin_pthread_mutex_t = Struct__opaque_pthread_mutex_t;

alias __darwin_pthread_mutexattr_t = Struct__opaque_pthread_mutexattr_t;

alias __darwin_pthread_once_t = Struct__opaque_pthread_once_t;

alias __darwin_pthread_rwlock_t = Struct__opaque_pthread_rwlock_t;

alias __darwin_pthread_rwlockattr_t = Struct__opaque_pthread_rwlockattr_t;

alias __darwin_pthread_t = Pointer[Struct__opaque_pthread_t];

alias __darwin_sigset_t = UInt;

alias __darwin_suseconds_t = Int;

alias __darwin_uid_t = UInt;

alias __darwin_useconds_t = UInt;

alias __darwin_uuid_t = Array[CUChar,16];

alias __darwin_uuid_string_t = Array[CChar,37];

alias __darwin_nl_item = Int;

alias __darwin_wctrans_t = Int;

alias __darwin_wctype_t = UInt;

record Struct_accessx_descriptor (
    ad_name_offset : UInt,
    ad_flags : Int,
    ad_pad : Array[Int,2],
);

alias dev_t = Int;

alias gid_t = UInt;

alias intptr_t = CLong;

alias mode_t = UShort;

alias off_t = Int64;

alias pid_t = Int;

alias size_t = CULong;

alias ssize_t = CLong;

alias uid_t = UInt;

alias useconds_t = UInt;

alias uuid_t = __darwin_uuid_t;

external _exit(
    argument0 : Int);

external access(
    argument0 : Pointer[CChar],
    argument1 : Int) : Int;

external alarm(
    argument0 : UInt) : UInt;

external chdir(
    argument0 : Pointer[CChar]) : Int;

external chown(
    argument0 : Pointer[CChar],
    argument1 : UInt,
    argument2 : UInt) : Int;

external ("_close") close(
    argument0 : Int) : Int;

external ("_confstr") confstr(
    argument0 : Int,
    argument1 : Pointer[CChar],
    argument2 : CULong) : CULong;

external crypt(
    argument0 : Pointer[CChar],
    argument1 : Pointer[CChar]) : Pointer[CChar];

external ctermid(
    argument0 : Pointer[CChar]) : Pointer[CChar];

external dup(
    argument0 : Int) : Int;

external dup2(
    argument0 : Int,
    argument1 : Int) : Int;

external ("_encrypt") encrypt(
    argument0 : Pointer[CChar],
    argument1 : Int);

external execl(
    argument0 : Pointer[CChar],
    argument1 : Pointer[CChar],
    ..) : Int;

external execle(
    argument0 : Pointer[CChar],
    argument1 : Pointer[CChar],
    ..) : Int;

external execlp(
    argument0 : Pointer[CChar],
    argument1 : Pointer[CChar],
    ..) : Int;

external execv(
    argument0 : Pointer[CChar],
    argument1 : Pointer[Pointer[CChar]]) : Int;

external execve(
    argument0 : Pointer[CChar],
    argument1 : Pointer[Pointer[CChar]],
    argument2 : Pointer[Pointer[CChar]]) : Int;

external execvp(
    argument0 : Pointer[CChar],
    argument1 : Pointer[Pointer[CChar]]) : Int;

external fchown(
    argument0 : Int,
    argument1 : UInt,
    argument2 : UInt) : Int;

external fchdir(
    argument0 : Int) : Int;

external fork() : Int;

external fpathconf(
    argument0 : Int,
    argument1 : Int) : CLong;

external ("_fsync") fsync(
    argument0 : Int) : Int;

external ftruncate(
    argument0 : Int,
    argument1 : Int64) : Int;

external getcwd(
    argument0 : Pointer[CChar],
    argument1 : CULong) : Pointer[CChar];

external getegid() : UInt;

external geteuid() : UInt;

external getgid() : UInt;

external getgroups(
    argument0 : Int,
    argument1 : Pointer[UInt]) : Int;

external gethostid() : CLong;

external gethostname(
    argument0 : Pointer[CChar],
    argument1 : CULong) : Int;

external getlogin() : Pointer[CChar];

external getlogin_r(
    argument0 : Pointer[CChar],
    argument1 : CULong) : Int;

external ("_getopt") getopt(
    argument0 : Int,
    argument1 : Pointer[Pointer[CChar]],
    argument2 : Pointer[CChar]) : Int;

external getpgid(
    argument0 : Int) : Int;

external getpgrp() : Int;

external getpid() : Int;

external getppid() : Int;

external getsid(
    argument0 : Int) : Int;

external getuid() : UInt;

external getwd(
    argument0 : Pointer[CChar]) : Pointer[CChar];

external isatty(
    argument0 : Int) : Int;

external ("_lchown") lchown(
    argument0 : Pointer[CChar],
    argument1 : UInt,
    argument2 : UInt) : Int;

external link(
    argument0 : Pointer[CChar],
    argument1 : Pointer[CChar]) : Int;

external ("_lockf") lockf(
    argument0 : Int,
    argument1 : Int,
    argument2 : Int64) : Int;

external lseek(
    argument0 : Int,
    argument1 : Int64,
    argument2 : Int) : Int64;

external ("_nice") nice(
    argument0 : Int) : Int;

external pathconf(
    argument0 : Pointer[CChar],
    argument1 : Int) : CLong;

external ("_pause") pause() : Int;

external pipe(
    argument0 : Pointer[Int]) : Int;

external ("_pread") pread(
    argument0 : Int,
    argument1 : RawPointer,
    argument2 : CULong,
    argument3 : Int64) : CLong;

external ("_pwrite") pwrite(
    argument0 : Int,
    argument1 : RawPointer,
    argument2 : CULong,
    argument3 : Int64) : CLong;

external ("_read") read(
    argument0 : Int,
    argument1 : RawPointer,
    argument2 : CULong) : CLong;

external readlink(
    argument0 : Pointer[CChar],
    argument1 : Pointer[CChar],
    argument2 : CULong) : CLong;

external rmdir(
    argument0 : Pointer[CChar]) : Int;

external setegid(
    argument0 : UInt) : Int;

external seteuid(
    argument0 : UInt) : Int;

external setgid(
    argument0 : UInt) : Int;

external setpgid(
    argument0 : Int,
    argument1 : Int) : Int;

external ("_setpgrp") setpgrp() : Int;

external ("_setregid") setregid(
    argument0 : UInt,
    argument1 : UInt) : Int;

external ("_setreuid") setreuid(
    argument0 : UInt,
    argument1 : UInt) : Int;

external setsid() : Int;

external setuid(
    argument0 : UInt) : Int;

external ("_sleep") sleep(
    argument0 : UInt) : UInt;

external swab(
    argument0 : RawPointer,
    argument1 : RawPointer,
    argument2 : CLong);

external symlink(
    argument0 : Pointer[CChar],
    argument1 : Pointer[CChar]) : Int;

external sync();

external sysconf(
    argument0 : Int) : CLong;

external tcgetpgrp(
    argument0 : Int) : Int;

external tcsetpgrp(
    argument0 : Int,
    argument1 : Int) : Int;

external truncate(
    argument0 : Pointer[CChar],
    argument1 : Int64) : Int;

external ttyname(
    argument0 : Int) : Pointer[CChar];

external ("_ttyname_r") ttyname_r(
    argument0 : Int,
    argument1 : Pointer[CChar],
    argument2 : CULong) : Int;

external ualarm(
    argument0 : UInt,
    argument1 : UInt) : UInt;

external unlink(
    argument0 : Pointer[CChar]) : Int;

external ("_usleep") usleep(
    argument0 : UInt) : Int;

external vfork() : Int;

external ("_write") write(
    argument0 : Int,
    argument1 : RawPointer,
    argument2 : CULong) : CLong;

external optarg : Pointer[CChar];

external optind : Int;

external opterr : Int;

external optopt : Int;

record Struct_timespec (
    tv_sec : CLong,
    tv_nsec : CLong,
);

record Struct_timeval (
    tv_sec : CLong,
    tv_usec : Int,
);

record Struct_fd_set (
    fds_bits : Array[Int,32],
);

alias fd_set = Struct_fd_set;

alias time_t = CLong;

alias suseconds_t = Int;

alias sigset_t = UInt;

external ("_pselect$1050") pselect(
    argument0 : Int,
    argument1 : Pointer[fd_set],
    argument2 : Pointer[fd_set],
    argument3 : Pointer[fd_set],
    argument4 : Pointer[Struct_timespec],
    argument5 : Pointer[UInt]) : Int;

external ("_select$1050") select(
    argument0 : Int,
    argument1 : Pointer[fd_set],
    argument2 : Pointer[fd_set],
    argument3 : Pointer[fd_set],
    argument4 : Pointer[Struct_timeval]) : Int;

external _Exit(
    argument0 : Int);

external accessx_np(
    argument0 : Pointer[Struct_accessx_descriptor],
    argument1 : CULong,
    argument2 : Pointer[Int],
    argument3 : UInt) : Int;

external acct(
    argument0 : Pointer[CChar]) : Int;

external add_profil(
    argument0 : Pointer[CChar],
    argument1 : CULong,
    argument2 : CULong,
    argument3 : UInt) : Int;

external brk(
    argument0 : RawPointer) : RawPointer;

external chroot(
    argument0 : Pointer[CChar]) : Int;

external endusershell();

external execvP(
    argument0 : Pointer[CChar],
    argument1 : Pointer[CChar],
    argument2 : Pointer[Pointer[CChar]]) : Int;

external fflagstostr(
    argument0 : CULong) : Pointer[CChar];

external getdtablesize() : Int;

external getdomainname(
    argument0 : Pointer[CChar],
    argument1 : Int) : Int;

external getgrouplist(
    argument0 : Pointer[CChar],
    argument1 : Int,
    argument2 : Pointer[Int],
    argument3 : Pointer[Int]) : Int;

external gethostuuid(
    argument0 : Pointer[CUChar],
    argument1 : Pointer[Struct_timespec]) : Int;

external getmode(
    argument0 : RawPointer,
    argument1 : UShort) : UShort;

external getpagesize() : Int;

external getpass(
    argument0 : Pointer[CChar]) : Pointer[CChar];

external getpeereid(
    argument0 : Int,
    argument1 : Pointer[UInt],
    argument2 : Pointer[UInt]) : Int;

external getsgroups_np(
    argument0 : Pointer[Int],
    argument1 : Pointer[CUChar]) : Int;

external getusershell() : Pointer[CChar];

external getwgroups_np(
    argument0 : Pointer[Int],
    argument1 : Pointer[CUChar]) : Int;

external initgroups(
    argument0 : Pointer[CChar],
    argument1 : Int) : Int;

external iruserok(
    argument0 : CULong,
    argument1 : Int,
    argument2 : Pointer[CChar],
    argument3 : Pointer[CChar]) : Int;

external iruserok_sa(
    argument0 : RawPointer,
    argument1 : Int,
    argument2 : Int,
    argument3 : Pointer[CChar],
    argument4 : Pointer[CChar]) : Int;

external issetugid() : Int;

external mkdtemp(
    argument0 : Pointer[CChar]) : Pointer[CChar];

external mknod(
    argument0 : Pointer[CChar],
    argument1 : UShort,
    argument2 : Int) : Int;

external mkstemp(
    argument0 : Pointer[CChar]) : Int;

external mkstemps(
    argument0 : Pointer[CChar],
    argument1 : Int) : Int;

external mktemp(
    argument0 : Pointer[CChar]) : Pointer[CChar];

external nfssvc(
    argument0 : Int,
    argument1 : RawPointer) : Int;

external profil(
    argument0 : Pointer[CChar],
    argument1 : CULong,
    argument2 : CULong,
    argument3 : UInt) : Int;

external pthread_setugid_np(
    argument0 : UInt,
    argument1 : UInt) : Int;

external pthread_getugid_np(
    argument0 : Pointer[UInt],
    argument1 : Pointer[UInt]) : Int;

external rcmd(
    argument0 : Pointer[Pointer[CChar]],
    argument1 : Int,
    argument2 : Pointer[CChar],
    argument3 : Pointer[CChar],
    argument4 : Pointer[CChar],
    argument5 : Pointer[Int]) : Int;

external rcmd_af(
    argument0 : Pointer[Pointer[CChar]],
    argument1 : Int,
    argument2 : Pointer[CChar],
    argument3 : Pointer[CChar],
    argument4 : Pointer[CChar],
    argument5 : Pointer[Int],
    argument6 : Int) : Int;

external reboot(
    argument0 : Int) : Int;

external revoke(
    argument0 : Pointer[CChar]) : Int;

external rresvport(
    argument0 : Pointer[Int]) : Int;

external rresvport_af(
    argument0 : Pointer[Int],
    argument1 : Int) : Int;

external ruserok(
    argument0 : Pointer[CChar],
    argument1 : Int,
    argument2 : Pointer[CChar],
    argument3 : Pointer[CChar]) : Int;

external sbrk(
    argument0 : Int) : RawPointer;

external setdomainname(
    argument0 : Pointer[CChar],
    argument1 : Int) : Int;

external setgroups(
    argument0 : Int,
    argument1 : Pointer[UInt]) : Int;

external sethostid(
    argument0 : CLong);

external sethostname(
    argument0 : Pointer[CChar],
    argument1 : Int) : Int;

external ("_setkey") setkey(
    argument0 : Pointer[CChar]);

external setlogin(
    argument0 : Pointer[CChar]) : Int;

external ("_setmode") setmode(
    argument0 : Pointer[CChar]) : RawPointer;

external setrgid(
    argument0 : UInt) : Int;

external setruid(
    argument0 : UInt) : Int;

external setsgroups_np(
    argument0 : Int,
    argument1 : Pointer[CUChar]) : Int;

external setusershell();

external setwgroups_np(
    argument0 : Int,
    argument1 : Pointer[CUChar]) : Int;

external strtofflags(
    argument0 : Pointer[Pointer[CChar]],
    argument1 : Pointer[CULong],
    argument2 : Pointer[CULong]) : Int;

external swapon(
    argument0 : Pointer[CChar]) : Int;

external syscall(
    argument0 : Int,
    ..) : Int;

external ttyslot() : Int;

external undelete(
    argument0 : Pointer[CChar]) : Int;

external unwhiteout(
    argument0 : Pointer[CChar]) : Int;

external valloc(
    argument0 : CULong) : RawPointer;

external suboptarg : Pointer[CChar];

external getsubopt(
    argument0 : Pointer[Pointer[CChar]],
    argument1 : Pointer[Pointer[CChar]],
    argument2 : Pointer[Pointer[CChar]]) : Int;

external fgetattrlist(
    argument0 : Int,
    argument1 : RawPointer,
    argument2 : RawPointer,
    argument3 : CULong,
    argument4 : UInt) : Int;

external fsetattrlist(
    argument0 : Int,
    argument1 : RawPointer,
    argument2 : RawPointer,
    argument3 : CULong,
    argument4 : UInt) : Int;

external ("_getattrlist") getattrlist(
    argument0 : Pointer[CChar],
    argument1 : RawPointer,
    argument2 : RawPointer,
    argument3 : CULong,
    argument4 : UInt) : Int;

external ("_setattrlist") setattrlist(
    argument0 : Pointer[CChar],
    argument1 : RawPointer,
    argument2 : RawPointer,
    argument3 : CULong,
    argument4 : UInt) : Int;

external exchangedata(
    argument0 : Pointer[CChar],
    argument1 : Pointer[CChar],
    argument2 : UInt) : Int;

external getdirentriesattr(
    argument0 : Int,
    argument1 : RawPointer,
    argument2 : RawPointer,
    argument3 : CULong,
    argument4 : Pointer[UInt],
    argument5 : Pointer[UInt],
    argument6 : Pointer[UInt],
    argument7 : UInt) : Int;

external searchfs(
    argument0 : Pointer[CChar],
    argument1 : OpaquePointer,
    argument2 : Pointer[CULong],
    argument3 : UInt,
    argument4 : UInt,
    argument5 : OpaquePointer) : Int;

external fsctl(
    argument0 : Pointer[CChar],
    argument1 : CULong,
    argument2 : RawPointer,
    argument3 : UInt) : Int;

external ffsctl(
    argument0 : Int,
    argument1 : CULong,
    argument2 : RawPointer,
    argument3 : UInt) : Int;

external optreset : Int;

external __error() : Pointer[Int];

record Struct_sched_param (
    sched_priority : Int,
    __opaque : Array[CChar,4],
);

external sched_yield() : Int;

external sched_get_priority_min(
    argument0 : Int) : Int;

external sched_get_priority_max(
    argument0 : Int) : Int;

alias clock_t = CULong;

record Struct_tm (
    tm_sec : Int,
    tm_min : Int,
    tm_hour : Int,
    tm_mday : Int,
    tm_mon : Int,
    tm_year : Int,
    tm_wday : Int,
    tm_yday : Int,
    tm_isdst : Int,
    tm_gmtoff : CLong,
    tm_zone : Pointer[CChar],
);

external tzname : Array[Pointer[CChar],0];

external getdate_err : Int;

external timezone : CLong;

external daylight : Int;

external asctime(
    argument0 : Pointer[Struct_tm]) : Pointer[CChar];

external ("_clock") clock() : CULong;

external ctime(
    argument0 : Pointer[CLong]) : Pointer[CChar];

external difftime(
    argument0 : CLong,
    argument1 : CLong) : Double;

external getdate(
    argument0 : Pointer[CChar]) : Pointer[Struct_tm];

external gmtime(
    argument0 : Pointer[CLong]) : Pointer[Struct_tm];

external localtime(
    argument0 : Pointer[CLong]) : Pointer[Struct_tm];

external ("_mktime") mktime(
    argument0 : Pointer[Struct_tm]) : CLong;

external ("_strftime") strftime(
    argument0 : Pointer[CChar],
    argument1 : CULong,
    argument2 : Pointer[CChar],
    argument3 : Pointer[Struct_tm]) : CULong;

external ("_strptime") strptime(
    argument0 : Pointer[CChar],
    argument1 : Pointer[CChar],
    argument2 : Pointer[Struct_tm]) : Pointer[CChar];

external time(
    argument0 : Pointer[CLong]) : CLong;

external tzset();

external asctime_r(
    argument0 : Pointer[Struct_tm],
    argument1 : Pointer[CChar]) : Pointer[CChar];

external ctime_r(
    argument0 : Pointer[CLong],
    argument1 : Pointer[CChar]) : Pointer[CChar];

external gmtime_r(
    argument0 : Pointer[CLong],
    argument1 : Pointer[Struct_tm]) : Pointer[Struct_tm];

external localtime_r(
    argument0 : Pointer[CLong],
    argument1 : Pointer[Struct_tm]) : Pointer[Struct_tm];

external posix2time(
    argument0 : CLong) : CLong;

external tzsetwall();

external time2posix(
    argument0 : CLong) : CLong;

external timelocal(
    argument0 : Pointer[Struct_tm]) : CLong;

external timegm(
    argument0 : Pointer[Struct_tm]) : CLong;

external ("_nanosleep") nanosleep(
    argument0 : Pointer[Struct_timespec],
    argument1 : Pointer[Struct_timespec]) : Int;

alias pthread_attr_t = __darwin_pthread_attr_t;

alias pthread_cond_t = __darwin_pthread_cond_t;

alias pthread_condattr_t = __darwin_pthread_condattr_t;

alias pthread_key_t = CULong;

alias pthread_mutex_t = __darwin_pthread_mutex_t;

alias pthread_mutexattr_t = __darwin_pthread_mutexattr_t;

alias pthread_once_t = __darwin_pthread_once_t;

alias pthread_rwlock_t = __darwin_pthread_rwlock_t;

alias pthread_rwlockattr_t = __darwin_pthread_rwlockattr_t;

alias pthread_t = __darwin_pthread_t;

alias mach_port_t = UInt;

external pthread_atfork(
    argument0 : CCodePointer[[],[]],
    argument1 : CCodePointer[[],[]],
    argument2 : CCodePointer[[],[]]) : Int;

external pthread_attr_destroy(
    argument0 : Pointer[pthread_attr_t]) : Int;

external pthread_attr_getdetachstate(
    argument0 : Pointer[pthread_attr_t],
    argument1 : Pointer[Int]) : Int;

external pthread_attr_getguardsize(
    argument0 : Pointer[pthread_attr_t],
    argument1 : Pointer[CULong]) : Int;

external pthread_attr_getinheritsched(
    argument0 : Pointer[pthread_attr_t],
    argument1 : Pointer[Int]) : Int;

external pthread_attr_getschedparam(
    argument0 : Pointer[pthread_attr_t],
    argument1 : Pointer[Struct_sched_param]) : Int;

external pthread_attr_getschedpolicy(
    argument0 : Pointer[pthread_attr_t],
    argument1 : Pointer[Int]) : Int;

external pthread_attr_getscope(
    argument0 : Pointer[pthread_attr_t],
    argument1 : Pointer[Int]) : Int;

external pthread_attr_getstack(
    argument0 : Pointer[pthread_attr_t],
    argument1 : Pointer[RawPointer],
    argument2 : Pointer[CULong]) : Int;

external pthread_attr_getstackaddr(
    argument0 : Pointer[pthread_attr_t],
    argument1 : Pointer[RawPointer]) : Int;

external pthread_attr_getstacksize(
    argument0 : Pointer[pthread_attr_t],
    argument1 : Pointer[CULong]) : Int;

external pthread_attr_init(
    argument0 : Pointer[pthread_attr_t]) : Int;

external pthread_attr_setdetachstate(
    argument0 : Pointer[pthread_attr_t],
    argument1 : Int) : Int;

external pthread_attr_setguardsize(
    argument0 : Pointer[pthread_attr_t],
    argument1 : CULong) : Int;

external pthread_attr_setinheritsched(
    argument0 : Pointer[pthread_attr_t],
    argument1 : Int) : Int;

external pthread_attr_setschedparam(
    argument0 : Pointer[pthread_attr_t],
    argument1 : Pointer[Struct_sched_param]) : Int;

external pthread_attr_setschedpolicy(
    argument0 : Pointer[pthread_attr_t],
    argument1 : Int) : Int;

external pthread_attr_setscope(
    argument0 : Pointer[pthread_attr_t],
    argument1 : Int) : Int;

external pthread_attr_setstack(
    argument0 : Pointer[pthread_attr_t],
    argument1 : RawPointer,
    argument2 : CULong) : Int;

external pthread_attr_setstackaddr(
    argument0 : Pointer[pthread_attr_t],
    argument1 : RawPointer) : Int;

external pthread_attr_setstacksize(
    argument0 : Pointer[pthread_attr_t],
    argument1 : CULong) : Int;

external ("_pthread_cancel") pthread_cancel(
    argument0 : pthread_t) : Int;

external pthread_cond_broadcast(
    argument0 : Pointer[pthread_cond_t]) : Int;

external pthread_cond_destroy(
    argument0 : Pointer[pthread_cond_t]) : Int;

external ("_pthread_cond_init") pthread_cond_init(
    argument0 : Pointer[pthread_cond_t],
    argument1 : Pointer[pthread_condattr_t]) : Int;

external pthread_cond_signal(
    argument0 : Pointer[pthread_cond_t]) : Int;

external ("_pthread_cond_timedwait") pthread_cond_timedwait(
    argument0 : Pointer[pthread_cond_t],
    argument1 : Pointer[pthread_mutex_t],
    argument2 : Pointer[Struct_timespec]) : Int;

external ("_pthread_cond_wait") pthread_cond_wait(
    argument0 : Pointer[pthread_cond_t],
    argument1 : Pointer[pthread_mutex_t]) : Int;

external pthread_condattr_destroy(
    argument0 : Pointer[pthread_condattr_t]) : Int;

external pthread_condattr_init(
    argument0 : Pointer[pthread_condattr_t]) : Int;

external pthread_condattr_getpshared(
    argument0 : Pointer[pthread_condattr_t],
    argument1 : Pointer[Int]) : Int;

external pthread_condattr_setpshared(
    argument0 : Pointer[pthread_condattr_t],
    argument1 : Int) : Int;

external pthread_create(
    argument0 : Pointer[pthread_t],
    argument1 : Pointer[pthread_attr_t],
    argument2 : CCodePointer[[RawPointer],[RawPointer]],
    argument3 : RawPointer) : Int;

external pthread_detach(
    argument0 : pthread_t) : Int;

external pthread_equal(
    argument0 : pthread_t,
    argument1 : pthread_t) : Int;

external pthread_exit(
    argument0 : RawPointer);

external pthread_getconcurrency() : Int;

external pthread_getschedparam(
    argument0 : pthread_t,
    argument1 : Pointer[Int],
    argument2 : Pointer[Struct_sched_param]) : Int;

external pthread_getspecific(
    argument0 : CULong) : RawPointer;

external ("_pthread_join") pthread_join(
    argument0 : pthread_t,
    argument1 : Pointer[RawPointer]) : Int;

external pthread_key_create(
    argument0 : Pointer[CULong],
    argument1 : CCodePointer[[RawPointer],[]]) : Int;

external pthread_key_delete(
    argument0 : CULong) : Int;

external pthread_mutex_destroy(
    argument0 : Pointer[pthread_mutex_t]) : Int;

external pthread_mutex_getprioceiling(
    argument0 : Pointer[pthread_mutex_t],
    argument1 : Pointer[Int]) : Int;

external pthread_mutex_init(
    argument0 : Pointer[pthread_mutex_t],
    argument1 : Pointer[pthread_mutexattr_t]) : Int;

external pthread_mutex_lock(
    argument0 : Pointer[pthread_mutex_t]) : Int;

external pthread_mutex_setprioceiling(
    argument0 : Pointer[pthread_mutex_t],
    argument1 : Int,
    argument2 : Pointer[Int]) : Int;

external pthread_mutex_trylock(
    argument0 : Pointer[pthread_mutex_t]) : Int;

external pthread_mutex_unlock(
    argument0 : Pointer[pthread_mutex_t]) : Int;

external ("_pthread_mutexattr_destroy") pthread_mutexattr_destroy(
    argument0 : Pointer[pthread_mutexattr_t]) : Int;

external pthread_mutexattr_getprioceiling(
    argument0 : Pointer[pthread_mutexattr_t],
    argument1 : Pointer[Int]) : Int;

external pthread_mutexattr_getprotocol(
    argument0 : Pointer[pthread_mutexattr_t],
    argument1 : Pointer[Int]) : Int;

external pthread_mutexattr_getpshared(
    argument0 : Pointer[pthread_mutexattr_t],
    argument1 : Pointer[Int]) : Int;

external pthread_mutexattr_gettype(
    argument0 : Pointer[pthread_mutexattr_t],
    argument1 : Pointer[Int]) : Int;

external pthread_mutexattr_init(
    argument0 : Pointer[pthread_mutexattr_t]) : Int;

external pthread_mutexattr_setprioceiling(
    argument0 : Pointer[pthread_mutexattr_t],
    argument1 : Int) : Int;

external pthread_mutexattr_setprotocol(
    argument0 : Pointer[pthread_mutexattr_t],
    argument1 : Int) : Int;

external pthread_mutexattr_setpshared(
    argument0 : Pointer[pthread_mutexattr_t],
    argument1 : Int) : Int;

external pthread_mutexattr_settype(
    argument0 : Pointer[pthread_mutexattr_t],
    argument1 : Int) : Int;

external pthread_once(
    argument0 : Pointer[pthread_once_t],
    argument1 : CCodePointer[[],[]]) : Int;

external ("_pthread_rwlock_destroy") pthread_rwlock_destroy(
    argument0 : Pointer[pthread_rwlock_t]) : Int;

external ("_pthread_rwlock_init") pthread_rwlock_init(
    argument0 : Pointer[pthread_rwlock_t],
    argument1 : Pointer[pthread_rwlockattr_t]) : Int;

external ("_pthread_rwlock_rdlock") pthread_rwlock_rdlock(
    argument0 : Pointer[pthread_rwlock_t]) : Int;

external ("_pthread_rwlock_tryrdlock") pthread_rwlock_tryrdlock(
    argument0 : Pointer[pthread_rwlock_t]) : Int;

external ("_pthread_rwlock_trywrlock") pthread_rwlock_trywrlock(
    argument0 : Pointer[pthread_rwlock_t]) : Int;

external ("_pthread_rwlock_wrlock") pthread_rwlock_wrlock(
    argument0 : Pointer[pthread_rwlock_t]) : Int;

external ("_pthread_rwlock_unlock") pthread_rwlock_unlock(
    argument0 : Pointer[pthread_rwlock_t]) : Int;

external pthread_rwlockattr_destroy(
    argument0 : Pointer[pthread_rwlockattr_t]) : Int;

external pthread_rwlockattr_getpshared(
    argument0 : Pointer[pthread_rwlockattr_t],
    argument1 : Pointer[Int]) : Int;

external pthread_rwlockattr_init(
    argument0 : Pointer[pthread_rwlockattr_t]) : Int;

external pthread_rwlockattr_setpshared(
    argument0 : Pointer[pthread_rwlockattr_t],
    argument1 : Int) : Int;

external pthread_self() : pthread_t;

external ("_pthread_setcancelstate") pthread_setcancelstate(
    argument0 : Int,
    argument1 : Pointer[Int]) : Int;

external ("_pthread_setcanceltype") pthread_setcanceltype(
    argument0 : Int,
    argument1 : Pointer[Int]) : Int;

external pthread_setconcurrency(
    argument0 : Int) : Int;

external pthread_setschedparam(
    argument0 : pthread_t,
    argument1 : Int,
    argument2 : Pointer[Struct_sched_param]) : Int;

external pthread_setspecific(
    argument0 : CULong,
    argument1 : RawPointer) : Int;

external ("_pthread_testcancel") pthread_testcancel();

external pthread_is_threaded_np() : Int;

external pthread_threadid_np(
    argument0 : pthread_t,
    argument1 : Pointer[UInt64]) : Int;

external pthread_getname_np(
    argument0 : pthread_t,
    argument1 : Pointer[CChar],
    argument2 : CULong) : Int;

external pthread_setname_np(
    argument0 : Pointer[CChar]) : Int;

external pthread_main_np() : Int;

external pthread_mach_thread_np(
    argument0 : pthread_t) : UInt;

external pthread_get_stacksize_np(
    argument0 : pthread_t) : CULong;

external pthread_get_stackaddr_np(
    argument0 : pthread_t) : RawPointer;

external pthread_cond_signal_thread_np(
    argument0 : Pointer[pthread_cond_t],
    argument1 : pthread_t) : Int;

external pthread_cond_timedwait_relative_np(
    argument0 : Pointer[pthread_cond_t],
    argument1 : Pointer[pthread_mutex_t],
    argument2 : Pointer[Struct_timespec]) : Int;

external pthread_create_suspended_np(
    argument0 : Pointer[pthread_t],
    argument1 : Pointer[pthread_attr_t],
    argument2 : CCodePointer[[RawPointer],[RawPointer]],
    argument3 : RawPointer) : Int;

external pthread_kill(
    argument0 : pthread_t,
    argument1 : Int) : Int;

external pthread_from_mach_thread_np(
    argument0 : UInt) : pthread_t;

external ("_pthread_sigmask") pthread_sigmask(
    argument0 : Int,
    argument1 : Pointer[UInt],
    argument2 : Pointer[UInt]) : Int;

external pthread_yield_np();

record Struct_flock (
    l_start : Int64,
    l_len : Int64,
    l_pid : Int,
    l_type : Short,
    l_whence : Short,
);

record Struct_radvisory (
    ra_offset : Int64,
    ra_count : Int,
);

record Struct_fsignatures (
    fs_file_start : Int64,
    fs_blob_start : RawPointer,
    fs_blob_size : CULong,
);

alias fsignatures_t = Struct_fsignatures;

record Struct_fstore (
    fst_flags : UInt,
    fst_posmode : Int,
    fst_offset : Int64,
    fst_length : Int64,
    fst_bytesalloc : Int64,
);

alias fstore_t = Struct_fstore;

record Struct_fbootstraptransfer (
    fbt_offset : Int64,
    fbt_length : CULong,
    fbt_buffer : RawPointer,
);

alias fbootstraptransfer_t = Struct_fbootstraptransfer;

record Struct_log2phys (
    l2p_flags : UInt,
    l2p_contigbytes : Int64,
    l2p_devoffset : Int64,
);

alias filesec_t = OpaquePointer;

alias FILESEC_OWNER = 1;
alias FILESEC_GROUP = 2;
alias FILESEC_UUID = 3;
alias FILESEC_MODE = 4;
alias FILESEC_ACL = 5;
alias FILESEC_GRPUUID = 6;
alias FILESEC_ACL_RAW = 100;
alias FILESEC_ACL_ALLOCSIZE = 101;

alias filesec_property_t = Int;

external ("_open") open(
    argument0 : Pointer[CChar],
    argument1 : Int,
    ..) : Int;

external ("_creat") creat(
    argument0 : Pointer[CChar],
    argument1 : UShort) : Int;

external ("_fcntl") fcntl(
    argument0 : Int,
    argument1 : Int,
    ..) : Int;

external openx_np(
    argument0 : Pointer[CChar],
    argument1 : Int,
    argument2 : filesec_t) : Int;

external flock(
    argument0 : Int,
    argument1 : Int) : Int;

external filesec_init() : filesec_t;

external filesec_dup(
    argument0 : filesec_t) : filesec_t;

external filesec_free(
    argument0 : filesec_t);

external filesec_get_property(
    argument0 : filesec_t,
    argument1 : filesec_property_t,
    argument2 : RawPointer) : Int;

external filesec_query_property(
    argument0 : filesec_t,
    argument1 : filesec_property_t,
    argument2 : Pointer[Int]) : Int;

external filesec_set_property(
    argument0 : filesec_t,
    argument1 : filesec_property_t,
    argument2 : RawPointer) : Int;

external filesec_unset_property(
    argument0 : filesec_t,
    argument1 : filesec_property_t) : Int;

alias int8_t = CChar;

alias u_int8_t = CUChar;

alias int16_t = Short;

alias u_int16_t = UShort;

alias int32_t = Int;

alias u_int32_t = UInt;

alias int64_t = Int64;

alias u_int64_t = UInt64;

alias register_t = Int64;

alias uintptr_t = CULong;

alias user_addr_t = UInt64;

alias user_size_t = UInt64;

alias user_ssize_t = Int64;

alias user_long_t = Int64;

alias user_ulong_t = UInt64;

alias user_time_t = Int64;

alias user_off_t = Int64;

alias syscall_arg_t = UInt64;

alias u_char = CUChar;

alias u_short = UShort;

alias u_int = UInt;

alias u_long = CULong;

alias ushort = UShort;

alias uint = UInt;

alias u_quad_t = UInt64;

alias quad_t = Int64;

alias qaddr_t = Pointer[Int64];

alias caddr_t = Pointer[CChar];

alias daddr_t = Int;

alias fixpt_t = UInt;

alias blkcnt_t = Int64;

alias blksize_t = Int;

alias in_addr_t = UInt;

alias in_port_t = UShort;

alias ino_t = UInt64;

alias ino64_t = UInt64;

alias key_t = Int;

alias nlink_t = UShort;

alias id_t = UInt;

alias segsz_t = Int;

alias swblk_t = Int;

alias fd_mask = Int;

alias fsblkcnt_t = UInt;

alias fsfilcnt_t = UInt;

record Struct_itimerval (
    it_interval : Struct_timeval,
    it_value : Struct_timeval,
);

record Struct_timezone (
    tz_minuteswest : Int,
    tz_dsttime : Int,
);

record Struct_clockinfo (
    hz : Int,
    tick : Int,
    tickadj : Int,
    stathz : Int,
    profhz : Int,
);

external adjtime(
    argument0 : Pointer[Struct_timeval],
    argument1 : Pointer[Struct_timeval]) : Int;

external futimes(
    argument0 : Int,
    argument1 : Pointer[Struct_timeval]) : Int;

external lutimes(
    argument0 : Pointer[CChar],
    argument1 : Pointer[Struct_timeval]) : Int;

external settimeofday(
    argument0 : Pointer[Struct_timeval],
    argument1 : Pointer[Struct_timezone]) : Int;

external getitimer(
    argument0 : Int,
    argument1 : Pointer[Struct_itimerval]) : Int;

external gettimeofday(
    argument0 : Pointer[Struct_timeval],
    argument1 : RawPointer) : Int;

external setitimer(
    argument0 : Int,
    argument1 : Pointer[Struct_itimerval],
    argument2 : Pointer[Struct_itimerval]) : Int;

external utimes(
    argument0 : Pointer[CChar],
    argument1 : Pointer[Struct_timeval]) : Int;

record Struct_ostat (
    st_dev : UShort,
    st_ino : UInt64,
    st_mode : UShort,
    st_nlink : UShort,
    st_uid : UShort,
    st_gid : UShort,
    st_rdev : UShort,
    st_size : Int,
    st_atimespec : Struct_timespec,
    st_mtimespec : Struct_timespec,
    st_ctimespec : Struct_timespec,
    st_blksize : Int,
    st_blocks : Int,
    st_flags : UInt,
    st_gen : UInt,
);

record Struct_stat (
    st_dev : Int,
    st_mode : UShort,
    st_nlink : UShort,
    st_ino : UInt64,
    st_uid : UInt,
    st_gid : UInt,
    st_rdev : Int,
    st_atimespec : Struct_timespec,
    st_mtimespec : Struct_timespec,
    st_ctimespec : Struct_timespec,
    st_birthtimespec : Struct_timespec,
    st_size : Int64,
    st_blocks : Int64,
    st_blksize : Int,
    st_flags : UInt,
    st_gen : UInt,
    st_lspare : Int,
    st_qspare : Array[Int64,2],
);

record Struct_stat64 (
    st_dev : Int,
    st_mode : UShort,
    st_nlink : UShort,
    st_ino : UInt64,
    st_uid : UInt,
    st_gid : UInt,
    st_rdev : Int,
    st_atimespec : Struct_timespec,
    st_mtimespec : Struct_timespec,
    st_ctimespec : Struct_timespec,
    st_birthtimespec : Struct_timespec,
    st_size : Int64,
    st_blocks : Int64,
    st_blksize : Int,
    st_flags : UInt,
    st_gen : UInt,
    st_lspare : Int,
    st_qspare : Array[Int64,2],
);

external ("_chmod") chmod(
    argument0 : Pointer[CChar],
    argument1 : UShort) : Int;

external ("_fchmod") fchmod(
    argument0 : Int,
    argument1 : UShort) : Int;

external ("_fstat$INODE64") fstat(
    argument0 : Int,
    argument1 : Pointer[Struct_stat]) : Int;

external ("_lstat$INODE64") lstat(
    argument0 : Pointer[CChar],
    argument1 : Pointer[Struct_stat]) : Int;

external mkdir(
    argument0 : Pointer[CChar],
    argument1 : UShort) : Int;

external mkfifo(
    argument0 : Pointer[CChar],
    argument1 : UShort) : Int;

external ("_stat$INODE64") stat(
    argument0 : Pointer[CChar],
    argument1 : Pointer[Struct_stat]) : Int;

external umask(
    argument0 : UShort) : UShort;

external chflags(
    argument0 : Pointer[CChar],
    argument1 : UInt) : Int;

external chmodx_np(
    argument0 : Pointer[CChar],
    argument1 : filesec_t) : Int;

external fchflags(
    argument0 : Int,
    argument1 : UInt) : Int;

external fchmodx_np(
    argument0 : Int,
    argument1 : filesec_t) : Int;

external ("_fstatx_np$INODE64") fstatx_np(
    argument0 : Int,
    argument1 : Pointer[Struct_stat],
    argument2 : filesec_t) : Int;

external lchflags(
    argument0 : Pointer[CChar],
    argument1 : UInt) : Int;

external lchmod(
    argument0 : Pointer[CChar],
    argument1 : UShort) : Int;

external ("_lstatx_np$INODE64") lstatx_np(
    argument0 : Pointer[CChar],
    argument1 : Pointer[Struct_stat],
    argument2 : filesec_t) : Int;

external mkdirx_np(
    argument0 : Pointer[CChar],
    argument1 : filesec_t) : Int;

external mkfifox_np(
    argument0 : Pointer[CChar],
    argument1 : filesec_t) : Int;

external ("_statx_np$INODE64") statx_np(
    argument0 : Pointer[CChar],
    argument1 : Pointer[Struct_stat],
    argument2 : filesec_t) : Int;

external umaskx_np(
    argument0 : filesec_t) : Int;

external fstatx64_np(
    argument0 : Int,
    argument1 : Pointer[Struct_stat64],
    argument2 : filesec_t) : Int;

external lstatx64_np(
    argument0 : Pointer[CChar],
    argument1 : Pointer[Struct_stat64],
    argument2 : filesec_t) : Int;

external statx64_np(
    argument0 : Pointer[CChar],
    argument1 : Pointer[Struct_stat64],
    argument2 : filesec_t) : Int;

external fstat64(
    argument0 : Int,
    argument1 : Pointer[Struct_stat64]) : Int;

external lstat64(
    argument0 : Pointer[CChar],
    argument1 : Pointer[Struct_stat64]) : Int;

external stat64(
    argument0 : Pointer[CChar],
    argument1 : Pointer[Struct_stat64]) : Int;

external mlockall(
    argument0 : Int) : Int;

external munlockall() : Int;

external mlock(
    argument0 : RawPointer,
    argument1 : CULong) : Int;

external ("_mmap") mmap(
    argument0 : RawPointer,
    argument1 : CULong,
    argument2 : Int,
    argument3 : Int,
    argument4 : Int,
    argument5 : Int64) : RawPointer;

external ("_mprotect") mprotect(
    argument0 : RawPointer,
    argument1 : CULong,
    argument2 : Int) : Int;

external ("_msync") msync(
    argument0 : RawPointer,
    argument1 : CULong,
    argument2 : Int) : Int;

external munlock(
    argument0 : RawPointer,
    argument1 : CULong) : Int;

external ("_munmap") munmap(
    argument0 : RawPointer,
    argument1 : CULong) : Int;

external shm_open(
    argument0 : Pointer[CChar],
    argument1 : Int,
    ..) : Int;

external shm_unlink(
    argument0 : Pointer[CChar]) : Int;

external posix_madvise(
    argument0 : RawPointer,
    argument1 : CULong,
    argument2 : Int) : Int;

external madvise(
    argument0 : RawPointer,
    argument1 : CULong,
    argument2 : Int) : Int;

external mincore(
    argument0 : RawPointer,
    argument1 : CULong,
    argument2 : Pointer[CChar]) : Int;

external minherit(
    argument0 : RawPointer,
    argument1 : CULong,
    argument2 : Int) : Int;

alias sa_family_t = CUChar;

alias socklen_t = UInt;

record Struct_iovec (
    iov_base : RawPointer,
    iov_len : CULong,
);

record Struct_linger (
    l_onoff : Int,
    l_linger : Int,
);

record Struct_so_np_extensions (
    npx_flags : UInt,
    npx_mask : UInt,
);

record Struct_sockaddr (
    sa_len : CUChar,
    sa_family : CUChar,
    sa_data : Array[CChar,14],
);

record Struct_sockproto (
    sp_family : UShort,
    sp_protocol : UShort,
);

record Struct_sockaddr_storage (
    ss_len : CUChar,
    ss_family : CUChar,
    __ss_pad1 : Array[CChar,6],
    __ss_align : Int64,
    __ss_pad2 : Array[CChar,112],
);

record Struct_msghdr (
    msg_name : RawPointer,
    msg_namelen : UInt,
    msg_iov : Pointer[Struct_iovec],
    msg_iovlen : Int,
    msg_control : RawPointer,
    msg_controllen : UInt,
    msg_flags : Int,
);

record Struct_cmsghdr (
    cmsg_len : UInt,
    cmsg_level : Int,
    cmsg_type : Int,
);

record Struct_sf_hdtr (
    headers : Pointer[Struct_iovec],
    hdr_cnt : Int,
    trailers : Pointer[Struct_iovec],
    trl_cnt : Int,
);

external ("_accept") accept(
    argument0 : Int,
    argument1 : Pointer[Struct_sockaddr],
    argument2 : Pointer[UInt]) : Int;

external ("_bind") bind(
    argument0 : Int,
    argument1 : Pointer[Struct_sockaddr],
    argument2 : UInt) : Int;

external ("_connect") connect(
    argument0 : Int,
    argument1 : Pointer[Struct_sockaddr],
    argument2 : UInt) : Int;

external ("_getpeername") getpeername(
    argument0 : Int,
    argument1 : Pointer[Struct_sockaddr],
    argument2 : Pointer[UInt]) : Int;

external ("_getsockname") getsockname(
    argument0 : Int,
    argument1 : Pointer[Struct_sockaddr],
    argument2 : Pointer[UInt]) : Int;

external getsockopt(
    argument0 : Int,
    argument1 : Int,
    argument2 : Int,
    argument3 : RawPointer,
    argument4 : Pointer[UInt]) : Int;

external ("_listen") listen(
    argument0 : Int,
    argument1 : Int) : Int;

external ("_recv") recv(
    argument0 : Int,
    argument1 : RawPointer,
    argument2 : CULong,
    argument3 : Int) : CLong;

external ("_recvfrom") recvfrom(
    argument0 : Int,
    argument1 : RawPointer,
    argument2 : CULong,
    argument3 : Int,
    argument4 : Pointer[Struct_sockaddr],
    argument5 : Pointer[UInt]) : CLong;

external ("_recvmsg") recvmsg(
    argument0 : Int,
    argument1 : Pointer[Struct_msghdr],
    argument2 : Int) : CLong;

external ("_send") send(
    argument0 : Int,
    argument1 : RawPointer,
    argument2 : CULong,
    argument3 : Int) : CLong;

external ("_sendmsg") sendmsg(
    argument0 : Int,
    argument1 : Pointer[Struct_msghdr],
    argument2 : Int) : CLong;

external ("_sendto") sendto(
    argument0 : Int,
    argument1 : RawPointer,
    argument2 : CULong,
    argument3 : Int,
    argument4 : Pointer[Struct_sockaddr],
    argument5 : UInt) : CLong;

external setsockopt(
    argument0 : Int,
    argument1 : Int,
    argument2 : Int,
    argument3 : RawPointer,
    argument4 : UInt) : Int;

external shutdown(
    argument0 : Int,
    argument1 : Int) : Int;

external sockatmark(
    argument0 : Int) : Int;

external socket(
    argument0 : Int,
    argument1 : Int,
    argument2 : Int) : Int;

external ("_socketpair") socketpair(
    argument0 : Int,
    argument1 : Int,
    argument2 : Int,
    argument3 : Pointer[Int]) : Int;

external sendfile(
    argument0 : Int,
    argument1 : Int,
    argument2 : Int64,
    argument3 : Pointer[Int64],
    argument4 : Pointer[Struct_sf_hdtr],
    argument5 : Int) : Int;

external pfctlinput(
    argument0 : Int,
    argument1 : Pointer[Struct_sockaddr]);

alias sig_atomic_t = Int;

record Struct___darwin_i386_thread_state (
    __eax : UInt,
    __ebx : UInt,
    __ecx : UInt,
    __edx : UInt,
    __edi : UInt,
    __esi : UInt,
    __ebp : UInt,
    __esp : UInt,
    __ss : UInt,
    __eflags : UInt,
    __eip : UInt,
    __cs : UInt,
    __ds : UInt,
    __es : UInt,
    __fs : UInt,
    __gs : UInt,
);

record Struct___darwin_fp_control (
    __invalid : UShort,
    __denorm : UShort,
    __zdiv : UShort,
    __ovrfl : UShort,
    __undfl : UShort,
    __precis : UShort,
    unnamed_field6 : UShort,
    __pc : UShort,
    __rc : UShort,
    unnamed_field9 : UShort,
    unnamed_field10 : UShort,
);

alias __darwin_fp_control_t = Struct___darwin_fp_control;

record Struct___darwin_fp_status (
    __invalid : UShort,
    __denorm : UShort,
    __zdiv : UShort,
    __ovrfl : UShort,
    __undfl : UShort,
    __precis : UShort,
    __stkflt : UShort,
    __errsumm : UShort,
    __c0 : UShort,
    __c1 : UShort,
    __c2 : UShort,
    __tos : UShort,
    __c3 : UShort,
    __busy : UShort,
);

alias __darwin_fp_status_t = Struct___darwin_fp_status;

record Struct___darwin_mmst_reg (
    __mmst_reg : Array[CChar,10],
    __mmst_rsrv : Array[CChar,6],
);

record Struct___darwin_xmm_reg (
    __xmm_reg : Array[CChar,16],
);

record Struct___darwin_i386_float_state (
    __fpu_reserved : Array[Int,2],
    __fpu_fcw : Struct___darwin_fp_control,
    __fpu_fsw : Struct___darwin_fp_status,
    __fpu_ftw : CUChar,
    __fpu_rsrv1 : CUChar,
    __fpu_fop : UShort,
    __fpu_ip : UInt,
    __fpu_cs : UShort,
    __fpu_rsrv2 : UShort,
    __fpu_dp : UInt,
    __fpu_ds : UShort,
    __fpu_rsrv3 : UShort,
    __fpu_mxcsr : UInt,
    __fpu_mxcsrmask : UInt,
    __fpu_stmm0 : Struct___darwin_mmst_reg,
    __fpu_stmm1 : Struct___darwin_mmst_reg,
    __fpu_stmm2 : Struct___darwin_mmst_reg,
    __fpu_stmm3 : Struct___darwin_mmst_reg,
    __fpu_stmm4 : Struct___darwin_mmst_reg,
    __fpu_stmm5 : Struct___darwin_mmst_reg,
    __fpu_stmm6 : Struct___darwin_mmst_reg,
    __fpu_stmm7 : Struct___darwin_mmst_reg,
    __fpu_xmm0 : Struct___darwin_xmm_reg,
    __fpu_xmm1 : Struct___darwin_xmm_reg,
    __fpu_xmm2 : Struct___darwin_xmm_reg,
    __fpu_xmm3 : Struct___darwin_xmm_reg,
    __fpu_xmm4 : Struct___darwin_xmm_reg,
    __fpu_xmm5 : Struct___darwin_xmm_reg,
    __fpu_xmm6 : Struct___darwin_xmm_reg,
    __fpu_xmm7 : Struct___darwin_xmm_reg,
    __fpu_rsrv4 : Array[CChar,224],
    __fpu_reserved1 : Int,
);

record Struct___darwin_i386_exception_state (
    __trapno : UInt,
    __err : UInt,
    __faultvaddr : UInt,
);

record Struct___darwin_x86_debug_state32 (
    __dr0 : UInt,
    __dr1 : UInt,
    __dr2 : UInt,
    __dr3 : UInt,
    __dr4 : UInt,
    __dr5 : UInt,
    __dr6 : UInt,
    __dr7 : UInt,
);

record Struct___darwin_x86_thread_state64 (
    __rax : UInt64,
    __rbx : UInt64,
    __rcx : UInt64,
    __rdx : UInt64,
    __rdi : UInt64,
    __rsi : UInt64,
    __rbp : UInt64,
    __rsp : UInt64,
    __r8 : UInt64,
    __r9 : UInt64,
    __r10 : UInt64,
    __r11 : UInt64,
    __r12 : UInt64,
    __r13 : UInt64,
    __r14 : UInt64,
    __r15 : UInt64,
    __rip : UInt64,
    __rflags : UInt64,
    __cs : UInt64,
    __fs : UInt64,
    __gs : UInt64,
);

record Struct___darwin_x86_float_state64 (
    __fpu_reserved : Array[Int,2],
    __fpu_fcw : Struct___darwin_fp_control,
    __fpu_fsw : Struct___darwin_fp_status,
    __fpu_ftw : CUChar,
    __fpu_rsrv1 : CUChar,
    __fpu_fop : UShort,
    __fpu_ip : UInt,
    __fpu_cs : UShort,
    __fpu_rsrv2 : UShort,
    __fpu_dp : UInt,
    __fpu_ds : UShort,
    __fpu_rsrv3 : UShort,
    __fpu_mxcsr : UInt,
    __fpu_mxcsrmask : UInt,
    __fpu_stmm0 : Struct___darwin_mmst_reg,
    __fpu_stmm1 : Struct___darwin_mmst_reg,
    __fpu_stmm2 : Struct___darwin_mmst_reg,
    __fpu_stmm3 : Struct___darwin_mmst_reg,
    __fpu_stmm4 : Struct___darwin_mmst_reg,
    __fpu_stmm5 : Struct___darwin_mmst_reg,
    __fpu_stmm6 : Struct___darwin_mmst_reg,
    __fpu_stmm7 : Struct___darwin_mmst_reg,
    __fpu_xmm0 : Struct___darwin_xmm_reg,
    __fpu_xmm1 : Struct___darwin_xmm_reg,
    __fpu_xmm2 : Struct___darwin_xmm_reg,
    __fpu_xmm3 : Struct___darwin_xmm_reg,
    __fpu_xmm4 : Struct___darwin_xmm_reg,
    __fpu_xmm5 : Struct___darwin_xmm_reg,
    __fpu_xmm6 : Struct___darwin_xmm_reg,
    __fpu_xmm7 : Struct___darwin_xmm_reg,
    __fpu_xmm8 : Struct___darwin_xmm_reg,
    __fpu_xmm9 : Struct___darwin_xmm_reg,
    __fpu_xmm10 : Struct___darwin_xmm_reg,
    __fpu_xmm11 : Struct___darwin_xmm_reg,
    __fpu_xmm12 : Struct___darwin_xmm_reg,
    __fpu_xmm13 : Struct___darwin_xmm_reg,
    __fpu_xmm14 : Struct___darwin_xmm_reg,
    __fpu_xmm15 : Struct___darwin_xmm_reg,
    __fpu_rsrv4 : Array[CChar,96],
    __fpu_reserved1 : Int,
);

record Struct___darwin_x86_exception_state64 (
    __trapno : UInt,
    __err : UInt,
    __faultvaddr : UInt64,
);

record Struct___darwin_x86_debug_state64 (
    __dr0 : UInt64,
    __dr1 : UInt64,
    __dr2 : UInt64,
    __dr3 : UInt64,
    __dr4 : UInt64,
    __dr5 : UInt64,
    __dr6 : UInt64,
    __dr7 : UInt64,
);

record Struct___darwin_mcontext32 (
    __es : Struct___darwin_i386_exception_state,
    __ss : Struct___darwin_i386_thread_state,
    __fs : Struct___darwin_i386_float_state,
);

record Struct___darwin_mcontext64 (
    __es : Struct___darwin_x86_exception_state64,
    __ss : Struct___darwin_x86_thread_state64,
    __fs : Struct___darwin_x86_float_state64,
);

alias mcontext_t = Pointer[Struct___darwin_mcontext64];

record Struct___darwin_sigaltstack (
    ss_sp : RawPointer,
    ss_size : CULong,
    ss_flags : Int,
);

record Struct___darwin_ucontext (
    uc_onstack : Int,
    uc_sigmask : UInt,
    uc_stack : Struct___darwin_sigaltstack,
    uc_link : Pointer[Struct___darwin_ucontext],
    uc_mcsize : CULong,
    uc_mcontext : Pointer[Struct___darwin_mcontext64],
);

alias stack_t = Struct___darwin_sigaltstack;

alias ucontext_t = Struct___darwin_ucontext;

record Struct_sigevent (
    sigev_notify : Int,
    sigev_signo : Int,
    sigev_value : AUnionType,
    sigev_notify_function : CCodePointer[[AUnionType],[]],
    sigev_notify_attributes : Pointer[pthread_attr_t],
);

record Struct___siginfo (
    si_signo : Int,
    si_errno : Int,
    si_code : Int,
    si_pid : Int,
    si_uid : UInt,
    si_status : Int,
    si_addr : RawPointer,
    si_value : AUnionType,
    si_band : CLong,
    __pad : Array[CULong,7],
);

alias siginfo_t = Struct___siginfo;

record Struct___sigaction (
    __sigaction_u : AUnionType,
    sa_tramp : CCodePointer[[RawPointer,Int,Int,Pointer[Struct___siginfo],RawPointer],[]],
    sa_mask : UInt,
    sa_flags : Int,
);

record Struct_sigaction (
    __sigaction_u : AUnionType,
    sa_mask : UInt,
    sa_flags : Int,
);

alias sig_t = CCodePointer[[Int],[]];

record Struct_sigvec (
    sv_handler : CCodePointer[[Int],[]],
    sv_mask : Int,
    sv_flags : Int,
);

record Struct_sigstack (
    ss_sp : Pointer[CChar],
    ss_onstack : Int,
);

external signal(
    argument0 : Int,
    argument1 : CCodePointer[[Int],[]]) : CCodePointer[[Int],[]];

alias P_ALL = 0;
alias P_PID = 1;
alias P_PGID = 2;

alias idtype_t = Int;

alias rlim_t = UInt64;

record Struct_rusage (
    ru_utime : Struct_timeval,
    ru_stime : Struct_timeval,
    ru_maxrss : CLong,
    ru_ixrss : CLong,
    ru_idrss : CLong,
    ru_isrss : CLong,
    ru_minflt : CLong,
    ru_majflt : CLong,
    ru_nswap : CLong,
    ru_inblock : CLong,
    ru_oublock : CLong,
    ru_msgsnd : CLong,
    ru_msgrcv : CLong,
    ru_nsignals : CLong,
    ru_nvcsw : CLong,
    ru_nivcsw : CLong,
);

record Struct_rlimit (
    rlim_cur : UInt64,
    rlim_max : UInt64,
);

external getpriority(
    argument0 : Int,
    argument1 : UInt) : Int;

external getiopolicy_np(
    argument0 : Int,
    argument1 : Int) : Int;

external ("_getrlimit") getrlimit(
    argument0 : Int,
    argument1 : Pointer[Struct_rlimit]) : Int;

external getrusage(
    argument0 : Int,
    argument1 : Pointer[Struct_rusage]) : Int;

external setpriority(
    argument0 : Int,
    argument1 : UInt,
    argument2 : Int) : Int;

external setiopolicy_np(
    argument0 : Int,
    argument1 : Int,
    argument2 : Int) : Int;

external ("_setrlimit") setrlimit(
    argument0 : Int,
    argument1 : Pointer[Struct_rlimit]) : Int;

external ("_wait") wait(
    argument0 : Pointer[Int]) : Int;

external ("_waitpid") waitpid(
    argument0 : Int,
    argument1 : Pointer[Int],
    argument2 : Int) : Int;

external ("_waitid") waitid(
    argument0 : idtype_t,
    argument1 : UInt,
    argument2 : Pointer[siginfo_t],
    argument3 : Int) : Int;

external wait3(
    argument0 : Pointer[Int],
    argument1 : Int,
    argument2 : Pointer[Struct_rusage]) : Int;

external wait4(
    argument0 : Int,
    argument1 : Pointer[Int],
    argument2 : Int,
    argument3 : Pointer[Struct_rusage]) : Int;

alias uint8_t = CUChar;

alias uint16_t = UShort;

alias uint32_t = UInt;

alias uint64_t = UInt64;

alias int_least8_t = CChar;

alias int_least16_t = Short;

alias int_least32_t = Int;

alias int_least64_t = Int64;

alias uint_least8_t = CUChar;

alias uint_least16_t = UShort;

alias uint_least32_t = UInt;

alias uint_least64_t = UInt64;

alias int_fast8_t = CChar;

alias int_fast16_t = Short;

alias int_fast32_t = Int;

alias int_fast64_t = Int64;

alias uint_fast8_t = CUChar;

alias uint_fast16_t = UShort;

alias uint_fast32_t = UInt;

alias uint_fast64_t = UInt64;

alias intmax_t = CLong;

alias uintmax_t = CULong;

record Struct_kevent (
    ident : CULong,
    filter : Short,
    flags : UShort,
    fflags : UInt,
    data : CLong,
    udata : RawPointer,
);

record Struct_kevent64_s (
    ident : UInt64,
    filter : Short,
    flags : UShort,
    fflags : UInt,
    data : Int64,
    udata : UInt64,
    ext : Array[UInt64,2],
);

record Struct_klist (
    slh_first : OpaquePointer,
);

external kqueue() : Int;

external kevent(
    kq : Int,
    changelist : Pointer[Struct_kevent],
    nchanges : Int,
    eventlist : Pointer[Struct_kevent],
    nevents : Int,
    timeout : Pointer[Struct_timespec]) : Int;

external kevent64(
    kq : Int,
    changelist : Pointer[Struct_kevent64_s],
    nchanges : Int,
    eventlist : Pointer[Struct_kevent64_s],
    nevents : Int,
    flags : UInt,
    timeout : Pointer[Struct_timespec]) : Int;

external sys_signame : Array[Pointer[CChar],32];

external sys_siglist : Array[Pointer[CChar],32];

external raise(
    argument0 : Int) : Int;

external bsd_signal(
    argument0 : Int,
    argument1 : CCodePointer[[Int],[]]) : CCodePointer[[Int],[]];

external ("_kill") kill(
    argument0 : Int,
    argument1 : Int) : Int;

external ("_killpg") killpg(
    argument0 : Int,
    argument1 : Int) : Int;

external sigaction(
    argument0 : Int,
    argument1 : Pointer[Struct_sigaction],
    argument2 : Pointer[Struct_sigaction]) : Int;

external sigaddset(
    argument0 : Pointer[UInt],
    argument1 : Int) : Int;

external ("_sigaltstack") sigaltstack(
    argument0 : Pointer[stack_t],
    argument1 : Pointer[stack_t]) : Int;

external sigdelset(
    argument0 : Pointer[UInt],
    argument1 : Int) : Int;

external sigemptyset(
    argument0 : Pointer[UInt]) : Int;

external sigfillset(
    argument0 : Pointer[UInt]) : Int;

external sighold(
    argument0 : Int) : Int;

external sigignore(
    argument0 : Int) : Int;

external siginterrupt(
    argument0 : Int,
    argument1 : Int) : Int;

external sigismember(
    argument0 : Pointer[UInt],
    argument1 : Int) : Int;

external ("_sigpause") sigpause(
    argument0 : Int) : Int;

external sigpending(
    argument0 : Pointer[UInt]) : Int;

external sigprocmask(
    argument0 : Int,
    argument1 : Pointer[UInt],
    argument2 : Pointer[UInt]) : Int;

external sigrelse(
    argument0 : Int) : Int;

external sigset(
    argument0 : Int,
    argument1 : CCodePointer[[Int],[]]) : CCodePointer[[Int],[]];

external ("_sigsuspend") sigsuspend(
    argument0 : Pointer[UInt]) : Int;

external ("_sigwait") sigwait(
    argument0 : Pointer[UInt],
    argument1 : Pointer[Int]) : Int;

external psignal(
    argument0 : UInt,
    argument1 : Pointer[CChar]);

external sigblock(
    argument0 : Int) : Int;

external sigsetmask(
    argument0 : Int) : Int;

external sigvec(
    argument0 : Int,
    argument1 : Pointer[Struct_sigvec],
    argument2 : Pointer[Struct_sigvec]) : Int;

record Struct_dirent (
    d_ino : UInt64,
    d_seekoff : UInt64,
    d_reclen : UShort,
    d_namlen : UShort,
    d_type : CUChar,
    d_name : Array[CChar,1024],
);

record UnnamedStruct (
    __dd_fd : Int,
    __dd_loc : CLong,
    __dd_size : CLong,
    __dd_buf : Pointer[CChar],
    __dd_len : Int,
    __dd_seek : CLong,
    __dd_rewind : CLong,
    __dd_flags : Int,
    __dd_lock : __darwin_pthread_mutex_t,
    __dd_td : OpaquePointer,
);

alias DIR = UnnamedStruct;

external ("_alphasort$INODE64") alphasort(
    argument0 : RawPointer,
    argument1 : RawPointer) : Int;

external ("_closedir") closedir(
    argument0 : Pointer[DIR]) : Int;

external ("_getdirentries_is_not_available_when_64_bit_inodes_are_in_effect") getdirentries(
    argument0 : Int,
    argument1 : Pointer[CChar],
    argument2 : Int,
    argument3 : Pointer[CLong]) : Int;

external ("_opendir$INODE64") opendir(
    argument0 : Pointer[CChar]) : Pointer[DIR];

external ("___opendir2$INODE64") __opendir2(
    argument0 : Pointer[CChar],
    argument1 : Int) : Pointer[DIR];

external ("_readdir$INODE64") readdir(
    argument0 : Pointer[DIR]) : Pointer[Struct_dirent];

external ("_readdir_r$INODE64") readdir_r(
    argument0 : Pointer[DIR],
    argument1 : Pointer[Struct_dirent],
    argument2 : Pointer[Pointer[Struct_dirent]]) : Int;

external ("_rewinddir$INODE64") rewinddir(
    argument0 : Pointer[DIR]);

external ("_scandir$INODE64") scandir(
    argument0 : Pointer[CChar],
    argument1 : Pointer[Pointer[Pointer[Struct_dirent]]],
    argument2 : CCodePointer[[Pointer[Struct_dirent]],[Int]],
    argument3 : CCodePointer[[RawPointer,RawPointer],[Int]]) : Int;

external ("_scandir_b$INODE64") scandir_b(
    argument0 : Pointer[CChar],
    argument1 : Pointer[Pointer[Pointer[Struct_dirent]]],
    argument2 : UnknownType,
    argument3 : UnknownType) : Int;

external ("_seekdir$INODE64") seekdir(
    argument0 : Pointer[DIR],
    argument1 : CLong);

external ("_telldir$INODE64") telldir(
    argument0 : Pointer[DIR]) : CLong;

record Struct_dl_info (
    dli_fname : Pointer[CChar],
    dli_fbase : RawPointer,
    dli_sname : Pointer[CChar],
    dli_saddr : RawPointer,
);

alias Dl_info = Struct_dl_info;

external dladdr(
    argument0 : RawPointer,
    argument1 : Pointer[Dl_info]) : Int;

external dlclose(
    __handle : RawPointer) : Int;

external dlerror() : Pointer[CChar];

external dlopen(
    __path : Pointer[CChar],
    __mode : Int) : RawPointer;

external dlsym(
    __handle : RawPointer,
    __symbol : Pointer[CChar]) : RawPointer;

external dlopen_preflight(
    __path : Pointer[CChar]) : Bool;

record Struct_in_addr (
    s_addr : UInt,
);

record Struct_sockaddr_in (
    sin_len : CUChar,
    sin_family : CUChar,
    sin_port : UShort,
    sin_addr : Struct_in_addr,
    sin_zero : Array[CChar,8],
);

record Struct_ip_opts (
    ip_dst : Struct_in_addr,
    ip_opts : Array[CChar,40],
);

record Struct_ip_mreq (
    imr_multiaddr : Struct_in_addr,
    imr_interface : Struct_in_addr,
);

record Struct_in6_addr (
    __u6_addr : AUnionType,
);

record Struct_sockaddr_in6 (
    sin6_len : CUChar,
    sin6_family : CUChar,
    sin6_port : UShort,
    sin6_flowinfo : UInt,
    sin6_addr : Struct_in6_addr,
    sin6_scope_id : UInt,
);

external in6addr_any : Struct_in6_addr;

external in6addr_loopback : Struct_in6_addr;

external in6addr_nodelocal_allnodes : Struct_in6_addr;

external in6addr_linklocal_allnodes : Struct_in6_addr;

external in6addr_linklocal_allrouters : Struct_in6_addr;

record Struct_ipv6_mreq (
    ipv6mr_multiaddr : Struct_in6_addr,
    ipv6mr_interface : UInt,
);

record Struct_in6_pktinfo (
    ipi6_addr : Struct_in6_addr,
    ipi6_ifindex : UInt,
);

external inet6_option_space(
    argument0 : Int) : Int;

external inet6_option_init(
    argument0 : RawPointer,
    argument1 : Pointer[Pointer[Struct_cmsghdr]],
    argument2 : Int) : Int;

external inet6_option_append(
    argument0 : Pointer[Struct_cmsghdr],
    argument1 : Pointer[CUChar],
    argument2 : Int,
    argument3 : Int) : Int;

external inet6_option_alloc(
    argument0 : Pointer[Struct_cmsghdr],
    argument1 : Int,
    argument2 : Int,
    argument3 : Int) : Pointer[CUChar];

external inet6_option_next(
    argument0 : Pointer[Struct_cmsghdr],
    argument1 : Pointer[Pointer[CUChar]]) : Int;

external inet6_option_find(
    argument0 : Pointer[Struct_cmsghdr],
    argument1 : Pointer[Pointer[CUChar]],
    argument2 : Int) : Int;

external inet6_rthdr_space(
    argument0 : Int,
    argument1 : Int) : CULong;

external inet6_rthdr_init(
    argument0 : RawPointer,
    argument1 : Int) : Pointer[Struct_cmsghdr];

external inet6_rthdr_add(
    argument0 : Pointer[Struct_cmsghdr],
    argument1 : Pointer[Struct_in6_addr],
    argument2 : UInt) : Int;

external inet6_rthdr_lasthop(
    argument0 : Pointer[Struct_cmsghdr],
    argument1 : UInt) : Int;

external inet6_rthdr_segments(
    argument0 : Pointer[Struct_cmsghdr]) : Int;

external inet6_rthdr_getaddr(
    argument0 : Pointer[Struct_cmsghdr],
    argument1 : Int) : Pointer[Struct_in6_addr];

external inet6_rthdr_getflags(
    argument0 : Pointer[Struct_cmsghdr],
    argument1 : Int) : Int;

external inet6_opt_init(
    argument0 : RawPointer,
    argument1 : CULong) : Int;

external inet6_opt_append(
    argument0 : RawPointer,
    argument1 : CULong,
    argument2 : Int,
    argument3 : CUChar,
    argument4 : CULong,
    argument5 : CUChar,
    argument6 : Pointer[RawPointer]) : Int;

external inet6_opt_finish(
    argument0 : RawPointer,
    argument1 : CULong,
    argument2 : Int) : Int;

external inet6_opt_set_val(
    argument0 : RawPointer,
    argument1 : CULong,
    argument2 : RawPointer,
    argument3 : Int) : Int;

external inet6_opt_next(
    argument0 : RawPointer,
    argument1 : CULong,
    argument2 : Int,
    argument3 : Pointer[CUChar],
    argument4 : Pointer[CULong],
    argument5 : Pointer[RawPointer]) : Int;

external inet6_opt_find(
    argument0 : RawPointer,
    argument1 : CULong,
    argument2 : Int,
    argument3 : CUChar,
    argument4 : Pointer[CULong],
    argument5 : Pointer[RawPointer]) : Int;

external inet6_opt_get_val(
    argument0 : RawPointer,
    argument1 : CULong,
    argument2 : RawPointer,
    argument3 : Int) : Int;

external inet6_rth_space(
    argument0 : Int,
    argument1 : Int) : CULong;

external inet6_rth_init(
    argument0 : RawPointer,
    argument1 : Int,
    argument2 : Int,
    argument3 : Int) : RawPointer;

external inet6_rth_add(
    argument0 : RawPointer,
    argument1 : Pointer[Struct_in6_addr]) : Int;

external inet6_rth_reverse(
    argument0 : RawPointer,
    argument1 : RawPointer) : Int;

external inet6_rth_segments(
    argument0 : RawPointer) : Int;

external inet6_rth_getaddr(
    argument0 : RawPointer,
    argument1 : Int) : Pointer[Struct_in6_addr];

external bindresvport(
    argument0 : Int,
    argument1 : Pointer[Struct_sockaddr_in]) : Int;

external bindresvport_sa(
    argument0 : Int,
    argument1 : Pointer[Struct_sockaddr]) : Int;

external h_errno : Int;

record Struct_hostent (
    h_name : Pointer[CChar],
    h_aliases : Pointer[Pointer[CChar]],
    h_addrtype : Int,
    h_length : Int,
    h_addr_list : Pointer[Pointer[CChar]],
);

record Struct_netent (
    n_name : Pointer[CChar],
    n_aliases : Pointer[Pointer[CChar]],
    n_addrtype : Int,
    n_net : UInt,
);

record Struct_servent (
    s_name : Pointer[CChar],
    s_aliases : Pointer[Pointer[CChar]],
    s_port : Int,
    s_proto : Pointer[CChar],
);

record Struct_protoent (
    p_name : Pointer[CChar],
    p_aliases : Pointer[Pointer[CChar]],
    p_proto : Int,
);

record Struct_addrinfo (
    ai_flags : Int,
    ai_family : Int,
    ai_socktype : Int,
    ai_protocol : Int,
    ai_addrlen : UInt,
    ai_canonname : Pointer[CChar],
    ai_addr : Pointer[Struct_sockaddr],
    ai_next : Pointer[Struct_addrinfo],
);

record Struct_rpcent (
    r_name : Pointer[CChar],
    r_aliases : Pointer[Pointer[CChar]],
    r_number : Int,
);

external endhostent();

external endnetent();

external endprotoent();

external endservent();

external freeaddrinfo(
    argument0 : Pointer[Struct_addrinfo]);

external gai_strerror(
    argument0 : Int) : Pointer[CChar];

external getaddrinfo(
    argument0 : Pointer[CChar],
    argument1 : Pointer[CChar],
    argument2 : Pointer[Struct_addrinfo],
    argument3 : Pointer[Pointer[Struct_addrinfo]]) : Int;

external gethostbyaddr(
    argument0 : RawPointer,
    argument1 : UInt,
    argument2 : Int) : Pointer[Struct_hostent];

external gethostbyname(
    argument0 : Pointer[CChar]) : Pointer[Struct_hostent];

external gethostent() : Pointer[Struct_hostent];

external getnameinfo(
    argument0 : Pointer[Struct_sockaddr],
    argument1 : UInt,
    argument2 : Pointer[CChar],
    argument3 : UInt,
    argument4 : Pointer[CChar],
    argument5 : UInt,
    argument6 : Int) : Int;

external getnetbyaddr(
    argument0 : UInt,
    argument1 : Int) : Pointer[Struct_netent];

external getnetbyname(
    argument0 : Pointer[CChar]) : Pointer[Struct_netent];

external getnetent() : Pointer[Struct_netent];

external getprotobyname(
    argument0 : Pointer[CChar]) : Pointer[Struct_protoent];

external getprotobynumber(
    argument0 : Int) : Pointer[Struct_protoent];

external getprotoent() : Pointer[Struct_protoent];

external getservbyname(
    argument0 : Pointer[CChar],
    argument1 : Pointer[CChar]) : Pointer[Struct_servent];

external getservbyport(
    argument0 : Int,
    argument1 : Pointer[CChar]) : Pointer[Struct_servent];

external getservent() : Pointer[Struct_servent];

external sethostent(
    argument0 : Int);

external setnetent(
    argument0 : Int);

external setprotoent(
    argument0 : Int);

external setservent(
    argument0 : Int);

external freehostent(
    argument0 : Pointer[Struct_hostent]);

external gethostbyname2(
    argument0 : Pointer[CChar],
    argument1 : Int) : Pointer[Struct_hostent];

external getipnodebyaddr(
    argument0 : RawPointer,
    argument1 : CULong,
    argument2 : Int,
    argument3 : Pointer[Int]) : Pointer[Struct_hostent];

external getipnodebyname(
    argument0 : Pointer[CChar],
    argument1 : Int,
    argument2 : Int,
    argument3 : Pointer[Int]) : Pointer[Struct_hostent];

external getrpcbyname(
    name : Pointer[CChar]) : Pointer[Struct_rpcent];

external getrpcbynumber(
    number : Int) : Pointer[Struct_rpcent];

external getrpcent() : Pointer[Struct_rpcent];

external setrpcent(
    stayopen : Int);

external endrpcent();

external herror(
    argument0 : Pointer[CChar]);

external hstrerror(
    argument0 : Int) : Pointer[CChar];

external innetgr(
    argument0 : Pointer[CChar],
    argument1 : Pointer[CChar],
    argument2 : Pointer[CChar],
    argument3 : Pointer[CChar]) : Int;

external getnetgrent(
    argument0 : Pointer[Pointer[CChar]],
    argument1 : Pointer[Pointer[CChar]],
    argument2 : Pointer[Pointer[CChar]]) : Int;

external endnetgrent();

external setnetgrent(
    argument0 : Pointer[CChar]);
