From ded522b2ee00b8f325b5f5fe216d67dd8a15f42a Mon Sep 17 00:00:00 2001 From: Paul Ouellette Date: Sat, 26 Jan 2019 08:12:20 -0500 Subject: [PATCH] Fix pkgmgr game install with RUN_IN_PLACE=0 (#8113) --- src/script/lua_api/l_mainmenu.cpp | 27 +++++++++++---------------- src/script/lua_api/l_mainmenu.h | 7 ++++--- 2 files changed, 15 insertions(+), 19 deletions(-) diff --git a/src/script/lua_api/l_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp index 145ff0970..9b9211593 100644 --- a/src/script/lua_api/l_mainmenu.cpp +++ b/src/script/lua_api/l_mainmenu.cpp @@ -687,7 +687,7 @@ int ModApiMainMenu::l_get_texturepath_share(lua_State *L) int ModApiMainMenu::l_create_dir(lua_State *L) { const char *path = luaL_checkstring(L, 1); - if (ModApiMainMenu::isMinetestPath(path)) { + if (ModApiMainMenu::mayModifyPath(path)) { lua_pushboolean(L, fs::CreateAllDirs(path)); return 1; } @@ -703,7 +703,7 @@ int ModApiMainMenu::l_delete_dir(lua_State *L) std::string absolute_path = fs::RemoveRelativePathComponents(path); - if (ModApiMainMenu::isMinetestPath(absolute_path)) { + if (ModApiMainMenu::mayModifyPath(absolute_path)) { lua_pushboolean(L, fs::RecursiveDelete(absolute_path)); return 1; } @@ -728,7 +728,7 @@ int ModApiMainMenu::l_copy_dir(lua_State *L) std::string absolute_destination = fs::RemoveRelativePathComponents(destination); std::string absolute_source = fs::RemoveRelativePathComponents(source); - if ((ModApiMainMenu::isMinetestPath(absolute_destination))) { + if ((ModApiMainMenu::mayModifyPath(absolute_destination))) { bool retval = fs::CopyDir(absolute_source,absolute_destination); if (retval && (!keep_source)) { @@ -750,7 +750,7 @@ int ModApiMainMenu::l_extract_zip(lua_State *L) std::string absolute_destination = fs::RemoveRelativePathComponents(destination); - if (ModApiMainMenu::isMinetestPath(absolute_destination)) { + if (ModApiMainMenu::mayModifyPath(absolute_destination)) { fs::CreateAllDirs(absolute_destination); io::IFileSystem *fs = RenderingEngine::get_filesystem(); @@ -838,28 +838,23 @@ int ModApiMainMenu::l_get_mainmenu_path(lua_State *L) } /******************************************************************************/ -bool ModApiMainMenu::isMinetestPath(std::string path) +bool ModApiMainMenu::mayModifyPath(const std::string &path) { - if (fs::PathStartsWith(path,fs::TempPath())) + if (fs::PathStartsWith(path, fs::TempPath())) return true; - /* games */ - if (fs::PathStartsWith(path,fs::RemoveRelativePathComponents(porting::path_share + DIR_DELIM + "games"))) + if (fs::PathStartsWith(path, fs::RemoveRelativePathComponents(porting::path_user + DIR_DELIM "games"))) return true; - /* mods */ - if (fs::PathStartsWith(path,fs::RemoveRelativePathComponents(porting::path_user + DIR_DELIM + "mods"))) + if (fs::PathStartsWith(path, fs::RemoveRelativePathComponents(porting::path_user + DIR_DELIM "mods"))) return true; - /* mods */ - if (fs::PathStartsWith(path,fs::RemoveRelativePathComponents(porting::path_user + DIR_DELIM + "textures"))) + if (fs::PathStartsWith(path, fs::RemoveRelativePathComponents(porting::path_user + DIR_DELIM "textures"))) return true; - /* worlds */ - if (fs::PathStartsWith(path,fs::RemoveRelativePathComponents(porting::path_user + DIR_DELIM + "worlds"))) + if (fs::PathStartsWith(path, fs::RemoveRelativePathComponents(porting::path_user + DIR_DELIM "worlds"))) return true; - return false; } @@ -895,7 +890,7 @@ int ModApiMainMenu::l_download_file(lua_State *L) //check path std::string absolute_destination = fs::RemoveRelativePathComponents(target); - if (ModApiMainMenu::isMinetestPath(absolute_destination)) { + if (ModApiMainMenu::mayModifyPath(absolute_destination)) { if (GUIEngine::downloadFile(url,absolute_destination)) { lua_pushboolean(L,true); return 1; diff --git a/src/script/lua_api/l_mainmenu.h b/src/script/lua_api/l_mainmenu.h index ae68edccf..9e7792197 100644 --- a/src/script/lua_api/l_mainmenu.h +++ b/src/script/lua_api/l_mainmenu.h @@ -53,11 +53,12 @@ private: static int getBoolData(lua_State *L, std::string name,bool& valid); /** - * check if a path is within some of minetests folders + * Checks if a path may be modified. Paths in the temp directory or the user + * games, mods, textures, or worlds directories may be modified. * @param path path to check - * @return true/false + * @return true if the path may be modified */ - static bool isMinetestPath(std::string path); + static bool mayModifyPath(const std::string &path); //api calls