Make os.tempfolder work correctly for MinGW & MSVC (#7443)

This commit is contained in:
nOOb3167 2018-06-13 13:22:17 +02:00 committed by Nils Dagsson Moskopp
parent 3c4bc11a38
commit 4f676807e2
Signed by: erle
GPG Key ID: A3BC671C35191080
1 changed files with 17 additions and 0 deletions

View File

@ -171,6 +171,23 @@ os.tempfolder = function()
local filetocheck = os.tmpname() local filetocheck = os.tmpname()
os.remove(filetocheck) os.remove(filetocheck)
-- https://blogs.msdn.microsoft.com/vcblog/2014/06/18/c-runtime-crt-features-fixes-and-breaking-changes-in-visual-studio-14-ctp1/
-- The C runtime (CRT) function called by os.tmpname is tmpnam.
-- Microsofts tmpnam implementation in older CRT / MSVC releases is defective.
-- tmpnam return values starting with a backslash characterize this behavior.
-- https://sourceforge.net/p/mingw-w64/bugs/555/
-- MinGW tmpnam implementation is forwarded to the CRT directly.
-- https://sourceforge.net/p/mingw-w64/discussion/723797/thread/55520785/
-- MinGW links to an older CRT release (msvcrt.dll).
-- Due to legal concerns MinGW will never use a newer CRT.
--
-- Make use of TEMP to compose the temporary filename if an old
-- style tmpnam return value is detected.
if filetocheck:sub(1, 1) == "\\" then
local tempfolder = os.getenv("TEMP")
return tempfolder .. filetocheck
end
local randname = "MTTempModFolder_" .. math.random(0,10000) local randname = "MTTempModFolder_" .. math.random(0,10000)
local backstring = filetocheck:reverse() local backstring = filetocheck:reverse()
return filetocheck:sub(0, filetocheck:len() - backstring:find(DIR_DELIM) + 1) .. return filetocheck:sub(0, filetocheck:len() - backstring:find(DIR_DELIM) + 1) ..