mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-21 20:40:05 +00:00
Deduplicate setenv.
Setenv contained a code path that was redundant as it could be handled in general case.
This commit is contained in:
parent
bdfe308a16
commit
f3d338c9f3
@ -1,3 +1,8 @@
|
|||||||
|
2014-02-10 Ondřej Bílka <neleai@seznam.cz>
|
||||||
|
|
||||||
|
[BZ #15894]
|
||||||
|
* stdlib/setenv.c (__add_to_environ): Remove duplicate code.
|
||||||
|
|
||||||
2014-02-10 Ondřej Bílka <neleai@seznam.cz>
|
2014-02-10 Ondřej Bílka <neleai@seznam.cz>
|
||||||
|
|
||||||
* malloc/arena.c (grow_heap, get_free_list, reused_arena,
|
* malloc/arena.c (grow_heap, get_free_list, reused_arena,
|
||||||
|
2
NEWS
2
NEWS
@ -9,6 +9,8 @@ Version 2.20
|
|||||||
|
|
||||||
* The following bugs are resolved with this release:
|
* The following bugs are resolved with this release:
|
||||||
|
|
||||||
|
15894.
|
||||||
|
|
||||||
* The am33 port, which had not worked for several years, has been removed
|
* The am33 port, which had not worked for several years, has been removed
|
||||||
from ports.
|
from ports.
|
||||||
|
|
||||||
|
@ -146,82 +146,13 @@ __add_to_environ (name, value, combined, replace)
|
|||||||
UNLOCK;
|
UNLOCK;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
new_environ[size] = NULL;
|
||||||
/* If the whole entry is given add it. */
|
|
||||||
if (combined != NULL)
|
|
||||||
/* We must not add the string to the search tree since it belongs
|
|
||||||
to the user. */
|
|
||||||
new_environ[size] = (char *) combined;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* See whether the value is already known. */
|
|
||||||
#ifdef USE_TSEARCH
|
|
||||||
char *new_value;
|
|
||||||
int use_alloca = __libc_use_alloca (varlen);
|
|
||||||
if (__builtin_expect (use_alloca, 1))
|
|
||||||
new_value = (char *) alloca (varlen);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
new_value = malloc (varlen);
|
|
||||||
if (new_value == NULL)
|
|
||||||
{
|
|
||||||
UNLOCK;
|
|
||||||
if (last_environ == NULL)
|
|
||||||
free (new_environ);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
# ifdef _LIBC
|
|
||||||
__mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1),
|
|
||||||
value, vallen);
|
|
||||||
# else
|
|
||||||
memcpy (new_value, name, namelen);
|
|
||||||
new_value[namelen] = '=';
|
|
||||||
memcpy (&new_value[namelen + 1], value, vallen);
|
|
||||||
# endif
|
|
||||||
|
|
||||||
new_environ[size] = KNOWN_VALUE (new_value);
|
|
||||||
if (__builtin_expect (new_environ[size] == NULL, 1))
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
#ifdef USE_TSEARCH
|
|
||||||
if (__builtin_expect (! use_alloca, 0))
|
|
||||||
new_environ[size] = new_value;
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
new_environ[size] = (char *) malloc (varlen);
|
|
||||||
if (__builtin_expect (new_environ[size] == NULL, 0))
|
|
||||||
{
|
|
||||||
UNLOCK;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef USE_TSEARCH
|
|
||||||
memcpy (new_environ[size], new_value, varlen);
|
|
||||||
#else
|
|
||||||
memcpy (new_environ[size], name, namelen);
|
|
||||||
new_environ[size][namelen] = '=';
|
|
||||||
memcpy (&new_environ[size][namelen + 1], value, vallen);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/* And save the value now. We cannot do this when we remove
|
|
||||||
the string since then we cannot decide whether it is a
|
|
||||||
user string or not. */
|
|
||||||
STORE_VALUE (new_environ[size]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (__environ != last_environ)
|
|
||||||
memcpy ((char *) new_environ, (char *) __environ,
|
|
||||||
size * sizeof (char *));
|
|
||||||
|
|
||||||
new_environ[size + 1] = NULL;
|
new_environ[size + 1] = NULL;
|
||||||
|
ep = new_environ + size;
|
||||||
|
|
||||||
last_environ = __environ = new_environ;
|
last_environ = __environ = new_environ;
|
||||||
}
|
}
|
||||||
else if (replace)
|
if (*ep == NULL || replace)
|
||||||
{
|
{
|
||||||
char *np;
|
char *np;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user