From 81c5e5200bcc20be6b1513a440b2c45985fe3c49 Mon Sep 17 00:00:00 2001
From: Perttu Ahola <celeron55@gmail.com>
Date: Sun, 3 Jun 2012 00:32:49 +0300
Subject: [PATCH] Fix loading of legacy chests

---
 src/content_nodemeta.cpp | 15 +++++++--------
 src/inventory.cpp        |  5 +++++
 src/inventory.h          |  1 +
 3 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/src/content_nodemeta.cpp b/src/content_nodemeta.cpp
index a2a341ae0..2f32cf16a 100644
--- a/src/content_nodemeta.cpp
+++ b/src/content_nodemeta.cpp
@@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "inventory.h"
 #include "log.h"
 #include "utility.h"
+#include <sstream>
 
 #define NODEMETA_GENERIC 1
 #define NODEMETA_SIGN 14
@@ -70,11 +71,10 @@ static bool content_nodemeta_deserialize_legacy_body(
 		// Rename inventory list "0" to "main"
 		Inventory *inv = meta->getInventory();
 		if(!inv->getList("main") && inv->getList("0")){
-			inv->addList("main", 8*4);
-			*inv->getList("main") = *inv->getList("0");
-			inv->deleteList("0");
+			inv->getList("0")->setName("main");
 		}
-
+		assert(inv->getList("main") && !inv->getList("0"));
+		
 		meta->setString("formspec","invsize[8,9;]"
 				"list[current_name;main;0,0;8,4;]"
 				"list[current_player;main;0,5;8,4;]");
@@ -88,11 +88,10 @@ static bool content_nodemeta_deserialize_legacy_body(
 		// Rename inventory list "0" to "main"
 		Inventory *inv = meta->getInventory();
 		if(!inv->getList("main") && inv->getList("0")){
-			inv->addList("main", 8*4);
-			*inv->getList("main") = *inv->getList("0");
-			inv->deleteList("0");
+			inv->getList("0")->setName("main");
 		}
-
+		assert(inv->getList("main") && !inv->getList("0"));
+		
 		meta->setString("formspec","invsize[8,9;]"
 				"list[current_name;main;0,0;8,4;]"
 				"list[current_player;main;0,5;8,4;]");
diff --git a/src/inventory.cpp b/src/inventory.cpp
index df75ebcd5..7c31c85c8 100644
--- a/src/inventory.cpp
+++ b/src/inventory.cpp
@@ -458,6 +458,11 @@ void InventoryList::setSize(u32 newsize)
 	m_size = newsize;
 }
 
+void InventoryList::setName(const std::string &name)
+{
+	m_name = name;
+}
+
 void InventoryList::serialize(std::ostream &os) const
 {
 	//os.imbue(std::locale("C"));
diff --git a/src/inventory.h b/src/inventory.h
index 411eabb09..e280bbf79 100644
--- a/src/inventory.h
+++ b/src/inventory.h
@@ -176,6 +176,7 @@ class InventoryList
 	~InventoryList();
 	void clearItems();
 	void setSize(u32 newsize);
+	void setName(const std::string &name);
 	void serialize(std::ostream &os) const;
 	void deSerialize(std::istream &is);
 
-- 
GitLab