#include "filesys.h"
#include "settings.h"
#include "log.h"
+#include "strfnd.h"
#ifndef SERVER
#include "tile.h" // getImagePath
#endif
{}
};
+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 == "")
std::string share = porting::path_share;
std::string user = porting::path_user;
std::vector<GameFindPath> 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(
std::set<std::string> 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<std::string>::const_iterator i = gamespaths.begin();
i != gamespaths.end(); i++){
std::vector<fs::DirListNode> dirlist = fs::GetDirListing(*i);
if(!fs::PathExists(worldmt_path)){
infostream<<"Creating world.mt ("<<worldmt_path<<")"<<std::endl;
fs::CreateAllDirs(path);
- std::ofstream of(worldmt_path.c_str(), std::ios::binary);
- of<<"gameid = "<<gameid<<"\n";
+ std::ostringstream ss(std::ios_base::binary);
+ ss<<"gameid = "<<gameid<< "\nbackend = sqlite3\n";
+ fs::safeWriteToFile(worldmt_path, ss.str());
}
return true;
}
-
-