[Dev-luatex] Rationale for using putenv?

David Kastrup dak at gnu.org
Mon Apr 2 11:17:25 CEST 2007

Taco Hoekwater <taco at elvenkind.com> writes:

> Hi David,
>> b) don't bother about the leak and use setenv instead.
>> Option b) would be somewhat more portable, I believe. 
> Rationale: it is not more portable, because win32 doesn't
> have it (and Solaris is unknown).

Great.  The posixified manual page for "setenv" says this on Ubuntu:


	Unanticipated  results  may occur  if  setenv() changes  the
	external  variable environ. In  particular, if  the optional
	envp argument to  main() is present, it is  not changed, and
	thus may  point to an  obsolete copy of the  environment (as
	may  any other  copy of  environ). However,  other  than the
	aforementioned     restriction,     the    developers     of
	IEEE Std 1003.1-2001 intended that the traditional method of
	walking  through  the  environment  by way  of  the  environ
	pointer must be supported.

	It  was decided  that setenv()  should be  required  by this
	revision   because   it  addresses   a   piece  of   missing
	functionality, and  does not impose a  significant burden on
	the implementor.

	There  was considerable debate  as to  whether the  System V
	putenv()  function or  the BSD  setenv() function  should be
	required as a mandatory function.  The setenv() function was
	chosen  because  it  permitted  the  implementation  of  the
	unsetenv()  function   to  delete  environmental  variables,
	without  specifying an  additional  interface. The  putenv()
	function is available as an XSI extension.

So it would appear that Posix chose to standardize one interface, and
win32 picked another (the term "standardize" does not apply here

Anyway, option a) presumably also would require to place the table
keeping score of environment variables into Lua context 0, in order to
make sure that it remains available until LuaTeX exits.

David Kastrup

More information about the dev-luatex mailing list