summaryrefslogtreecommitdiffstats
path: root/sysif.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysif.c')
-rw-r--r--sysif.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/sysif.c b/sysif.c
index 3b8341cc..d0a06ca0 100644
--- a/sysif.c
+++ b/sysif.c
@@ -703,8 +703,12 @@ val getenv_wrap(val name)
static val setenv_wrap(val name, val value, val overwrite)
{
char *nameu8 = utf8_dup_to(c_str(name));
- char *valu8 = utf8_dup_to(c_str(value));
- setenv(nameu8, valu8, default_arg(overwrite, t) != nil);
+ char *valu8 = value ? utf8_dup_to(c_str(value)) : 0;
+ int ovw = default_arg(overwrite, t) != nil;
+ if (valu8)
+ setenv(nameu8, valu8, ovw);
+ else if (ovw)
+ unsetenv(nameu8);
free(valu8);
free(nameu8);
return value;