summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/actions.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/actions.c b/src/actions.c
index bf381c8..259ae68 100644
--- a/src/actions.c
+++ b/src/actions.c
@@ -4190,15 +4190,16 @@ cmd_chdir (int interactive UNUSED, struct cmdarg **args)
cmdret *
cmd_unsetenv (int interactive UNUSED, struct cmdarg **args)
{
- struct sbuf *s;
+ /* Remove all instances of the env. var. It is assumed a good idea to use
+ putenv() for all manipulation of environment variables, in order to let it
+ handle memory management. On OpenBSD unsetting variables using putenv() is
+ not possible. */
+#ifdef __OpenBSD__
+ unsetenv (ARG_STRING(0));
+#else
+ putenv (ARG_STRING(0));
+#endif
- /* Remove all instances of the env. var. We must add an '=' for it
- to work on OpenBSD. */
- s = sbuf_new(0);
- sbuf_copy (s, ARG_STRING(0));
- sbuf_concat (s, "=");
- putenv (sbuf_get(s));
- sbuf_free (s);
return cmdret_new (RET_SUCCESS, NULL);
}