Subject: Re: Use putenv+unsetenv instead of modifying environ directly

From: Eli Zaretskii <[email-masked]>
Date: Sat, 08 Dec 2012 20:31:18 +0200

> Date: Sat, 08 Dec 2012 09:20:57 -0800
> From: Paul Eggert <[email-masked]>
> CC: [email-masked], [email-masked]
> 
> On 12/08/2012 03:42 AM, Eli Zaretskii wrote:
> > Shouldn't we refrain from signaling memory_full when errno is EINVAL?
> > I'd suggest an eassert in that case.  memory_full will emit a
> > misleading diagnostic.
> 
> errno cannot be EINVAL, at least not on a POSIXish host:
> all strings are allowed as arguments to putenv.

What about NULL pointers?  Or strings without a '='?  IMO, it's silly
to rely on unspecified behavior, but suit yourself.

> I did see a minor problem in the w32.c implementation of unsetenv:
> 
>   /* MS docs says an environment variable cannot be longer than 32K.  */
>   if (name_len > 32767)
>     {
>       errno = ENOMEM;
>       return -1;
>     }
> 
> unsetenv should return 0 in that case, not -1, since
> the variable cannot possibly be in the environment.

Right, I fixed that.