aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2025-11-27 12:35:52 -0500
committerBruce Hill <bruce@bruce-hill.com>2025-11-27 12:35:52 -0500
commit8b897851facaa177e2346e0d97fcba7411dfc0aa (patch)
treef2f3ef96a5628ec4d76c4097ef7c26a85f1d855a /src
parent31c47caa0282cbdf43361a3c0f45fff9699a8814 (diff)
Update `setenv()` to take an optional value, also bugfix for `setenv()`
returning a value.
Diffstat (limited to 'src')
-rw-r--r--src/environment.c2
-rw-r--r--src/stdlib/stdlib.c5
2 files changed, 5 insertions, 2 deletions
diff --git a/src/environment.c b/src/environment.c
index 88a15bb5..43d22c3d 100644
--- a/src/environment.c
+++ b/src/environment.c
@@ -540,7 +540,7 @@ env_t *global_env(bool source_mapping) {
{"getenv", "getenv_text", "func(name:Text -> Text?)"},
{"print", "say", "func(text:Text, newline=yes)"},
{"say", "say", "func(text:Text, newline=yes)"},
- {"setenv", "setenv_text", "func(name:Text, value:Text -> Text?)"},
+ {"setenv", "setenv_text", "func(name:Text, value:Text?)"},
{"sleep", "sleep_num", "func(seconds:Num)"},
};
diff --git a/src/stdlib/stdlib.c b/src/stdlib/stdlib.c
index 21547efe..8ec9e90b 100644
--- a/src/stdlib/stdlib.c
+++ b/src/stdlib/stdlib.c
@@ -219,7 +219,10 @@ OptionalText_t getenv_text(Text_t name) {
}
public
-void setenv_text(Text_t name, Text_t value) { setenv(Text$as_c_string(name), Text$as_c_string(value), 1); }
+void setenv_text(Text_t name, OptionalText_t value) {
+ if (value.tag == TEXT_NONE) unsetenv(Text$as_c_string(name));
+ else setenv(Text$as_c_string(name), Text$as_c_string(value), 1);
+}
typedef struct cleanup_s {
Closure_t cleanup_fn;