diff options
-rw-r--r-- | src/actions.c | 17 |
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); } |