mirror of
https://github.com/minetest/minetest.git
synced 2024-09-12 08:28:36 +02:00
Fix pkgmgr game install with RUN_IN_PLACE=0 (#8113)
This commit is contained in:
parent
922e6ff57e
commit
ded522b2ee
@ -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;
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user