std/env.zc
Rama main · réplica de lectura del repositorio original.
import "./core.zc"
import "./option.zc"
import "./string.zc"
import "sys/env.zc"
// Cross-platform environment variable handling
extern fn _z_setenv(name: const char*, value: const char*, overwrite: int) -> int;
extern fn _z_unsetenv(name: const char*) -> int;
@derive(Eq)
enum EnvRes {
ERR,
OK,
}
struct Env {}
impl Env {
/// Returns the value of an environment variable, or `None`.
fn get(name: string) -> Option<string> {
let value: string = getenv(name);
if (value == NULL) {
return Option<string>::None();
}
return Option<string>::Some(value);
}
/// Returns an owned copy of an environment variable value.
fn get_dup(name: string) -> Option<String> {
let value: string = getenv(name);
if (value == NULL) {
return Option<String>::None();
}
let v = String::from(value);
let o = Option<String>::Some(v);
v.forget();
return o;
}
/// Sets an environment variable.
fn set(name: string, value: string) -> EnvRes {
let ret: int = _z_setenv(name, value, 1);
if (ret == 0) {
return EnvRes::OK();
}
return EnvRes::ERR();
}
/// Removes an environment variable.
fn unset(name: string) -> EnvRes {
let ret: int = _z_unsetenv(name);
return (ret == 0) ? EnvRes::OK() : EnvRes::ERR();
}
}