diff options
author | Denis Vlasenko | 2008-12-30 05:05:31 +0000 |
---|---|---|
committer | Denis Vlasenko | 2008-12-30 05:05:31 +0000 |
commit | 76ddc2e3e4837d0557fb6626394f87648e5f8c3b (patch) | |
tree | f545fe36c1ebc20c743ab28bc0df2b0f1d28b59d /shell/hush.c | |
parent | d6e8f9450cf055f0abfa424c5aa9e5a7c30d6593 (diff) | |
download | busybox-76ddc2e3e4837d0557fb6626394f87648e5f8c3b.zip busybox-76ddc2e3e4837d0557fb6626394f87648e5f8c3b.tar.gz |
libbb: add bb_unsetenv (taken from hush).
udhcpc: stop filtering environment passed to the script.
crond: fix uncovered potential bug (failing unsetenv)
mdev: fix uncovered potential bug (failing unsetenv)
tcp, udpsvd: fix uncovered potential bug (failing unsetenv)
function old new delta
safe_setenv - 58 +58
bb_unsetenv - 55 +55
builtin_unset 139 138 -1
tcpudpsvd_main 1843 1830 -13
free_strings_and_unsetenv 87 53 -34
udhcp_run_script 1186 1133 -53
safe_setenv4 62 - -62
------------------------------------------------------------------------------
(add/remove: 2/1 grow/shrink: 0/4 up/down: 113/-163) Total: -50 bytes
Diffstat (limited to 'shell/hush.c')
-rw-r--r-- | shell/hush.c | 14 |
1 files changed, 3 insertions, 11 deletions
diff --git a/shell/hush.c b/shell/hush.c index eafcbb4..3b87855 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -730,16 +730,8 @@ static void free_strings_and_unsetenv(char **strings, int unset) v = strings; while (*v) { if (unset) { - char *copy; - /* *strchrnul(*v, '=') = '\0'; -- BAD - * In case *v was putenv'ed, we can't - * unsetenv(*v) after taking out '=': - * it won't work, env is modified by taking out! - * horror :( */ - copy = xstrndup(*v, strchrnul(*v, '=') - *v); - debug_printf_env("unsetenv '%s'\n", copy); - unsetenv(copy); - free(copy); + debug_printf_env("unsetenv '%s'\n", *v); + bb_unsetenv(*v); } free(*v++); } @@ -2937,7 +2929,7 @@ static void unset_local_var(const char *name) * is ro, and we cannot reach this code on the 1st pass */ prev->next = cur->next; debug_printf_env("%s: unsetenv '%s'\n", __func__, cur->varstr); - unsetenv(cur->varstr); + bb_unsetenv(cur->varstr); if (!cur->max_len) free(cur->varstr); free(cur); |