Environment handling broken in /bin/sh with changes to
	t,set,put}env()
    Andrey Chernov 
    ache at nagual.pp.ru
       
    Sat Jul 14 17:03:31 UTC 2007
    
    
  
On Sat, Jul 14, 2007 at 10:25:03AM -0500, Sean C. Farley wrote:
> No.  I see it too.  Here are the changes:
> 1. __merge_environ no longer touches environ.  Only __rebuild_environ(),
>    __build_env() and __clean_env() alter environ.
> 2. watchEnviron renamed to intEnviron.
> 3. __rebuild_environ() uses intEnviron when cycling through the
>    environment; it only sets environ.
> 
> This way environ is not changed unless it has at least one name-value
> pair.
> 
> The new patch is here:
> http://www.farley.org/freebsd/tmp/setenv/clearenv/patch2
Ok.
BTW, I see no needs to duplicate code here:
        rtrnVal = __rebuild_environ(envVarsTotal);
        if (rtrnVal == -1) {
                savedErrno = errno;
                __clean_env(true);
                errno = savedErrno;
        }
        return (rtrnVal);
Failure:
        savedErrno = errno;
        __clean_env(true);
        errno = savedErrno;
        return (-1);
instead of simple:
        rtrnVal = __rebuild_environ(envVarsTotal);
        if (rtrnVal == -1)
		goto Failure;
like before in this function.
-- 
http://ache.pp.ru/
    
    
More information about the freebsd-current
mailing list