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