ref: 515b8e89c1a6c0859eaefbf7835a4e6497a57e0b
dir: /libstd/slurp.myr/
use "alloc.use" use "die.use" use "result.use" use "extremum.use" use "syswrap.use" use "types.use" pkg std = const slurp : (path : byte[:] -> result(byte[:], byte[:])) const fslurp : (path : fd -> result(byte[:], byte[:])) ;; const Bufstart = 4096 const slurp = {path var fd fd = open(path, Ordonly) if fd < 0 -> `Fail "Could not open file" ;; -> fslurp(fd) } const fslurp = {fd var len, bufsz var buf var n len = 0 bufsz = Bufstart buf = slalloc(bufsz) while true n = read(fd, buf[len:]) if n <= 0 goto done ;; len += n bufsz *= 2 buf = slgrow(buf, bufsz) ;; :done -> `Ok buf[:len] }