summaryrefslogtreecommitdiff
path: root/libstd/cstrconv.myr
blob: fa9e0bf7eec7dea151233d8499066e0b1f91bda5 (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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
use "types.use"

pkg std =
	const cstrlen	: (buf : byte[:] -> size)
	const cstrconv	: (buf : byte[:] -> byte[:])
	const cstrconvp	: (p : byte# -> byte[:])
;;

const cstrconv = {buf
	var i

	for i = 0; i < buf.len; i++
		if buf[i] == 0
			-> buf[:i]
		;;
	;;
	-> buf
}

const cstrconvp = {p
	var i, base

	i = 0
	base = p castto(intptr)
	while ((base + i) castto(byte#))# != 0
		i++
	;;
	-> p[:i]
}

const cstrlen = {buf
	var i

	for i = 0; i < buf.len; i++
		if buf[i] == 0
			break
		;;
	;;
	-> i
}