Add sqlite3 backend hack for android
[oweals/minetest.git] / src / rollback_interface.cpp
index e15fe3da3155aba623589201fa98e9b2ce9edced..808b07fed9545a7b5032d54e6898a6ca29e2a6df 100644 (file)
@@ -1,6 +1,6 @@
 /*
-Minetest-c55
-Copyright (C) 2012 celeron55, Perttu Ahola <celeron55@gmail.com>
+Minetest
+Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
 
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU Lesser General Public License as published by
@@ -289,6 +289,24 @@ bool RollbackAction::isImportant(IGameDef *gamedef) const
        }
 }
 
+bool RollbackAction::getPosition(v3s16 *dst) const
+{
+       switch(type){
+       case RollbackAction::TYPE_SET_NODE:
+               if(dst) *dst = p;
+               return true;
+       case RollbackAction::TYPE_MODIFY_INVENTORY_STACK: {
+               InventoryLocation loc;
+               loc.deSerialize(inventory_location);
+               if(loc.type != InventoryLocation::NODEMETA)
+                       return false;
+               if(dst) *dst = loc.p;
+               return true; }
+       default:
+               return false;
+       }
+}
+
 bool RollbackAction::applyRevert(Map *map, InventoryManager *imgr, IGameDef *gamedef) const
 {
        try{
@@ -322,7 +340,13 @@ bool RollbackAction::applyRevert(Map *map, InventoryManager *imgr, IGameDef *gam
                                if(n_old.meta != ""){
                                        if(!meta){
                                                meta = new NodeMetadata(gamedef);
-                                               map->setNodeMetadata(p, meta);
+                                               if(!map->setNodeMetadata(p, meta)){
+                                                       delete meta;
+                                                       infostream<<"RollbackAction::applyRevert(): "
+                                                                       <<"setNodeMetadata failed at "
+                                                                       <<PP(p)<<" for "<<n_old.name<<std::endl;
+                                                       return false;
+                                               }
                                        }
                                        std::istringstream is(n_old.meta, std::ios::binary);
                                        meta->deSerialize(is);