aboutsummaryrefslogtreecommitdiff
path: root/src/script
diff options
context:
space:
mode:
authorPaul Ouellette <oue.paul18@gmail.com>2019-01-26 08:12:20 -0500
committerSmallJoker <SmallJoker@users.noreply.github.com>2019-01-26 14:12:20 +0100
commitded522b2ee00b8f325b5f5fe216d67dd8a15f42a (patch)
tree4b9a80f8715c3b9d25e506b184aeab89710546e6 /src/script
parent922e6ff57ec9f07d2ff04cf010821c1ddd00831e (diff)
downloadminetest-ded522b2ee00b8f325b5f5fe216d67dd8a15f42a.tar.gz
minetest-ded522b2ee00b8f325b5f5fe216d67dd8a15f42a.tar.bz2
minetest-ded522b2ee00b8f325b5f5fe216d67dd8a15f42a.zip
Fix pkgmgr game install with RUN_IN_PLACE=0 (#8113)
Diffstat (limited to 'src/script')
-rw-r--r--src/script/lua_api/l_mainmenu.cpp27
-rw-r--r--src/script/lua_api/l_mainmenu.h7
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