* clearenv() did not return anything, but should have returned 0 for success.

* sCopied wasn't needed anymore due to the sManagedEnviron variable.
* Minor cleanup, added a description to copy_environ_to_heap_if_needed().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26722 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2008-08-01 17:58:04 +00:00
parent 7a1fd4cbf8
commit ee091fc0cb
+15 -7
View File
@@ -26,7 +26,6 @@
// TODO: Use benaphore!
static sem_id sEnvLock;
static char **sManagedEnviron;
static bool sCopied;
char **environ = NULL;
@@ -82,14 +81,14 @@ static int32
add_variable(void)
{
int32 count = count_variables() + 1;
char **newEnv = realloc(environ, (count + 1) * sizeof(char *));
if (newEnv == NULL)
char **newEnviron = realloc(environ, (count + 1) * sizeof(char *));
if (newEnviron == NULL)
return B_NO_MEMORY;
newEnv[count] = NULL;
newEnviron[count] = NULL;
// null terminate the array
environ = sManagedEnviron = newEnv;
environ = sManagedEnviron = newEnviron;
return count - 1;
}
@@ -115,12 +114,20 @@ find_variable(const char *name, int32 length, int32 *_index)
}
/*! Copies the environment from its current location into a heap managed
environment, if it's not already there.
This is needed whenever the environment is changed, that is, when one
of the POSIX *env() functions is called, and we either used the environment
provided by the kernel, or by an application that changed \c environ
directly.
*/
static status_t
copy_environ_to_heap_if_needed(void)
{
int32 i = 0;
if (sCopied && environ == sManagedEnviron)
if (environ == sManagedEnviron)
return B_OK;
if (sManagedEnviron != NULL) {
@@ -143,7 +150,6 @@ copy_environ_to_heap_if_needed(void)
// null terminate the array
environ = sManagedEnviron;
sCopied = true;
return B_OK;
}
@@ -222,6 +228,8 @@ clearenv(void)
environ = NULL;
unlock_variables();
return 0;
}