changeset 7806:5ae1c7c4edcf HEAD

env_clean(): Try yet another way that appears to work better.
author Timo Sirainen <tss@iki.fi>
date Tue, 10 Jun 2008 07:27:19 +0300
parents d440b7cad709
children 8704bd29617b
files src/lib/env-util.c
diffstat 1 files changed, 7 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib/env-util.c	Mon Jun 09 22:02:02 2008 +0300
+++ b/src/lib/env-util.c	Tue Jun 10 07:27:19 2008 +0300
@@ -24,13 +24,15 @@
 		i_fatal("clearenv() failed");
 #else
 	extern char **environ;
+	static char *emptyenv[1] = { NULL };
 
-	/* Try to clear the environment. It should always be non-NULL, but
-	   apparently it's not on some ancient OSes (Ultrix), so just keep
-	   the check. The clearing also fails on FreeBSD 7.0 (currently). */
-	if (environ != NULL)
-		*environ = NULL;
+	/* Try to clear the environment.
 
+	   a) environ = NULL crashes on OS X.
+	   b) *environ = NULL doesn't work on FreeBSD 7.0.
+	   c) environ = emptyenv appears to work everywhere.
+	*/
+	environ = emptyenv;
 #endif
 	/* don't clear the env_pool, otherwise the environment would get
 	   corrupted if we failed to clear it. */