From f4cd3cd10428af1a248c3a8bfe7b99332f072fbf Mon Sep 17 00:00:00 2001 From: Steven Date: Thu, 22 Jan 2026 22:57:14 +0000 Subject: feat: New std library "env" for accessing the process environment --- examples/process/env.zc | 60 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 examples/process/env.zc (limited to 'examples/process') diff --git a/examples/process/env.zc b/examples/process/env.zc new file mode 100644 index 0000000..8b30de3 --- /dev/null +++ b/examples/process/env.zc @@ -0,0 +1,60 @@ +//> cflags: -Ofast + +import "std/env.zc" + +fn main() -> int { + // ---- + // get: Retrieves the env-var as borrowed string (char *) (no alloc) + // --- + // @Example usage: On Linux (and some variants) PATH is already defined. + // --- + var path = Env::get("PATH"); + + if (path.is_some()) { + println "PATH is: {path.unwrap()}"; + } else { + println "PATH is not set"; + } + + // ---- + // set: Sets an env-var variable + // get_dup: Retrieves the env-var as caller-owned String() (heap alloc) + // --- + // @Example usage: In your terminal type "export HELLO=world" or use Env::set() + // --- + var res = Env::set("HELLO", "world"); + //=> check res against EnvRes::OK() + + var hello = Env::get_dup("HELLO"); + + if (hello.is_some()) { + var hello_str = hello.unwrap(); + defer hello_str.free(); + + println "HELLO is: {hello_str.c_str()}"; + } else { + println "HELLO is not set"; + } + + // ---- + // set_overwrite: Overwrites an exisiting env-var / creates it if it doesn't exist + // --- + Env::set_overwrite("HELLO", "world-overwritten"); + + var hello_now = Env::get("HELLO"); + + if (hello_now.is_some()) { + println "HELLO is now {hello_now.unwrap()}"; + } + + // ---- + // unset: Unsets an existing env-var + // --- + Env::unset("HELLO"); + + var hello_now2 = Env::get("HELLO"); + + if (hello_now2.is_none()) { + println "HELLO is now unset"; + } +} -- cgit v1.2.3 From 2a4edc7f2c9241ec7845cecadef850a1db45b3dd Mon Sep 17 00:00:00 2001 From: Steven Date: Thu, 22 Jan 2026 23:21:49 +0000 Subject: refactor: remove set_overwrite -> set now always overwrites --- docs/std/env.md | 8 -------- examples/process/env.zc | 11 ----------- std/env.zc | 6 ------ tests/std/test_env.zc | 13 +++---------- 4 files changed, 3 insertions(+), 35 deletions(-) (limited to 'examples/process') diff --git a/docs/std/env.md b/docs/std/env.md index b4ff5dd..09ece60 100644 --- a/docs/std/env.md +++ b/docs/std/env.md @@ -53,14 +53,6 @@ Sets an env-var variable fn set(name: string, value: string) -> EnvRes ``` -### set_overwrite - -Overwrites an exisiting env-var / creates it if it doesn't exist - -```zc -fn set_overwrite(name: string, value: string) -> EnvRes -``` - ### unset Unsets an existing env-var diff --git a/examples/process/env.zc b/examples/process/env.zc index 8b30de3..1506229 100644 --- a/examples/process/env.zc +++ b/examples/process/env.zc @@ -36,17 +36,6 @@ fn main() -> int { println "HELLO is not set"; } - // ---- - // set_overwrite: Overwrites an exisiting env-var / creates it if it doesn't exist - // --- - Env::set_overwrite("HELLO", "world-overwritten"); - - var hello_now = Env::get("HELLO"); - - if (hello_now.is_some()) { - println "HELLO is now {hello_now.unwrap()}"; - } - // ---- // unset: Unsets an existing env-var // --- diff --git a/std/env.zc b/std/env.zc index 7d5fd5a..7757be0 100644 --- a/std/env.zc +++ b/std/env.zc @@ -52,12 +52,6 @@ impl Env { } 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(); diff --git a/tests/std/test_env.zc b/tests/std/test_env.zc index 94a7ee0..75bba3b 100644 --- a/tests/std/test_env.zc +++ b/tests/std/test_env.zc @@ -10,23 +10,16 @@ test "test_std_env_set_and_get" { assert(env_var.unwrap() == "ok1", "env_var should be ok1"); } -test "test_std_env_set_overwrite" { +test "test_std_env_set_with_overwrite" { var res = Env::set("TEST2", "ok2"); assert(res == EnvRes::OK(), "res should be EnvRes::OK()"); - var res2 = Env::set("TEST2", "ok2-no-ovwr"); + var res2 = Env::set("TEST2", "ok2-ovwr"); assert(res2 == EnvRes::OK(), "res2 should be EnvRes::OK()"); var env_var = Env::get("TEST2"); assert(env_var.is_some(), "env_var should have a value"); - assert(env_var.unwrap() == "ok2", "env_var should be ok2"); - - var res3 = Env::set_overwrite("TEST2", "ok2-with-ovwr"); - assert(res3 == EnvRes::OK(), "res3 should be EnvRes::OK()"); - - var env_var2 = Env::get("TEST2"); - assert(env_var2.is_some(), "env_var2 should have a value"); - assert(env_var2.unwrap() == "ok2-with-ovwr", "env_var2 should be ok2-with-ovwr"); + assert(env_var.unwrap() == "ok2-ovwr", "env_var should be ok2-ovwr"); } test "test_std_env_get_dup" { -- cgit v1.2.3