From 130464c2688fc2c9cd39d16568c12f17c105cb89 Mon Sep 17 00:00:00 2001
From: PilzAdam <pilzadam@minetest.net>
Date: Fri, 21 Jun 2013 18:32:28 +0000
Subject: [PATCH] Print playername when failing to read playerfile and ignore
 files starting with .

---
 src/environment.cpp | 8 ++++----
 src/player.cpp      | 4 ++--
 src/player.h        | 2 +-
 3 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/environment.cpp b/src/environment.cpp
index 99da5190c..4b785998b 100644
--- a/src/environment.cpp
+++ b/src/environment.cpp
@@ -399,7 +399,7 @@ void ServerEnvironment::serializePlayers(const std::string &savedir)
 	std::vector<fs::DirListNode> player_files = fs::GetDirListing(players_path);
 	for(u32 i=0; i<player_files.size(); i++)
 	{
-		if(player_files[i].dir)
+		if(player_files[i].dir || player_files[i].name[0] == '.')
 			continue;
 		
 		// Full path to this file
@@ -417,7 +417,7 @@ void ServerEnvironment::serializePlayers(const std::string &savedir)
 				infostream<<"Failed to read "<<path<<std::endl;
 				continue;
 			}
-			testplayer.deSerialize(is);
+			testplayer.deSerialize(is, player_files[i].name);
 		}
 
 		//infostream<<"Loaded test player with name "<<testplayer.getName()<<std::endl;
@@ -529,7 +529,7 @@ void ServerEnvironment::deSerializePlayers(const std::string &savedir)
 				infostream<<"Failed to read "<<path<<std::endl;
 				continue;
 			}
-			testplayer.deSerialize(is);
+			testplayer.deSerialize(is, player_files[i].name);
 		}
 
 		if(!string_allowed(testplayer.getName(), PLAYERNAME_ALLOWED_CHARS))
@@ -563,7 +563,7 @@ void ServerEnvironment::deSerializePlayers(const std::string &savedir)
 				infostream<<"Failed to read "<<path<<std::endl;
 				continue;
 			}
-			player->deSerialize(is);
+			player->deSerialize(is, player_files[i].name);
 		}
 
 		if(newplayer)
diff --git a/src/player.cpp b/src/player.cpp
index a199c9a6c..ec1e3aff7 100644
--- a/src/player.cpp
+++ b/src/player.cpp
@@ -179,7 +179,7 @@ void Player::serialize(std::ostream &os)
 	inventory.serialize(os);
 }
 
-void Player::deSerialize(std::istream &is)
+void Player::deSerialize(std::istream &is, std::string playername)
 {
 	Settings args;
 	
@@ -187,7 +187,7 @@ void Player::deSerialize(std::istream &is)
 	{
 		if(is.eof())
 			throw SerializationError
-					("Player::deSerialize(): PlayerArgsEnd not found");
+					(("Player::deSerialize(): PlayerArgsEnd of player \"" + playername + "\" not found").c_str());
 		std::string line;
 		std::getline(is, line);
 		std::string trimmedline = trim(line);
diff --git a/src/player.h b/src/player.h
index 517bd354d..89e4667c4 100644
--- a/src/player.h
+++ b/src/player.h
@@ -197,7 +197,7 @@ class Player
 		deSerialize stops reading exactly at the right point.
 	*/
 	void serialize(std::ostream &os);
-	void deSerialize(std::istream &is);
+	void deSerialize(std::istream &is, std::string playername);
 
 	bool touching_ground;
 	// This oscillates so that the player jumps a bit above the surface
-- 
GitLab