Use consistent temp folder path (#10892)

This commit is contained in:
rubenwardy 2021-02-07 15:27:24 +00:00 committed by GitHub
parent 4caf156be5
commit 3a8c37181a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 24 additions and 33 deletions

@ -146,35 +146,15 @@ end
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
os.tempfolder = function() os.tempfolder = function()
if core.settings:get("TMPFolder") then local temp = core.get_temp_path()
return core.settings:get("TMPFolder") .. DIR_DELIM .. "MT_" .. math.random(0,10000) return temp .. DIR_DELIM .. "MT_" .. math.random(0, 10000)
end end
local filetocheck = os.tmpname() --------------------------------------------------------------------------------
os.remove(filetocheck) os.tmpname = function()
local path = os.tempfolder()
-- luacheck: ignore io.open(path, "w"):close()
-- https://blogs.msdn.microsoft.com/vcblog/2014/06/18/c-runtime-crt-features-fixes-and-breaking-changes-in-visual-studio-14-ctp1/ return path
-- 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) ..
randname
end end
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------

@ -85,6 +85,7 @@ core.get_video_drivers()
core.get_mapgen_names([include_hidden=false]) -> table of map generator algorithms core.get_mapgen_names([include_hidden=false]) -> table of map generator algorithms
registered in the core (possible in async calls) registered in the core (possible in async calls)
core.get_cache_path() -> path of cache core.get_cache_path() -> path of cache
core.get_temp_path() -> path of temp folder
HTTP Requests HTTP Requests

@ -461,7 +461,6 @@ void set_default_settings()
settings->setDefault("screen_h", "0"); settings->setDefault("screen_h", "0");
settings->setDefault("fullscreen", "true"); settings->setDefault("fullscreen", "true");
settings->setDefault("touchtarget", "true"); settings->setDefault("touchtarget", "true");
settings->setDefault("TMPFolder", porting::path_cache);
settings->setDefault("touchscreen_threshold","20"); settings->setDefault("touchscreen_threshold","20");
settings->setDefault("fixed_virtual_joystick", "false"); settings->setDefault("fixed_virtual_joystick", "false");
settings->setDefault("virtual_joystick_triggers_aux", "false"); settings->setDefault("virtual_joystick_triggers_aux", "false");

@ -27,9 +27,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "log.h" #include "log.h"
#include "config.h" #include "config.h"
#include "porting.h" #include "porting.h"
#ifdef __ANDROID__
#include "settings.h" // For g_settings
#endif
namespace fs namespace fs
{ {
@ -359,8 +356,9 @@ std::string TempPath()
compatible with lua's os.tmpname which under the default compatible with lua's os.tmpname which under the default
configuration hardcodes mkstemp("/tmp/lua_XXXXXX"). configuration hardcodes mkstemp("/tmp/lua_XXXXXX").
*/ */
#ifdef __ANDROID__ #ifdef __ANDROID__
return g_settings->get("TMPFolder"); return porting::path_cache;
#else #else
return DIR_DELIM "tmp"; return DIR_DELIM "tmp";
#endif #endif

@ -529,6 +529,7 @@ int ModApiMainMenu::l_get_texturepath(lua_State *L)
return 1; return 1;
} }
/******************************************************************************/
int ModApiMainMenu::l_get_texturepath_share(lua_State *L) int ModApiMainMenu::l_get_texturepath_share(lua_State *L)
{ {
std::string gamepath = fs::RemoveRelativePathComponents( std::string gamepath = fs::RemoveRelativePathComponents(
@ -537,12 +538,20 @@ int ModApiMainMenu::l_get_texturepath_share(lua_State *L)
return 1; return 1;
} }
/******************************************************************************/
int ModApiMainMenu::l_get_cache_path(lua_State *L) int ModApiMainMenu::l_get_cache_path(lua_State *L)
{ {
lua_pushstring(L, fs::RemoveRelativePathComponents(porting::path_cache).c_str()); lua_pushstring(L, fs::RemoveRelativePathComponents(porting::path_cache).c_str());
return 1; return 1;
} }
/******************************************************************************/
int ModApiMainMenu::l_get_temp_path(lua_State *L)
{
lua_pushstring(L, fs::TempPath().c_str());
return 1;
}
/******************************************************************************/ /******************************************************************************/
int ModApiMainMenu::l_create_dir(lua_State *L) { int ModApiMainMenu::l_create_dir(lua_State *L) {
const char *path = luaL_checkstring(L, 1); const char *path = luaL_checkstring(L, 1);
@ -942,6 +951,7 @@ void ModApiMainMenu::Initialize(lua_State *L, int top)
API_FCT(get_texturepath); API_FCT(get_texturepath);
API_FCT(get_texturepath_share); API_FCT(get_texturepath_share);
API_FCT(get_cache_path); API_FCT(get_cache_path);
API_FCT(get_temp_path);
API_FCT(create_dir); API_FCT(create_dir);
API_FCT(delete_dir); API_FCT(delete_dir);
API_FCT(copy_dir); API_FCT(copy_dir);
@ -975,6 +985,7 @@ void ModApiMainMenu::InitializeAsync(lua_State *L, int top)
API_FCT(get_texturepath); API_FCT(get_texturepath);
API_FCT(get_texturepath_share); API_FCT(get_texturepath_share);
API_FCT(get_cache_path); API_FCT(get_cache_path);
API_FCT(get_temp_path);
API_FCT(create_dir); API_FCT(create_dir);
API_FCT(delete_dir); API_FCT(delete_dir);
API_FCT(copy_dir); API_FCT(copy_dir);

@ -122,6 +122,8 @@ private:
static int l_get_cache_path(lua_State *L); static int l_get_cache_path(lua_State *L);
static int l_get_temp_path(lua_State *L);
static int l_create_dir(lua_State *L); static int l_create_dir(lua_State *L);
static int l_delete_dir(lua_State *L); static int l_delete_dir(lua_State *L);