On Fri, Nov 12, 2010 at 10:03:32AM -0600, Jonathan Nieder wrote: > 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? > > 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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html