This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PING^4][BZ #15894][PATCH] Deduplicate setenv.c


ping
On Tue, Nov 05, 2013 at 03:24:58PM +0100, OndÅej BÃlka wrote:
> 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

-- 

The electrician didn't know what the yellow cable was so he yanked the ethernet out.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]