diff options
| author | Steven <burnett@posteo.de> | 2026-01-22 22:57:14 +0000 |
|---|---|---|
| committer | Steven <burnett@posteo.de> | 2026-01-22 22:57:14 +0000 |
| commit | f4cd3cd10428af1a248c3a8bfe7b99332f072fbf (patch) | |
| tree | ea17fbcc875b425738a651011b94ec41b7b2c2e1 /std | |
| parent | ed4bbfd8cf4a72fdf4a5d6cba94d537cab340356 (diff) | |
feat: New std library "env" for accessing the process environment
Diffstat (limited to 'std')
| -rw-r--r-- | std/env.zc | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/std/env.zc b/std/env.zc new file mode 100644 index 0000000..7d5fd5a --- /dev/null +++ b/std/env.zc @@ -0,0 +1,71 @@ +import "./core.zc" +import "./option.zc" +import "./string.zc" + +raw { + char *_z_env_get(char *name) { + return getenv(name); + } + + int _z_env_set(char *name, char *value, int overwrite) { + return setenv(name, value, overwrite); + } + + int _z_env_unset(char *name) { + return unsetenv(name); + } +} + +extern fn _z_env_get(name: char*) -> char*; +extern fn _z_env_set(name: char*, value: char*, overwrite: int) -> int; +extern fn _z_env_unset(name: char*) -> int; + +@derive(Eq) +enum EnvRes { + ERR, + OK, +} + +struct Env {} + +impl Env { + fn get(name: string) -> Option<string> { + var value: string = _z_env_get(name); + if (value == NULL) { + return Option<string>::None(); + } + + return Option<string>::Some(value); + } + + fn get_dup(name: string) -> Option<String> { + var value: string = _z_env_get(name); + if (value == NULL) { + return Option<String>::None(); + } + + var v = String::from(value); + var o = Option<String>::Some(v); + v.forget(); + + return o; + } + + fn set(name: string, value: string) -> EnvRes { + var ret: int = _z_env_set(name, value, 0); + + return (ret == 0) ? EnvRes::OK() : EnvRes::ERR(); + } + + fn set_overwrite(name: string, value: string) -> EnvRes { + var ret: int = _z_env_set(name, value, 1); + + return (ret == 0) ? EnvRes::OK() : EnvRes::ERR(); + } + + fn unset(name: string) -> EnvRes { + var ret: int = _z_env_unset(name); + + return (ret == 0) ? EnvRes::OK() : EnvRes::ERR(); + } +} |
