mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-19 06:44:31 +00:00
Temporarily revert the previous change because the linker has been
modified so that it will abort when the environment is bad.
This commit is contained in:
parent
84518325ab
commit
56a3273e0b
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=199987
|
@ -96,8 +96,6 @@ static int envVarsTotal = 0;
|
|||
|
||||
/* Deinitialization of new environment. */
|
||||
static void __attribute__ ((destructor)) __clean_env_destructor(void);
|
||||
/* Resetting the environ pointer will affect the env functions. */
|
||||
static int __merge_environ(void);
|
||||
|
||||
|
||||
/*
|
||||
|
@ -192,9 +190,6 @@ __findenv_environ(const char *name, size_t nameLen)
|
|||
{
|
||||
int envNdx;
|
||||
|
||||
if (environ == NULL)
|
||||
return (NULL);
|
||||
|
||||
/* Find variable within environ. */
|
||||
for (envNdx = 0; environ[envNdx] != NULL; envNdx++)
|
||||
if (strncmpeq(environ[envNdx], name, nameLen))
|
||||
|
@ -333,7 +328,6 @@ __build_env(void)
|
|||
{
|
||||
char **env;
|
||||
int activeNdx;
|
||||
int checking;
|
||||
int envNdx;
|
||||
int savedErrno;
|
||||
size_t nameLen;
|
||||
|
@ -345,23 +339,6 @@ __build_env(void)
|
|||
/* Count environment variables. */
|
||||
for (env = environ, envVarsTotal = 0; *env != NULL; env++)
|
||||
envVarsTotal++;
|
||||
/* Remove any corrupt variable entries, but do not error out. */
|
||||
checking = 0;
|
||||
while (checking < envVarsTotal) {
|
||||
if (strchr(environ[checking], '=') != NULL) {
|
||||
checking++;
|
||||
} else {
|
||||
__env_warnx(CorruptEnvValueMsg,
|
||||
environ[checking], strlen(environ[checking]));
|
||||
/*
|
||||
* Pull back all remaining entries from checking + 1
|
||||
* through envVarsTotal, including the NULL at the end.
|
||||
*/
|
||||
memmove(&environ[checking], &environ[checking + 1],
|
||||
sizeof(char *) * (envVarsTotal - checking));
|
||||
envVarsTotal--;
|
||||
}
|
||||
}
|
||||
envVarsSize = envVarsTotal * 2;
|
||||
|
||||
/* Create new environment. */
|
||||
|
@ -376,8 +353,18 @@ __build_env(void)
|
|||
strdup(environ[envVarsTotal - envNdx - 1]);
|
||||
if (envVars[envNdx].name == NULL)
|
||||
goto Failure;
|
||||
envVars[envNdx].value = strchr(envVars[envNdx].name, '=') + 1;
|
||||
envVars[envNdx].valueSize = strlen(envVars[envNdx].value);
|
||||
envVars[envNdx].value = strchr(envVars[envNdx].name, '=');
|
||||
if (envVars[envNdx].value != NULL) {
|
||||
envVars[envNdx].value++;
|
||||
envVars[envNdx].valueSize =
|
||||
strlen(envVars[envNdx].value);
|
||||
} else {
|
||||
__env_warnx(CorruptEnvValueMsg, envVars[envNdx].name,
|
||||
strlen(envVars[envNdx].name));
|
||||
errno = EFAULT;
|
||||
goto Failure;
|
||||
}
|
||||
|
||||
/*
|
||||
* Find most current version of variable to make active. This
|
||||
* will prevent multiple active variables from being created
|
||||
|
@ -439,18 +426,22 @@ getenv(const char *name)
|
|||
}
|
||||
|
||||
/*
|
||||
* If we have not already allocated memory by performing
|
||||
* write operations on the environment, avoid doing so now.
|
||||
* An empty environment (environ or its first value) regardless if
|
||||
* environ has been copied before will return a NULL.
|
||||
*
|
||||
* If the environment is not empty, find an environment variable via
|
||||
* environ if environ has not been copied via an *env() call or been
|
||||
* replaced by a running program, otherwise, use the rebuilt
|
||||
* environment.
|
||||
*/
|
||||
if (envVars == NULL)
|
||||
return (__findenv_environ(name, nameLen));
|
||||
|
||||
/* Synchronize environment. */
|
||||
if (__merge_environ() == -1)
|
||||
if (environ == NULL || environ[0] == NULL)
|
||||
return (NULL);
|
||||
|
||||
envNdx = envVarsTotal - 1;
|
||||
return (__findenv(name, nameLen, &envNdx, true));
|
||||
else if (envVars == NULL || environ != intEnviron)
|
||||
return (__findenv_environ(name, nameLen));
|
||||
else {
|
||||
envNdx = envVarsTotal - 1;
|
||||
return (__findenv(name, nameLen, &envNdx, true));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -568,7 +559,8 @@ __merge_environ(void)
|
|||
if ((equals = strchr(*env, '=')) == NULL) {
|
||||
__env_warnx(CorruptEnvValueMsg, *env,
|
||||
strlen(*env));
|
||||
continue;
|
||||
errno = EFAULT;
|
||||
return (-1);
|
||||
}
|
||||
if (__setenv(*env, equals - *env, equals + 1,
|
||||
1) == -1)
|
||||
|
|
Loading…
Reference in a new issue