From 10634f0443c478ff08daf80388198931befaa95c Mon Sep 17 00:00:00 2001 From: nOOb3167 Date: Wed, 13 Jun 2018 13:22:17 +0200 Subject: [PATCH] Make os.tempfolder work correctly for MinGW & MSVC (#7443) --- builtin/mainmenu/common.lua | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/builtin/mainmenu/common.lua b/builtin/mainmenu/common.lua index cd4903f56..cc61fe0ad 100644 --- a/builtin/mainmenu/common.lua +++ b/builtin/mainmenu/common.lua @@ -171,6 +171,23 @@ os.tempfolder = function() local filetocheck = os.tmpname() 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 backstring = filetocheck:reverse() return filetocheck:sub(0, filetocheck:len() - backstring:find(DIR_DELIM) + 1) ..