ref: 765ff439ba6b29b36c6df8ea3923fac9f5e39eaf
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)
}