ref: 54da79816fab4a03e8f6022d6c9764d9099abd60
dir: /libstd/slurp.myr/
use "alloc.use" use "die.use" use "error.use" use "extremum.use" use "fmt.use" use "sys.use" use "types.use" pkg std = const slurp : (path : byte[:] -> error(byte[:], byte[:])) const tryslurp : (path : byte[:] -> byte[:]) ;; const Bufinc = 4096 const tryslurp = {path match slurp(path) | `Some data: -> data | `None: -> [][:] ;; } const slurp = {path var fd var n var len var buf fd = open(path, Ordonly, 0o777) if fd < 0 -> `Failure "Could not open file" ;; len = 0 buf = slalloc(Bufinc) while true n = read(fd, buf[len:]) if n == 0 goto done ;; len += n buf = slgrow(buf, len + Bufinc) ;; :done -> `Success buf[:len] }