From fd5eaae2babb322f8a3e2acab55a12e218814c8e Mon Sep 17 00:00:00 2001 From: David Thompson Date: Sat, 6 Sep 2014 13:21:46 -0400 Subject: Search for subgames using $MINETEST_SUBGAME_PATH. --- src/subgame.cpp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'src') diff --git a/src/subgame.cpp b/src/subgame.cpp index f2465c93e..e86655bc1 100644 --- a/src/subgame.cpp +++ b/src/subgame.cpp @@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "filesys.h" #include "settings.h" #include "log.h" +#include "strfnd.h" #ifndef SERVER #include "tile.h" // getImagePath #endif @@ -59,6 +60,17 @@ struct GameFindPath {} }; +Strfnd getSubgamePathEnv() { + std::string sp; + char *subgame_path = getenv("MINETEST_SUBGAME_PATH"); + + if(subgame_path) { + sp = std::string(subgame_path); + } + + return Strfnd(sp); +} + SubgameSpec findSubgame(const std::string &id) { if(id == "") @@ -66,6 +78,17 @@ SubgameSpec findSubgame(const std::string &id) std::string share = porting::path_share; std::string user = porting::path_user; std::vector find_paths; + + Strfnd search_paths = getSubgamePathEnv(); + + while(!search_paths.atend()) { + std::string path = search_paths.next(":"); + find_paths.push_back(GameFindPath( + path + DIR_DELIM + id, false)); + find_paths.push_back(GameFindPath( + path + DIR_DELIM + id + "_game", false)); + } + find_paths.push_back(GameFindPath( user + DIR_DELIM + "games" + DIR_DELIM + id + "_game", true)); find_paths.push_back(GameFindPath( @@ -129,6 +152,13 @@ std::set getAvailableGameIds() std::set gamespaths; gamespaths.insert(porting::path_share + DIR_DELIM + "games"); gamespaths.insert(porting::path_user + DIR_DELIM + "games"); + + Strfnd search_paths = getSubgamePathEnv(); + + while(!search_paths.atend()) { + gamespaths.insert(search_paths.next(":")); + } + for(std::set::const_iterator i = gamespaths.begin(); i != gamespaths.end(); i++){ std::vector dirlist = fs::GetDirListing(*i); -- cgit v1.2.3