ref: 81faf1634871ae20739df2d5eb6525f47d14da77
dir: /lib/std/syswrap-ss+osx.myr/
use sys use "errno" use "cstrconv" use "slcp" use "die" pkg std = const nanosleep : (nsecs : uint64 -> errno) $noret const exit : (status:int -> void) pkglocal const bgetcwd : (buf : byte[:] -> errno) ;; extern const put : (fmt : byte[:], args : ... -> int64) const nanosleep = {nsecs var s, us s = nsecs / 1_000_000_000 us = (nsecs % 1_000_000_000 / 1000) castto(uint32) -> sys.select( \ 0, \ 0 castto(sys.fdset#), \ 0 castto(sys.fdset#), \ 0 castto(sys.fdset#), \ &[.sec = s, .usec = us] \ ) castto(errno) } const exit = {status; sys.exit(status) } const bgetcwd = {buf var path : byte[sys.Maxpathlen] var fd, len, err fd = sys.open(".", sys.Ordonly) if fd < 0 -> fd castto(errno) ;; /* FIXME: if the path is longer than sys.Pathmax, we should fall back to the ugly method of finding the path. */ err = sys.fcntl(fd, sys.Fgetpath, path[:] castto(byte#)) castto(errno) if err < 0 -> err ;; len = cstrlen(path[:]) if len >= buf.len -> Erange ;; slcp(buf[:len], path[:len]) -> len castto(errno) }