Skip to content

Commit

Permalink
Fix pkgmgr game install with RUN_IN_PLACE=0 (#8113)
Browse files Browse the repository at this point in the history
  • Loading branch information
p-ouellette authored and SmallJoker committed Jan 26, 2019
1 parent 922e6ff commit ded522b
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 19 deletions.
27 changes: 11 additions & 16 deletions src/script/lua_api/l_mainmenu.cpp
Expand Up @@ -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;
}
Expand All @@ -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;
}
Expand All @@ -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)) {
Expand All @@ -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();
Expand Down Expand Up @@ -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;
}

Expand Down Expand Up @@ -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;
Expand Down
7 changes: 4 additions & 3 deletions src/script/lua_api/l_mainmenu.h
Expand Up @@ -53,11 +53,12 @@ class ModApiMainMenu: public ModApiBase
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

Expand Down

0 comments on commit ded522b

Please sign in to comment.