This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PING^3][BZ #15894][PATCH] Deduplicate setenv.c
- From: OndÅej BÃlka <neleai at seznam dot cz>
- To: libc-alpha at sourceware dot org
- Date: Tue, 5 Nov 2013 15:24:58 +0100
- Subject: Re: [PING^3][BZ #15894][PATCH] Deduplicate setenv.c
- Authentication-results: sourceware.org; auth=none
- References: <20131015093450 dot GA1459 at domone dot podge> <20131023131726 dot GB6107 at domone dot podge> <20131030153342 dot GA16867 at domone dot podge>
ping,
Changelog became
[BZ #15894]
* stdlib/setenv.c: Remove duplicate code.
On Wed, Oct 30, 2013 at 04:33:42PM +0100, OndÅej BÃlka wrote:
> ping
> On Wed, Oct 23, 2013 at 03:17:26PM +0200, OndÅej BÃlka wrote:
> > ping
> > On Tue, Oct 15, 2013 at 11:34:50AM +0200, OndÅej BÃlka wrote:
> > > Hi,
> > >
> > > In setenv.c file a logic of adding element is needlessly duplicated
> > > based on if we extend __environ or not. This can be easily fixed in
> > > following way:
> > >
> > > * stdlib/setenv.c: Remove duplicate code.
> > >
> > > diff --git a/stdlib/setenv.c b/stdlib/setenv.c
> > > index 63c995b..e4b5b5e 100644
> > > --- a/stdlib/setenv.c
> > > +++ b/stdlib/setenv.c
> > > @@ -146,82 +146,13 @@ __add_to_environ (name, value, combined, replace)
> > > UNLOCK;
> > > return -1;
> > > }
> > > -
> > > - /* 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] = NULL;
> > > new_environ[size + 1] = NULL;
> > > + ep = new_environ + size;
> > >
> > > last_environ = __environ = new_environ;
> > > }
> > > - else if (replace)
> > > + if (*ep == NULL || replace)
> > > {
> > > char *np;
> > >
> >
> > --
> >
> > pseudo-user on a pseudo-terminal
>
> --
>
> operators on strike due to broken coffee machine
--
Hot Java has gone cold