summaryrefslogtreecommitdiff
path: root/lib/std/readall.myr
blob: 4f7d1da77c9e473f6fe3f671d88147a91ef98af6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
use "errno"
use "result"
use "option"
use "syswrap"
use "types"

pkg std =
	const readall : (fd : fd, dst : byte[:] -> result(size, errno))
;;

const readall = {fd, dst
	var sz

	sz = dst.len
	while dst.len != 0
		match std.read(fd, dst)
		| `Ok 0:
			break
		| `Ok n:
			dst = dst[n:]
		| `Err e:
			-> `Err e
		;;
	;;
	-> `Ok (sz - dst.len)
}