ref: 3b9796f80b335ea4c2f152988715e6069effdc88
dir: /libstd/env+plan9.myr/
use sys
use "alloc.use"
use "die.use"
use "extremum.use"
use "fmt.use"
use "option.use"
use "result.use"
use "slcp.use"
use "sldup.use"
use "sleq.use"
use "slpush.use"
use "slurp.use"
pkg std =
	const getenv :	(name : byte[:] -> option(byte[:]))
	const getenvv :	(name : byte[:], default : byte[:] -> byte[:])
;;
var envkey 	: byte[:][:]
var envval	: byte[:][:]
const envfind = {key
	var i
	for i = 0; i < envkey.len; i++
		if std.sleq(envkey[i], key)
			-> `Some envval[i]
		;;
	;;
	-> `None
}
const getenv = {name
	var buf : byte[128]
	var s
	match envfind(name)
	| `Some val:	-> `Some val
	| `None:
		s = bfmt(buf[:], "/env/%s", name)
		match std.slurp(s)
		| `Fail m: -> `None
		| `Ok data:
			envkey = slpush(envkey, sldup(name))
			envval = slpush(envval, data)
			-> `Some data
		;;
	;;
}
const getenvv = {name, default
	match getenv(name)
	| `Some val:	-> val
	| `None:	-> default
	;;
}