From 27d5cc033df63b96e72dc3c8708c2e441278bc9f Mon Sep 17 00:00:00 2001 From: Jon Trulson Date: Thu, 16 Aug 2012 18:26:50 -0600 Subject: [PATCH] DtSvc:EnvControl: Use more modern and less dangerous methods of manipulating the env. This should work for both linux and the BSD's... It should hopefully solve the corrupted environment errors Marcin sees on fbsd 9 amd64. --- cde/lib/DtSvc/DtUtil2/EnvControl.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/cde/lib/DtSvc/DtUtil2/EnvControl.c b/cde/lib/DtSvc/DtUtil2/EnvControl.c index 20358f0f6..bf046fc65 100644 --- a/cde/lib/DtSvc/DtUtil2/EnvControl.c +++ b/cde/lib/DtSvc/DtUtil2/EnvControl.c @@ -424,6 +424,10 @@ _DtEnvControl( _postDtEnvironment.binPath = XtMalloc(bytes_needed); #ifdef sun if (ptr = strstr(tempString, "/usr/openwin/bin")) +#elif defined(CSRG_BASED) + if (ptr = strstr(tempString, "/usr/X11R6/bin")) +#elif defined(linux) + if (ptr = strstr(tempString, "/usr/bin")) #else if (ptr = strstr(tempString, "/usr/bin/X11")) #endif @@ -817,6 +821,10 @@ static void _EnvAdd { _DtSvcProcessLock(); if (envBitVector & bv_flag) { +#if defined(CSRG_BASED) || defined(linux) + setenv(envVar, envVarSetting + strlen(envVar) + 1, 1); +#else + register int i; size_t envVarLen = strlen(envVar); char *envPtr = NULL; @@ -850,6 +858,7 @@ static void _EnvAdd /* This should never happen */ putenv(strdup(envVarSetting)); } +#endif /* linux || CSRG_BASED */ } else putenv(strdup(envVarSetting)); @@ -919,6 +928,16 @@ _DtEnvRemove( && ( p[len] == '=' ) && !strncmp(p, str, len)) { +#if defined(linux) || defined(CSRG_BASED) + /* JET - 2/19/99 + It seems much safer to let libc worry about this + rather than try to do it ourselves. + */ + + if (str) + unsetenv(str); +#else + freeMe = pEnviron2[index]; /* just move the last one into the gap - any @@ -930,6 +949,7 @@ _DtEnvRemove( pEnviron2[count - 1] = NULL; XtFree (freeMe); +#endif /* linux || CSRG_BASED */ return(0); } pEnviron++;