Player file directory must be only created when using file backend.
authorLoïc Blot <loic.blot@unix-experience.fr>
Fri, 4 Jan 2019 09:06:46 +0000 (10:06 +0100)
committerLoïc Blot <loic.blot@unix-experience.fr>
Fri, 4 Jan 2019 09:06:46 +0000 (10:06 +0100)
Also ensure on each player save that the directory exists

src/database/database-files.cpp
src/database/database-files.h
src/serverenvironment.cpp

index 09d76240ef21f6fd78d887e07772725af06025d0..f425353483dc8f955e8c1ec695ca5656ced14a5c 100644 (file)
@@ -31,6 +31,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 // This backend is intended to be used on Minetest 0.4.16 only for the transition backend
 // for player files
 
+PlayerDatabaseFiles::PlayerDatabaseFiles(const std::string &savedir) : m_savedir(savedir)
+{
+       fs::CreateDir(m_savedir);
+}
+
 void PlayerDatabaseFiles::serialize(std::ostringstream &os, RemotePlayer *player)
 {
        // Utilize a Settings object for storing values
@@ -58,6 +63,8 @@ void PlayerDatabaseFiles::serialize(std::ostringstream &os, RemotePlayer *player
 
 void PlayerDatabaseFiles::savePlayer(RemotePlayer *player)
 {
+       fs::CreateDir(m_savedir);
+
        std::string savedir = m_savedir + DIR_DELIM;
        std::string path = savedir + player->getName();
        bool path_found = false;
index 218815cf7841f81ddd34a8f56ec04048ffca5ee2..cb830a3eda1cda6f5eaffa9982daf3befec2333d 100644 (file)
@@ -29,7 +29,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 class PlayerDatabaseFiles : public PlayerDatabase
 {
 public:
-       PlayerDatabaseFiles(const std::string &savedir) : m_savedir(savedir) {}
+       PlayerDatabaseFiles(const std::string &savedir);
        virtual ~PlayerDatabaseFiles() = default;
 
        void savePlayer(RemotePlayer *player);
index 4837449e6f990103130e055133b3dff3b1479c17..b25840528880d77f59efc50054cbe9f4f24c2360 100644 (file)
@@ -544,9 +544,6 @@ void ServerEnvironment::kickAllPlayers(AccessDeniedCode reason,
 
 void ServerEnvironment::saveLoadedPlayers()
 {
-       std::string players_path = m_path_world + DIR_DELIM + "players";
-       fs::CreateDir(players_path);
-
        for (RemotePlayer *player : m_players) {
                if (player->checkModified() || (player->getPlayerSAO() &&
                                player->getPlayerSAO()->getMeta().isModified())) {