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

pkg std =
	const writeall : (fd : fd, src : byte[:] -> std.result(size, (size, errno)))
;;

const writeall = {fd, src
	var sz

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