aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
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;