ref: 735a7d2932d70b5bf232e2d021e6c0c61e03f61a
dir: /lib/std/env+plan9.myr/
use sys use "alloc" use "cstrconv" use "die" use "extremum" use "fmt" use "option" use "result" use "slcp" use "sldup" use "sleq" use "slpush" use "slurp" use "blat" use "threadhooks" pkg std = const getenv : (name : byte[:] -> option(byte[:])) const getenvv : (name : byte[:], default : byte[:] -> byte[:]) const setenv : (name : byte[:], val : byte[:] -> void) ;; var envkey : byte[:][:] var envval : byte[:][:] const envfind = {key lock(envlck) for var i = 0; i < envkey.len; i++ if std.sleq(envkey[i], key) unlock(envlck) -> `Some envval[i] ;; ;; unlock(envlck) -> `None } const getenv = {name var s, ret match envfind(name) | `Some val: ret = `Some val | `None: s = fmt("/env/{}", name) match std.slurp(s) | `Err m: ret = `None | `Ok data: data = cstrconv(data) lock(envlck) slpush(&envkey, sldup(data)) slpush(&envval, data) unlock(envlck) ret = `Some data ;; std.slfree(s) ;; -> ret } const getenvv = {name, default match getenv(name) | `Some val: -> val | `None: -> default ;; } const setenv = {name, val var p p = fmt("/env/{}", name) blat(p, val, 0o644) slfree(p) }