Re: [PATCH, maint] setup: make sure git_dir path is in a permanent buffer, getenv(3) case
- From
Kirill Smelkov <kirr@mns.spb.ru>
- Date
- Nov 12, 2010, 17:20 UTC
- Message-ID
- <20101112172028.GA3941@tugrik.mns.mnsspb.ru>
- In-Reply-To
- <20101112160332.GB15141@burratino>
On Fri, Nov 12, 2010 at 10:03:32AM -0600, Jonathan Nieder wrote:
Show 17 quoted lines
> Kirill Smelkov wrote:
>
> > static void run_service(const char **argv)
> > {
> > const char *encoding = getenv("HTTP_CONTENT_ENCODING");
> > const char *user = getenv("REMOTE_USER");
> > const char *host = getenv("REMOTE_ADDR");
> >
> >
> > etc...
> >
> >
> > To me, it's very unfortunate that subsequent getenv() could overwrite
> > previous getenv() result, but according to `man 3 getenv` all these
> > places are buggy.
>
> Right, but do we know of any platforms that work that way currently?I don't. Actually I was really surprised after reading getenv manual about that.
> We could make getenv() rotate between a few buffers on such platforms > (probably 10 or so would take care of the longest runs).
I think it would be hard to get right (is 10 enough? on which platform? this rarely happens after all...), and also why introduce special case?
Show 13 quoted lines
> > Maybe we'll need something like our own xgetenv() which will keep vars > > in some kind of hash tab so that get/put on other vars do not interfere > > with what was originally returned by xgetenv(). > > For examples that store the result like you pointed out (which store the > result from getenv), something like that would be needed if we want > them to work on platforms where putenv shifts everything. > > > Unfortunately I can't afford myself to dive into all this, so please > > choose what you like more. > > I think we ought to fix this properly in the end. But if you want a > quick workaround, maybe the vcs-svn/string_pool lib could help you.
No, I'm not in a hurry - better to fix this properly. Though personally, I've already scratched my itch here.
Thanks, Kirill