summaryrefslogtreecommitdiff
path: root/std/env.zc
diff options
context:
space:
mode:
authorZuhaitz <zuhaitz.zechhub@gmail.com>2026-01-22 23:30:21 +0000
committerGitHub <noreply@github.com>2026-01-22 23:30:21 +0000
commit3a4a72a38675893c3a1854d05c72b957a6bd9364 (patch)
tree91c79a71830c72f8cedfa2b051e4bab4037dc5a4 /std/env.zc
parent03df9c337355dc45a14e2c2fbe3276dfe890c68d (diff)
parent2a4edc7f2c9241ec7845cecadef850a1db45b3dd (diff)
Merge pull request #97 from Burnett01/feat/std-env-for-environment-variables
feat: New std library "env" for accessing the process environment
Diffstat (limited to 'std/env.zc')
-rw-r--r--std/env.zc65
1 files changed, 65 insertions, 0 deletions
diff --git a/std/env.zc b/std/env.zc
new file mode 100644
index 0000000..7757be0
--- /dev/null
+++ b/std/env.zc
@@ -0,0 +1,65 @@
+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, 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();
+ }
+}