Re: LuaBinaries and the RTL DLL for 5.2
[
Date Prev][
Date Next][
Thread Prev][
Thread Next]
[
Date Index]
[
Thread Index]
- Subject: Re: LuaBinaries and the RTL DLL for 5.2
- From: David Burgess <dabsoft@...>
- Date: 2010年1月17日 11:35:26 +1100
It is a non-trivial exercise to implement a reasonable os.tmpname()
(in a multi Lua instance environment) on Windows.
A list of functions that are not so good on Windows is :
os.clock()
os.getenv()
os.tempname()
io.popen()
io.tmpfile()
There have been various alternatives published on the list.
For tempname() you could try something like
l = GetTempFileName(getenv("TEMP"), "lua", 0, buf);
Note however that on most versions of win, GetTempFileName() requires
global mutex protection.
DB
DB
On 17/1/2010 10:33 AM, Ross Berteig wrote:
Sometime on 2010年1月16日, steve donovan wrote:
>BTW, I will try get the Lua 5.1 test suite working on Windows so
>that we can evaluate the latest GCC versions more thoroughly. For
>instance, whether the more aggressive optimizations are without
>issues.
I made a stab at this, but stopped after running into a strong
dependence on os.tmpname() in the very first test case invoked by
all.lua. The issue is that os.tmpname() is horribly misfunctional
on Windows, thanks to a poor implementation of tmpnam() by MS in
pretty much all versions of the C runtime libraries.
According to MS, tmpnam() returns a filename with a leading '\',
and documents that to mean that the name is approved for use in
the current directory. Exactly what part of Windows uses a name
beginning with backslash to mean "current directory" is never
specified. The effect is that code like
local f = io.open(os.tmpname(),"w")
attempts to create a file on the root of the current drive after
guaranteeing the name is unique in the current directory but not
on the root, which even if it succeeds is a bad idea.
It would probably be a good idea to fix this in the os library
for Windows builds. Replacing tmpnam() with something that uses
the TMP or TEMP environment variables is probably superior, but I
haven't taken the time to create a better solution.
The generated name will also include a dot, which seems to
interact badly with its usage in the test suite as a possible
module name passed to either require or to the -l option on the
lua command line.
Ross Berteig Ross@CheshireEng.com
Cheshire Engineering Corp. http://www.CheshireEng.com/
+1 626 303 1602
+1 626 351 1590 FAX