(__add_to_environ): Don't let the temporary copies of the variables accumulate on the stack.
This commit is contained in:
parent
ada24e7680
commit
3504e5a65c
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (C) 1992,95,96,97,98,99,2000,2001 Free Software Foundation, Inc.
|
/* Copyright (C) 1992,1995-2001,2004 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
|
@ -134,12 +134,9 @@ __add_to_environ (name, value, combined, replace)
|
||||||
++size;
|
++size;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ep == NULL || *ep == NULL)
|
if (ep == NULL || __builtin_expect (*ep == NULL, 1))
|
||||||
{
|
{
|
||||||
char **new_environ;
|
char **new_environ;
|
||||||
#ifdef USE_TSEARCH
|
|
||||||
char *new_value;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* We allocated this space; we can extend it. */
|
/* We allocated this space; we can extend it. */
|
||||||
new_environ = (char **) realloc (last_environ,
|
new_environ = (char **) realloc (last_environ,
|
||||||
|
@ -159,7 +156,11 @@ __add_to_environ (name, value, combined, replace)
|
||||||
{
|
{
|
||||||
/* See whether the value is already known. */
|
/* See whether the value is already known. */
|
||||||
#ifdef USE_TSEARCH
|
#ifdef USE_TSEARCH
|
||||||
new_value = (char *) alloca (namelen + 1 + vallen);
|
# ifdef __GNUC__
|
||||||
|
char new_value[namelen + 1 + vallen];
|
||||||
|
# else
|
||||||
|
char *new_value = (char *) alloca (namelen + 1 + vallen);
|
||||||
|
# endif
|
||||||
# ifdef _LIBC
|
# ifdef _LIBC
|
||||||
__mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1),
|
__mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1),
|
||||||
value, vallen);
|
value, vallen);
|
||||||
|
@ -170,11 +171,11 @@ __add_to_environ (name, value, combined, replace)
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
new_environ[size] = KNOWN_VALUE (new_value);
|
new_environ[size] = KNOWN_VALUE (new_value);
|
||||||
if (new_environ[size] == NULL)
|
if (__builtin_expect (new_environ[size] == NULL, 1))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
new_environ[size] = (char *) malloc (namelen + 1 + vallen);
|
new_environ[size] = (char *) malloc (namelen + 1 + vallen);
|
||||||
if (new_environ[size] == NULL)
|
if (__builtin_expect (new_environ[size] == NULL, 0))
|
||||||
{
|
{
|
||||||
__set_errno (ENOMEM);
|
__set_errno (ENOMEM);
|
||||||
UNLOCK;
|
UNLOCK;
|
||||||
|
@ -213,7 +214,11 @@ __add_to_environ (name, value, combined, replace)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#ifdef USE_TSEARCH
|
#ifdef USE_TSEARCH
|
||||||
char *new_value = alloca (namelen + 1 + vallen);
|
# ifdef __GNUC__
|
||||||
|
char new_value[namelen + 1 + vallen];
|
||||||
|
# else
|
||||||
|
char *new_value = (char *) alloca (namelen + 1 + vallen);
|
||||||
|
# endif
|
||||||
# ifdef _LIBC
|
# ifdef _LIBC
|
||||||
__mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1),
|
__mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1),
|
||||||
value, vallen);
|
value, vallen);
|
||||||
|
@ -224,11 +229,11 @@ __add_to_environ (name, value, combined, replace)
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
np = KNOWN_VALUE (new_value);
|
np = KNOWN_VALUE (new_value);
|
||||||
if (np == NULL)
|
if (__builtin_expect (np == NULL, 1))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
np = malloc (namelen + 1 + vallen);
|
np = malloc (namelen + 1 + vallen);
|
||||||
if (np == NULL)
|
if (__builtin_expect (np == NULL, 0))
|
||||||
{
|
{
|
||||||
UNLOCK;
|
UNLOCK;
|
||||||
return -1;
|
return -1;
|
||||||
|
|
Loading…
Reference in New Issue