On Fri, Jul 13, 2007 at 07:08:37PM -0500, Sean C. Farley wrote: > different. Are you saying that the addresses should not change for > environ, environ[0-1] or all? I try to say that *env() functions should avoid to change memory they not "own" when it is possible and feel free to change the memory they "own". What standard says is that initial copying all environ to the internal structure and changing it afterwards (exluding putenv case) is the right thing (because *env() functions "owns" that memory). To avoid even things like nenv[0] = "PATH=/bin"; setenv("PATH", "/bin", 1); fails, better way is to strdup() (i.e. copying) every string from the original environ and you already do that initially in build_env() but not do the safe way in previous merge_environ(). BTW, I find that code in build_env() very suspicious: if (environ[0] == NULL) goto SaveEnviron; ... SaveEnviron: origEnviron = environ; environ = NULL; if (envVarsTotal > 0) { ... } else rtrnVal = 0; return (rtrnVal); It ends up with environ = NULL; because envVarsTotal initialized to 0 i.e. makes from "environ[0] == NULL" case "environ == NULL" case which is different thing. -- http://ache.pp.ru/Received on Fri Jul 13 2007 - 22:41:18 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:14 UTC