ref: a16c4e637079bb3d7f1cb93ae9b2348d710c003f
dir: /libstd/sys+osx-x64.myr/
use "systypes.use" pkg sys = type scno = int64 /* syscall */ type fdopt = int64 /* fd options */ type fd = int32 /* fd */ type pid = int64 /* pid */ type mprot = int64 /* memory protection */ type mopt = int64 /* memory mapping options */ type socktype = int64 /* socket type */ type sockproto = int64 /* socket protocol */ type sockfam = uint8 /* socket family */ type filemode = uint16 /* file permission bits */ type kflags = uint16 /* kqueue flags */ type whence = int64 type fcntlcmd = int64 type timespec = struct sec : uint64 nsec : uint32 ;; type timeval = struct sec : uint64 usec : uint32 ;; type timezone = struct minwest : int32 /* of greenwich */ dsttime : int32 /* nonzero if DST applies */ ;; type clock = union `Clockrealtime `Clockmonotonic ;; type waitstatus = union `Waitexit int32 `Waitsig int32 `Waitstop int32 `Waitfail int32 ;; type statbuf = struct dev : int32 mode : filemode nlink : uint16 ino : uint64 uid : uint32 gid : uint32 rdev : uint32 atime : timespec mtime : timespec ctime : timespec birthtimespec : timespec size : off blocks : int64 blksize : int32 flags : uint32 gen : uint32 _spare : uint32 _qspare : uint64[2] ;; type rusage = struct utime : timeval /* user time */ stime : timeval /* system time */ _opaque : uint64[14] /* padding (darwin-specific data) */ ;; type utsname = struct system : byte[256] node : byte[256] release : byte[256] version : byte[256] machine : byte[256] ;; type sockaddr = struct len : byte fam : sockfam data : byte[14] /* what is the *actual* length? */ ;; type sockaddr_in = struct len : byte fam : sockfam port : uint16 addr : byte[4] zero : byte[8] ;; type sockaddr_in6 = struct len : byte fam : sockfam port : uint16 flowinf : uint32 addr : byte[16] scope : uint32 ;; type sockaddr_storage = struct len : byte fam : sockfam __pad1 : byte[6] __align : uint64 __pad2 : byte[112] ;; type dirent64 = struct ino : uint64 seekoff : uint64 /* seek offset (optional, used by servers) */ reclen : uint16 /* length of this record */ namlen : uint16 /* length of string in d_name */ typeid : uint8 /* file type, see below */ name : byte[...] ;; type kevent = struct ident : intptr /* identifier for this event */ filter : int16 /* filter for event */ flags : uint16 /* general flags */ fflags : uint32 /* filter-specific flags */ data : intptr /* filter-specific data */ udata : byte# /* opaque user data identifier */ ;; type kevent64 = struct ident : uint64 /* identifier for this event */ filter : int16 /* filter for event */ flags : kflags /* general flags */ fflags : uint32 /* filter-specific flags */ data : int64 /* filter-specific data */ udata : uint64 /* opaque user data identifier */ ext : uint64[2] /* filter-specific extensions */ ;; const Seekset : whence = 0 const Seekcur : whence = 1 const Seekend : whence = 2 /* system specific constants */ const Maxpathlen : size = 1024 /* fcntl constants */ const Fdupfd : fcntlcmd = 0 /* duplicate file descriptor */ const Fgetfd : fcntlcmd = 1 /* get file descriptor flags */ const Fsetfd : fcntlcmd = 2 /* set file descriptor flags */ const Fgetfl : fcntlcmd = 3 /* get file status flags */ const Fsetfl : fcntlcmd = 4 /* set file status flags */ const Fgetown : fcntlcmd = 5 /* get SIGIO/SIGURG proc/pgrp */ const Fsetown : fcntlcmd = 6 /* set SIGIO/SIGURG proc/pgrp */ const Fgetlk : fcntlcmd = 7 /* get record locking information */ const Fsetlk : fcntlcmd = 8 /* set record locking information */ const Fsetlkw : fcntlcmd = 9 /* F_SETLK; wait if blocked */ const Fsetlkwtimeout : fcntlcmd = 10 /* F_SETLK; wait if blocked, return on timeout */ const Fflush_data : fcntlcmd = 40 const Fchkclean : fcntlcmd = 41 /* Used for regression test */ const Fpreallocate : fcntlcmd = 42 /* Preallocate storage */ const Fsetsize : fcntlcmd = 43 /* Truncate a file without zeroing space */ const Frdadvise : fcntlcmd = 44 /* Issue an advisory read async with no copy to user */ const Frdahead : fcntlcmd = 45 /* turn read ahead off/on for this fd */ /* 46,47 used to be F_READBOOTSTRAP and F_WRITEBOOTSTRAP */ const Fnocache : fcntlcmd = 48 /* turn data caching off/on for this fd */ const Flog2phys : fcntlcmd = 49 /* file offset to device offset */ const Fgetpath : fcntlcmd = 50 /* return the full path of the fd */ const Ffullfsync : fcntlcmd = 51 /* fsync + ask the drive to flush to the media */ const Fpathpkg_check : fcntlcmd = 52 /* find which component (if any) is a package */ const Ffreeze_fs : fcntlcmd = 53 /* "freeze" all fs operations */ const Fthaw_fs : fcntlcmd = 54 /* "thaw" all fs operations */ const Fglobal_nocache : fcntlcmd = 55 /* turn data caching off/on (globally) for this file */ const Faddsigs : fcntlcmd = 59 /* add detached signatures */ const Faddfilesigs : fcntlcmd = 61 /* add signature from same file (used by dyld for shared libs) */ const Fgetprotclass : fcntlcmd = 63 /* Get the protection class of a file from the EA, returns int */ const Fsetprotclass : fcntlcmd = 64 /* Set the protection class of a file for the EA, requires int */ const Flog2phys_ext : fcntlcmd = 65 /* file offset to device offset, extended */ const Fgetlkpid : fcntlcmd = 66 /* get record locking information, per-process */ /* See F_DUPFD_CLOEXEC below for 67 */ const Fsetbacktore : fcntlcmd = 70 /* Mark the file as being the backing store for another filesystem */ const Fgetpath_mtminfo : fcntlcmd = 71 /* return the full path of the FD, but error in specific mtmd circumstances */ /* 72 is free. It used to be F_GETENCRYPTEDDATA, which is now removed. */ const Fsetnosigpipe : fcntlcmd = 73 /* No SIGPIPE generated on EPIPE */ const Fgetnosigpipe : fcntlcmd = 74 /* Status of SIGPIPE for this fd */ /* kqueue events */ const Kevadd : kflags = 0x0001 /* add event to kq (implies enable) */ const Kevdelete : kflags = 0x0002 /* delete event from kq */ const Kevenable : kflags = 0x0004 /* enable event */ const Kevdisable : kflags = 0x0008 /* disable event (not reported) */ const Kevreceipt : kflags = 0x0040 /* force EV_ERROR on success, data == 0 */ /* kqueue flags */ const Kevoneshot : kflags = 0x0010 /* only report one occurrence */ const Kevclear : kflags = 0x0020 /* clear event state after reporting */ const Kevdispatch : kflags = 0x0080 /* disable event after reporting */ const Kevsysflags : kflags = 0xf000 /* reserved by system */ const Kevflag0 : kflags = 0x1000 /* filter-specific flag */ const Kevflag1 : kflags = 0x2000 /* filter-specific flag */ /* kqueue returned values */ const Keveof : kflags = 0x8000 /* eof detected */ const Keverror : kflags = 0x4000 /* error, data contains errno */ /* open options */ const Ordonly : fdopt = 0x0 const Owronly : fdopt = 0x1 const Ordwr : fdopt = 0x2 const Ondelay : fdopt = 0x4 const Oappend : fdopt = 0x8 const Ocreat : fdopt = 0x200 const Onofollow : fdopt = 0x100 const Otrunc : fdopt = 0x400 const Odir : fdopt = 0x100000 /* stat modes */ const Sifmt : filemode = 0xf000 const Sififo : filemode = 0x1000 const Sifchr : filemode = 0x2000 const Sifdir : filemode = 0x4000 const Sifblk : filemode = 0x6000 const Sifreg : filemode = 0x8000 const Siflnk : filemode = 0xa000 const Sifsock : filemode = 0xc000 /* mmap protection */ const Mprotnone : mprot = 0x0 const Mprotrd : mprot = 0x1 const Mprotwr : mprot = 0x2 const Mprotexec : mprot = 0x4 const Mprotrw : mprot = 0x3 /* mmap options */ const Mshared : mopt = 0x1 const Mpriv : mopt = 0x2 const Mfixed : mopt = 0x10 const Mfile : mopt = 0x0 const Manon : mopt = 0x1000 /* Only on Linux const M32bit : mopt = 0x40 */ /* socket families. INCOMPLETE. */ const Afunspec : sockfam = 0 const Afunix : sockfam = 1 const Afinet : sockfam = 2 const Afinet6 : sockfam = 30 /* socket types. */ const Sockstream : socktype = 1 const Sockdgram : socktype = 2 const Sockraw : socktype = 3 const Sockrdm : socktype = 4 const Sockseqpacket : socktype = 5 /* network protocols */ const Ipproto_ip : sockproto = 0 const Ipproto_icmp : sockproto = 1 const Ipproto_tcp : sockproto = 6 const Ipproto_udp : sockproto = 17 const Ipproto_raw : sockproto = 255 /* return value for a failed mapping */ const Mapbad : byte# = -1 castto(byte#) /* syscalls. note, creat() implemented as open(path, Creat|Trunc|Wronly) */ const Syssyscall : scno = 0x2000000 const Sysexit : scno = 0x2000001 const Sysfork : scno = 0x2000002 const Sysread : scno = 0x2000003 const Syswrite : scno = 0x2000004 const Sysopen : scno = 0x2000005 const Sysclose : scno = 0x2000006 const Syswait4 : scno = 0x2000007 const Syslink : scno = 0x2000009 const Sysunlink : scno = 0x200000a const Syschdir : scno = 0x200000c const Sysfchdir : scno = 0x200000d const Sysmknod : scno = 0x200000e const Syschmod : scno = 0x200000f const Syschown : scno = 0x2000010 const Sysgetfsstat : scno = 0x2000012 const Sysgetpid : scno = 0x2000014 const Syssetuid : scno = 0x2000017 const Sysgetuid : scno = 0x2000018 const Sysgeteuid : scno = 0x2000019 const Sysptrace : scno = 0x200001a const Sysrecvmsg : scno = 0x200001b const Syssendmsg : scno = 0x200001c const Sysrecvfrom : scno = 0x200001d const Sysaccept : scno = 0x200001e const Sysgetpeername : scno = 0x200001f const Sysgetsockname : scno = 0x2000020 const Sysaccess : scno = 0x2000021 const Syschflags : scno = 0x2000022 const Sysfchflags : scno = 0x2000023 const Syssync : scno = 0x2000024 const Syskill : scno = 0x2000025 const Sysgetppid : scno = 0x2000027 const Sysdup : scno = 0x2000029 const Syspipe : scno = 0x200002a const Sysgetegid : scno = 0x200002b const Sysprofil : scno = 0x200002c const Syssigaction : scno = 0x200002e const Sysgetgid : scno = 0x200002f const Syssigprocmask : scno = 0x2000030 const Sysgetlogin : scno = 0x2000031 const Syssetlogin : scno = 0x2000032 const Sysacct : scno = 0x2000033 const Syssigpending : scno = 0x2000034 const Syssigaltstack : scno = 0x2000035 const Sysioctl : scno = 0x2000036 const Sysreboot : scno = 0x2000037 const Sysrevoke : scno = 0x2000038 const Syssymlink : scno = 0x2000039 const Sysreadlink : scno = 0x200003a const Sysexecve : scno = 0x200003b const Sysumask : scno = 0x200003c const Syschroot : scno = 0x200003d const Sysmsync : scno = 0x2000041 const Sysvfork : scno = 0x2000042 const Sysmunmap : scno = 0x2000049 const Sysmprotect : scno = 0x200004a const Sysmadvise : scno = 0x200004b const Sysmincore : scno = 0x200004e const Sysgetgroups : scno = 0x200004f const Syssetgroups : scno = 0x2000050 const Sysgetpgrp : scno = 0x2000051 const Syssetpgid : scno = 0x2000052 const Syssetitimer : scno = 0x2000053 const Sysswapon : scno = 0x2000055 const Sysgetitimer : scno = 0x2000056 const Sysgetdtablesize : scno = 0x2000059 const Sysdup2 : scno = 0x200005a const Sysfcntl : scno = 0x200005c const Sysselect : scno = 0x200005d const Sysfsync : scno = 0x200005f const Syssetpriority : scno = 0x2000060 const Syssocket : scno = 0x2000061 const Sysconnect : scno = 0x2000062 const Sysgetpriority : scno = 0x2000064 const Sysbind : scno = 0x2000068 const Syssetsockopt : scno = 0x2000069 const Syslisten : scno = 0x200006a const Syssigsuspend : scno = 0x200006f const Sysgettimeofday : scno = 0x2000074 const Sysgetrusage : scno = 0x2000075 const Sysgetsockopt : scno = 0x2000076 const Sysreadv : scno = 0x2000078 const Syswritev : scno = 0x2000079 const Syssettimeofday : scno = 0x200007a const Sysfchown : scno = 0x200007b const Sysfchmod : scno = 0x200007c const Syssetreuid : scno = 0x200007e const Syssetregid : scno = 0x200007f const Sysrename : scno = 0x2000080 const Sysflock : scno = 0x2000083 const Sysmkfifo : scno = 0x2000084 const Syssendto : scno = 0x2000085 const Sysshutdown : scno = 0x2000086 const Syssocketpair : scno = 0x2000087 const Sysmkdir : scno = 0x2000088 const Sysrmdir : scno = 0x2000089 const Sysutimes : scno = 0x200008a const Sysfutimes : scno = 0x200008b const Sysadjtime : scno = 0x200008c const Sysgethostuuid : scno = 0x200008e const Syssetsid : scno = 0x2000093 const Sysgetpgid : scno = 0x2000097 const Syssetprivexec : scno = 0x2000098 const Syspread : scno = 0x2000099 const Syspwrite : scno = 0x200009a const Sysnfssvc : scno = 0x200009b const Sysstatfs : scno = 0x200009d const Sysfstatfs : scno = 0x200009e const Sysunmount : scno = 0x200009f const Sysgetfh : scno = 0x20000a1 const Sysquotactl : scno = 0x20000a5 const Sysmount : scno = 0x20000a7 const Syscsops : scno = 0x20000a9 const Syswaitid : scno = 0x20000ad const Sysadd_profil : scno = 0x20000b0 const Syskdebug_trace : scno = 0x20000b4 const Syssetgid : scno = 0x20000b5 const Syssetegid : scno = 0x20000b6 const Sysseteuid : scno = 0x20000b7 const Syssigreturn : scno = 0x20000b8 const Syschud : scno = 0x20000b9 const Sysfdatasync : scno = 0x20000bb const Sysstat : scno = 0x20000bc const Sysfstat : scno = 0x20000bd const Syslstat : scno = 0x20000be const Syspathconf : scno = 0x20000bf const Sysfpathconf : scno = 0x20000c0 const Sysgetrlimit : scno = 0x20000c2 const Syssetrlimit : scno = 0x20000c3 const Sysgetdirentries : scno = 0x20000c4 const Sysmmap : scno = 0x20000c5 const Syslseek : scno = 0x20000c7 const Systruncate : scno = 0x20000c8 const Sysftruncate : scno = 0x20000c9 const Sys__sysctl : scno = 0x20000ca const Sysmlock : scno = 0x20000cb const Sysmunlock : scno = 0x20000cc const Sysundelete : scno = 0x20000cd const SysATsocket : scno = 0x20000ce const SysATgetmsg : scno = 0x20000cf const SysATputmsg : scno = 0x20000d0 const SysATPsndreq : scno = 0x20000d1 const SysATPsndrsp : scno = 0x20000d2 const SysATPgetreq : scno = 0x20000d3 const SysATPgetrsp : scno = 0x20000d4 const Sysmkcomplex : scno = 0x20000d8 const Sysstatv : scno = 0x20000d9 const Syslstatv : scno = 0x20000da const Sysfstatv : scno = 0x20000db const Sysgetattrlist : scno = 0x20000dc const Syssetattrlist : scno = 0x20000dd const Sysgetdirentriesattr : scno = 0x20000de const Sysexchangedata : scno = 0x20000df const Syssearchfs : scno = 0x20000e1 const Sysdelete : scno = 0x20000e2 const Syscopyfile : scno = 0x20000e3 const Sysfgetattrlist : scno = 0x20000e4 const Sysfsetattrlist : scno = 0x20000e5 const Syspoll : scno = 0x20000e6 const Syswatchevent : scno = 0x20000e7 const Syswaitevent : scno = 0x20000e8 const Sysmodwatch : scno = 0x20000e9 const Sysgetxattr : scno = 0x20000ea const Sysfgetxattr : scno = 0x20000eb const Syssetxattr : scno = 0x20000ec const Sysfsetxattr : scno = 0x20000ed const Sysremovexattr : scno = 0x20000ee const Sysfremovexattr : scno = 0x20000ef const Syslistxattr : scno = 0x20000f0 const Sysflistxattr : scno = 0x20000f1 const Sysfsctl : scno = 0x20000f2 const Sysinitgroups : scno = 0x20000f3 const Sysposix_spawn : scno = 0x20000f4 const Sysffsctl : scno = 0x20000f5 const Sysnfsclnt : scno = 0x20000f7 const Sysfhopen : scno = 0x20000f8 const Sysminherit : scno = 0x20000fa const Syssemsys : scno = 0x20000fb const Sysmsgsys : scno = 0x20000fc const Sysshmsys : scno = 0x20000fd const Syssemctl : scno = 0x20000fe const Syssemget : scno = 0x20000ff const Syssemop : scno = 0x2000100 const Sysmsgctl : scno = 0x2000102 const Sysmsgget : scno = 0x2000103 const Sysmsgsnd : scno = 0x2000104 const Sysmsgrcv : scno = 0x2000105 const Sysshmat : scno = 0x2000106 const Sysshmctl : scno = 0x2000107 const Sysshmdt : scno = 0x2000108 const Sysshmget : scno = 0x2000109 const Sysshm_open : scno = 0x200010a const Sysshm_unlink : scno = 0x200010b const Syssem_open : scno = 0x200010c const Syssem_close : scno = 0x200010d const Syssem_unlink : scno = 0x200010e const Syssem_wait : scno = 0x200010f const Syssem_trywait : scno = 0x2000110 const Syssem_post : scno = 0x2000111 const Syssem_getvalue : scno = 0x2000112 const Syssem_init : scno = 0x2000113 const Syssem_destroy : scno = 0x2000114 const Sysopen_extended : scno = 0x2000115 const Sysumask_extended : scno = 0x2000116 const Sysstat_extended : scno = 0x2000117 const Syslstat_extended : scno = 0x2000118 const Sysfstat_extended : scno = 0x2000119 const Syschmod_extended : scno = 0x200011a const Sysfchmod_extended : scno = 0x200011b const Sysaccess_extended : scno = 0x200011c const Syssettid : scno = 0x200011d const Sysgettid : scno = 0x200011e const Syssetsgroups : scno = 0x200011f const Sysgetsgroups : scno = 0x2000120 const Syssetwgroups : scno = 0x2000121 const Sysgetwgroups : scno = 0x2000122 const Sysmkfifo_extended : scno = 0x2000123 const Sysmkdir_extended : scno = 0x2000124 const Sysidentitysvc : scno = 0x2000125 const Sysshared_region_check_np : scno = 0x2000126 const Sysshared_region_map_np : scno = 0x2000127 const Sysvm_pressure_monitor : scno = 0x2000128 const Syspsynch_rw_longrdlock : scno = 0x2000129 const Syspsynch_rw_yieldwrlock : scno = 0x200012a const Syspsynch_rw_downgrade : scno = 0x200012b const Syspsynch_rw_upgrade : scno = 0x200012c const Syspsynch_mutexwait : scno = 0x200012d const Syspsynch_mutexdrop : scno = 0x200012e const Syspsynch_cvbroad : scno = 0x200012f const Syspsynch_cvsignal : scno = 0x2000130 const Syspsynch_cvwait : scno = 0x2000131 const Syspsynch_rw_rdlock : scno = 0x2000132 const Syspsynch_rw_wrlock : scno = 0x2000133 const Syspsynch_rw_unlock : scno = 0x2000134 const Syspsynch_rw_unlock2 : scno = 0x2000135 const Sysgetsid : scno = 0x2000136 const Syssettid_with_pid : scno = 0x2000137 const Sysaio_fsync : scno = 0x2000139 const Sysaio_return : scno = 0x200013a const Sysaio_suspend : scno = 0x200013b const Sysaio_cancel : scno = 0x200013c const Sysaio_error : scno = 0x200013d const Sysaio_read : scno = 0x200013e const Sysaio_write : scno = 0x200013f const Syslio_listio : scno = 0x2000140 const Sysiopolicysys : scno = 0x2000142 const Sysmlockall : scno = 0x2000144 const Sysmunlockall : scno = 0x2000145 const Sysissetugid : scno = 0x2000147 const Sys__pthread_kill : scno = 0x2000148 const Sys__pthread_sigmask : scno = 0x2000149 const Sys__sigwait : scno = 0x200014a const Sys__disable_threadsignal : scno = 0x200014b const Sys__pthread_markcancel : scno = 0x200014c const Sys__pthread_canceled : scno = 0x200014d const Sys__semwait_signal : scno = 0x200014e const Sysproc_info : scno = 0x2000150 const Syssendfile : scno = 0x2000151 const Sysstat64 : scno = 0x2000152 const Sysfstat64 : scno = 0x2000153 const Syslstat64 : scno = 0x2000154 const Sysstat64_extended : scno = 0x2000155 const Syslstat64_extended : scno = 0x2000156 const Sysfstat64_extended : scno = 0x2000157 const Sysgetdirentries64 : scno = 0x2000158 const Sysstatfs64 : scno = 0x2000159 const Sysfstatfs64 : scno = 0x200015a const Sysgetfsstat64 : scno = 0x200015b const Sys__pthread_chdir : scno = 0x200015c const Sys__pthread_fchdir : scno = 0x200015d const Sysaudit : scno = 0x200015e const Sysauditon : scno = 0x200015f const Sysgetauid : scno = 0x2000161 const Syssetauid : scno = 0x2000162 const Sysgetaudit : scno = 0x2000163 const Syssetaudit : scno = 0x2000164 const Sysgetaudit_addr : scno = 0x2000165 const Syssetaudit_addr : scno = 0x2000166 const Sysauditctl : scno = 0x2000167 const Sysbsdthread_create : scno = 0x2000168 const Sysbsdthread_terminate : scno = 0x2000169 const Syskqueue : scno = 0x200016a const Syskevent : scno = 0x200016b const Syslchown : scno = 0x200016c const Sysstack_snapshot : scno = 0x200016d const Sysbsdthread_register : scno = 0x200016e const Sysworkq_open : scno = 0x200016f const Sysworkq_kernreturn : scno = 0x2000170 const Syskevent64 : scno = 0x2000171 const Sys__old_semwait_signal : scno = 0x2000172 const Sys__old_semwait_signal_nocancel : scno = 0x2000173 const Systhread_selfid : scno = 0x2000174 const Sys__mac_execve : scno = 0x200017c const Sys__mac_syscall : scno = 0x200017d const Sys__mac_get_file : scno = 0x200017e const Sys__mac_set_file : scno = 0x200017f const Sys__mac_get_link : scno = 0x2000180 const Sys__mac_set_link : scno = 0x2000181 const Sys__mac_get_proc : scno = 0x2000182 const Sys__mac_set_proc : scno = 0x2000183 const Sys__mac_get_fd : scno = 0x2000184 const Sys__mac_set_fd : scno = 0x2000185 const Sys__mac_get_pid : scno = 0x2000186 const Sys__mac_get_lcid : scno = 0x2000187 const Sys__mac_get_lctx : scno = 0x2000188 const Sys__mac_set_lctx : scno = 0x2000189 const Syssetlcid : scno = 0x200018a const Sysgetlcid : scno = 0x200018b const Sysread_nocancel : scno = 0x200018c const Syswrite_nocancel : scno = 0x200018d const Sysopen_nocancel : scno = 0x200018e const Sysclose_nocancel : scno = 0x200018f const Syswait4_nocancel : scno = 0x2000190 const Sysrecvmsg_nocancel : scno = 0x2000191 const Syssendmsg_nocancel : scno = 0x2000192 const Sysrecvfrom_nocancel : scno = 0x2000193 const Sysaccept_nocancel : scno = 0x2000194 const Sysmsync_nocancel : scno = 0x2000195 const Sysfcntl_nocancel : scno = 0x2000196 const Sysselect_nocancel : scno = 0x2000197 const Sysfsync_nocancel : scno = 0x2000198 const Sysconnect_nocancel : scno = 0x2000199 const Syssigsuspend_nocancel : scno = 0x200019a const Sysreadv_nocancel : scno = 0x200019b const Syswritev_nocancel : scno = 0x200019c const Syssendto_nocancel : scno = 0x200019d const Syspread_nocancel : scno = 0x200019e const Syspwrite_nocancel : scno = 0x200019f const Syswaitid_nocancel : scno = 0x20001a0 const Syspoll_nocancel : scno = 0x20001a1 const Sysmsgsnd_nocancel : scno = 0x20001a2 const Sysmsgrcv_nocancel : scno = 0x20001a3 const Syssem_wait_nocancel : scno = 0x20001a4 const Sysaio_suspend_nocancel : scno = 0x20001a5 const Sys__sigwait_nocancel : scno = 0x20001a6 const Sys__semwait_signal_nocancel : scno = 0x20001a7 const Sys__mac_mount : scno = 0x20001a8 const Sys__mac_get_mount : scno = 0x20001a9 const Sys__mac_getfsstat : scno = 0x20001aa const Sysfsgetpath : scno = 0x20001ab const Sysaudit_session_self : scno = 0x20001ac const Sysaudit_session_join : scno = 0x20001ad const Syspid_suspend : scno = 0x20001ae const Syspid_resume : scno = 0x20001af const Sysfileport_makeport : scno = 0x20001b0 const Sysfileport_makefd : scno = 0x20001b1 extern const syscall : (sc:scno, args:... -> int64) /* process control */ const exit : (status:int -> void) const getpid : ( -> pid) const kill : (pid : pid, sig:int64 -> int64) const fork : (-> pid) const wait4 : (pid : pid, loc:int32#, opt : int64, rusage:rusage# -> int64) const waitpid : (pid : pid, loc:int32#, opt : int64 -> int64) const execv : (cmd : byte[:], args : byte[:][:] -> int64) const execve : (cmd : byte[:], args : byte[:][:], env : byte[:][:] -> int64) /* wrappers to extract wait status */ const waitstatus : (st : int32 -> waitstatus) /* file manipulation */ const open : (path:byte[:], opts:fdopt -> fd) const openmode : (path:byte[:], opts:fdopt, mode:int64 -> fd) const close : (fd:fd -> int64) const creat : (path:byte[:], mode:int64 -> fd) const unlink : (path:byte[:] -> int) const read : (fd:fd, buf:byte[:] -> size) const write : (fd:fd, buf:byte[:] -> size) const lseek : (fd:fd, off:off, whence:whence -> off) const stat : (path:byte[:], sb:statbuf# -> int64) const lstat : (path:byte[:], sb:statbuf# -> int64) const fstat : (fd:fd, sb:statbuf# -> int64) const mkdir : (path : byte[:], mode : int64 -> int64) generic ioctl : (fd:fd, req : int64, args:@a# -> int64) const getdirentries64 : (fd : fd, buf : byte[:], basep : int64# -> int64) const chdir : (p : byte[:] -> int64) /* fd stuff */ const pipe : (fd : fd[2]# -> int64) const dup : (fd : fd -> fd) const dup2 : (src : fd, dst : fd -> fd) /* NB: the C ABI uses '...' for the args. */ const fcntl : (fd : fd, cmd : fcntlcmd, args : byte# -> int64) /* kqueue */ const kqueue : (-> fd) const kevent : (q : fd, cl : kevent[:], el : kevent[:], flg : kflags, timeout : timespec# -> int64) const kevent64 : (q : fd, cl : kevent64[:], el : kevent64[:], flg : kflags, timeout : timespec# -> int64) /* networking */ const socket : (dom : sockfam, stype : socktype, proto : sockproto -> fd) const connect : (sock : fd, addr : sockaddr#, len : size -> int) const accept : (sock : fd, addr : sockaddr#, len : size# -> fd) const listen : (sock : fd, backlog : int -> int) const bind : (sock : fd, addr : sockaddr#, len : size -> int) /* memory mapping */ const munmap : (addr:byte#, len:size -> int64) const mmap : (addr:byte#, len:size, prot:mprot, flags:mopt, fd:fd, off:off -> byte#) /* time */ const gettimeofday : (tv : timeval#, tz : timezone# -> int) const settimeofday : (tv : timeval#, tz : timezone# -> int) /* faked with gettimeofday */ const clock_getres : (clk : clock, ts : timespec# -> int) const clock_gettime : (clk : clock, ts : timespec# -> int) const clock_settime : (clk : clock, ts : timespec# -> int) /* FIXME: HACK HACK HACK -- does nothing */ const sleep : (time : uint64 -> int32) /* system information */ const uname : (buf : utsname# -> int) const sysctl : (mib : int[:], old : byte[:]#, new : byte[:] -> int) /* filled by start code */ extern const __cenvp : byte## extern const __environment : byte[:][:] ;; /* wraps a syscall argument, converting it to 64 bits for the syscall function. This is the same as casting, but more concise than writing castto(int64) */ generic a = {x : @t -> x castto(uint64) } /* OSX has a number of funky syscalls */ extern const __osx_fork : (-> pid) extern const __osx_pipe : (fd : fd[2]# -> int64) extern const __osx_getpid : (-> pid) extern const __osx_lseek : (fd:fd, off:off, whence:whence -> off) extern const __osx_gettimeofday : (tv : timeval#, tz : timezone# -> int) /* extern const __osx_ptrace extern const __osx_signalstack extern const __osx_sigreturn extern const __osx_thread_selfid extern const __osx_vfork */ extern const cstring : (str : byte[:] -> byte#) extern const alloca : (sz : size -> byte#) /* process control */ const exit = {status; syscall(Sysexit, a(status))} const getpid = {; -> syscall(Sysgetpid) castto(pid)} const kill = {pid, sig; -> syscall(Syskill, a(pid), a(sig))} const fork = {; -> __osx_fork()} const wait4 = {pid, loc, opt, rusage; -> syscall(Syswait4, a(pid), a(loc), a(opt), a(rusage))} const waitpid = {pid, loc, opt; -> wait4(pid, loc, opt, 0 castto(rusage#)) } const sleep = {time; -> 0} const execv = {cmd, args var p, cargs, i /* doesn't just call execve() for efficiency's sake. */ p = alloca((args.len + 1)*sizeof(byte#)) cargs = (p castto(byte##))[:args.len + 1] for i = 0; i < args.len; i++ cargs[i] = cstring(args[i]) ;; cargs[args.len] = 0 castto(byte#) -> syscall(Sysexecve, cstring(cmd), a(p), a(__cenvp)) } const execve = {cmd, args, env var cargs, cenv, i var p /* copy the args */ p = alloca((args.len + 1)*sizeof(byte#)) cargs = (p castto(byte##))[:args.len + 1] for i = 0; i < args.len; i++ cargs[i] = cstring(args[i]) ;; cargs[args.len] = 0 castto(byte#) /* copy the env. of course we fucking have to duplicate this code everywhere, since we want to stack allocate... */ p = alloca((env.len + 1)*sizeof(byte#)) cenv = (p castto(byte##))[:env.len] for i = 0; i < env.len; i++ cenv[i] = cstring(env[i]) ;; cenv[env.len] = 0 castto(byte#) -> syscall(Sysexecve, cstring(cmd), a(p), a(cenv)) } /* fd manipulation */ const open = {path, opts; -> syscall(Sysopen, cstring(path), a(opts), a(0o777)) castto(fd)} const openmode = {path, opts, mode; -> syscall(Sysopen, cstring(path), a(opts), a(mode)) castto(fd)} const close = {fd; -> syscall(Sysclose, a(fd))} const creat = {path, mode; -> openmode(path, Ocreat | Otrunc | Owronly, mode) castto(fd)} const unlink = {path; -> syscall(Sysunlink, cstring(path)) castto(int)} const read = {fd, buf; -> syscall(Sysread, a(fd), buf castto(byte#), a(buf.len)) castto(size)} const write = {fd, buf; -> syscall(Syswrite, a(fd), buf castto(byte#), a(buf.len)) castto(size)} const lseek = {fd, off, whence; -> __osx_lseek(fd, off, whence)} const stat = {path, sb; -> syscall(Sysstat64, cstring(path), a(sb))} const lstat = {path, sb; -> syscall(Syslstat64, cstring(path), a(sb))} const fstat = {fd, sb; -> syscall(Sysfstat64, a(fd), a(sb))} const mkdir = {path, mode; -> syscall(Sysmkdir, cstring(path), a(mode)) castto(int64)} generic ioctl = {fd, req, arg; -> syscall(Sysioctl, a(fd), a(req), a(arg)) castto(int64)} const getdirentries64 = {fd, buf, basep; -> syscall(Sysgetdirentries64, a(fd), buf castto(byte#), a(buf.len), a(basep))} const chdir = {dir; -> syscall(Syschdir, cstring(dir))} /* fd stuff */ const pipe = {fd; -> __osx_pipe(fd)} const dup = {fd; -> syscall(Sysdup, a(fd)) castto(fd)} const dup2 = {src, dst; -> syscall(Sysdup2, a(src), a(dst)) castto(fd)} const fcntl = {fd, cmd, args; -> syscall(Sysfcntl, a(fd), a(cmd), a(args))} /* kqueueueueueueue */ const kqueue = {; -> syscall(Syskqueue) castto(fd)} const kevent = {q, cl, el, flg, timeout -> syscall(Syskevent, a(q), \ cl castto(kevent#), a(cl.len), \ el castto(kevent#), a(el.len), \ a(flg), \ timeout) } const kevent64 = {q, cl, el, flg, timeout -> syscall(Syskevent, a(q), \ cl castto(kevent#), a(cl.len), \ el castto(kevent#), a(el.len), \ a(flg), \ timeout) } /* networking */ const socket = {dom, stype, proto; -> syscall(Syssocket, a(dom), a(stype), a(proto)) castto(fd) } const connect = {sock, addr, len; -> syscall(Sysconnect, a(sock), a(addr), a(len)) castto(int)} const accept = {sock, addr, len; -> syscall(Sysaccept, a(sock), a(addr), a(len)) castto(fd)} const listen = {sock, backlog; -> syscall(Syslisten, a(sock), a(backlog)) castto(int)} const bind = {sock, addr, len; -> syscall(Sysbind, a(sock), a(addr), a(len)) castto(int)} /* memory management */ const munmap = {addr, len; -> syscall(Sysmunmap, a(addr), a(len))} const mmap = {addr, len, prot, flags, fd, off; -> syscall(Sysmmap, a(addr), a(len), a(prot), a(flags), a(fd), a(off)) castto(byte#)} /* time */ const gettimeofday = {tv, tz; -> __osx_gettimeofday(tv, tz) castto(int)} const settimeofday = {tv, tz; -> syscall(Syssettimeofday, a(tv), a(tz)) castto(int)} /* faked with gettimeofday */ const clock_getres = {clk, ts ts.sec = 0 ts.nsec = 1000*10 /* 10ms is reasonable resolution */ -> 0 } const clock_gettime = {clk, ts var tv var ret ret = gettimeofday(&tv, 0 castto(timezone#)) ts.sec = tv.sec ts.nsec = tv.usec * 1000 -> ret } const clock_settime = {clk, ts var tv tv.sec = ts.sec tv.usec = ts.nsec / 1000 -> settimeofday(&tv, 0 castto(timezone#)) } /* system information */ const uname = {buf; var mib : int[2] var ret var sys var nod var rel var ver var mach ret = 0 mib[0] = 1 /* CTL_KERN */ mib[1] = 1 /* KERN_OSTYPE */ sys = buf.system[:] ret = sysctl(mib[:], &sys, [][:]) if ret < 0 -> ret ;; mib[0] = 1 /* CTL_KERN */ mib[1] = 10 /* KERN_HOSTNAME */ nod = buf.node[:] ret = sysctl(mib[:], &nod, [][:]) if ret < 0 -> ret ;; mib[0] = 1 /* CTL_KERN */ mib[1] = 2 /* KERN_OSRELEASE */ rel = buf.release[:] ret = sysctl(mib[:], &rel, [][:]) if ret < 0 -> ret ;; mib[0] = 1 /* CTL_KERN */ mib[1] = 4 /* KERN_VERSION */ ver = buf.version[:] ret = sysctl(mib[:], &ver, [][:]) if ret < 0 -> ret ;; mib[0] = 6 /* CTL_HW */ mib[1] = 1 /* HW_MACHINE */ mach = buf.machine[:] ret = sysctl(mib[:], &mach, [][:]) if ret < 0 -> ret ;; -> 0 } const sysctl = {mib, old, new var mibp var mibsz var o var oldp var oldsz var newp var newsz var ret mibp = mib castto(byte#) mibsz = mib.len castto(uint64) o = old# oldp = o castto(byte#) oldsz = (o.len castto(uint64)) if new.len > 0 newp = new castto(byte#) newsz = new.len castto(uint64) else newp = 0 castto(byte#) newsz = 0 ;; ret = syscall(Sys__sysctl, a(mibp), a(mibsz), a(oldp), a(&oldsz), a(newp), a(newsz)) castto(int) old# = o[:oldsz] -> ret } const waitstatus = {st if st < 0 -> `Waitfail st ;; match st & 0o177 | 0: -> `Waitexit (st >> 8) | 0o177:-> `Waitstop (st >> 8) | sig: -> `Waitsig sig ;; }