diff --git a/include/libbb.h b/include/libbb.h index 5e962fdb6..58719a85b 100644 --- a/include/libbb.h +++ b/include/libbb.h @@ -408,6 +408,7 @@ void xchdir(const char *path) FAST_FUNC; void xchroot(const char *path) FAST_FUNC; void xsetenv(const char *key, const char *value) FAST_FUNC; void bb_unsetenv(const char *key) FAST_FUNC; +void bb_unsetenv_and_free(char *key) FAST_FUNC; void xunlink(const char *pathname) FAST_FUNC; void xstat(const char *pathname, struct stat *buf) FAST_FUNC; int xopen(const char *pathname, int flags) FAST_FUNC; diff --git a/libbb/xfuncs_printf.c b/libbb/xfuncs_printf.c index 03aeaaa38..f021493b1 100644 --- a/libbb/xfuncs_printf.c +++ b/libbb/xfuncs_printf.c @@ -323,6 +323,11 @@ void FAST_FUNC bb_unsetenv(const char *var) free(tp); } +void FAST_FUNC bb_unsetenv_and_free(char *var) +{ + bb_unsetenv(var); + free(var); +} // Die with an error message if we can't set gid. (Because resource limits may // limit this user to a given number of processes, and if that fills up the diff --git a/miscutils/crond.c b/miscutils/crond.c index f51159233..4a3103cb9 100644 --- a/miscutils/crond.c +++ b/miscutils/crond.c @@ -264,8 +264,7 @@ static void safe_setenv(char **pvar_val, const char *var, const char *val) char *var_val = *pvar_val; if (var_val) { - bb_unsetenv(var_val); - free(var_val); + bb_unsetenv_and_free(var_val); } *pvar_val = xasprintf("%s=%s", var, val); putenv(*pvar_val); diff --git a/networking/tcpudp.c b/networking/tcpudp.c index 42845df0e..b32fad624 100644 --- a/networking/tcpudp.c +++ b/networking/tcpudp.c @@ -85,8 +85,7 @@ static void undo_xsetenv(void) char **pp = env_cur = &env_var[0]; while (*pp) { char *var = *pp; - bb_unsetenv(var); - free(var); + bb_unsetenv_and_free(var); *pp++ = NULL; } } diff --git a/networking/udhcp/dhcpc.c b/networking/udhcp/dhcpc.c index c2b21c695..de1b79844 100644 --- a/networking/udhcp/dhcpc.c +++ b/networking/udhcp/dhcpc.c @@ -327,8 +327,7 @@ static void udhcp_run_script(struct dhcp_packet *packet, const char *name) for (curr = envp; *curr; curr++) { log2(" %s", *curr); - bb_unsetenv(*curr); - free(*curr); + bb_unsetenv_and_free(*curr); } free(envp); } diff --git a/util-linux/mdev.c b/util-linux/mdev.c index 217075660..b4042c07e 100644 --- a/util-linux/mdev.c +++ b/util-linux/mdev.c @@ -374,10 +374,8 @@ static void make_device(char *path, int delete) putenv(s1); if (system(command) == -1) bb_perror_msg("can't run '%s'", command); - unsetenv("SUBSYSTEM"); - free(s1); - unsetenv("MDEV"); - free(s); + bb_unsetenv_and_free(s1); + bb_unsetenv_and_free(s); free(command); }