From: Timo Sirainen Date: Mon, 25 Oct 2010 16:22:40 +0000 (+0100) Subject: lib-master: Code cleanup for master_service_env_clean() X-Git-Tag: 2.0.7~54 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3eeaad7297f63f643ebb3fb2a0f7a03b20ffc120;p=thirdparty%2Fdovecot%2Fcore.git lib-master: Code cleanup for master_service_env_clean() --- diff --git a/src/lib-master/master-service.c b/src/lib-master/master-service.c index b0d5d084b1..cc0376c2f7 100644 --- a/src/lib-master/master-service.c +++ b/src/lib-master/master-service.c @@ -393,32 +393,38 @@ void master_service_init_finish(struct master_service *service) void master_service_env_clean(bool preserve_home) { - const char *user, *tz, *home; + static const char *preserve_envs[] = { + "HOME", /* keep as the first element */ + "USER", + "TZ", #ifdef DEBUG - bool gdb = getenv("GDB") != NULL; + "GDB", #endif + NULL + }; + ARRAY_TYPE(const_string) envs; + const char *value, *const *envp; + unsigned int i; + + t_array_init(&envs, N_ELEMENTS(preserve_envs)); + i = preserve_home ? 0 : 1; + for (; preserve_envs[i] != NULL; i++) { + const char *key = preserve_envs[i]; - user = getenv("USER"); - if (user != NULL) - user = t_strconcat("USER=", user, NULL); - tz = getenv("TZ"); - if (tz != NULL) - tz = t_strconcat("TZ=", tz, NULL); - home = preserve_home ? getenv("HOME") : NULL; - if (home != NULL) - home = t_strconcat("HOME=", home, NULL); + value = getenv(key); + if (value != NULL) { + value = t_strconcat(key, "=", value, NULL); + array_append(&envs, &value, 1); + } + } /* Note that if the original environment was set with env_put(), the environment strings will be invalid after env_clean(). That's why we t_strconcat() them above. */ env_clean(); - if (user != NULL) env_put(user); - if (tz != NULL) env_put(tz); - if (home != NULL) env_put(home); -#ifdef DEBUG - if (gdb) env_put("GDB=1"); -#endif + array_foreach(&envs, envp) + env_put(*envp); } void master_service_set_client_limit(struct master_service *service,