summaryrefslogtreecommitdiff
path: root/src/mapgen.cpp
diff options
context:
space:
mode:
authorPilzAdam <pilzadam@minetest.net>2013-08-13 19:15:06 +0200
committerPilzAdam <pilzadam@minetest.net>2013-08-13 22:05:45 +0200
commitd718b0b34eda84744778fa12a01d5be5f03753d3 (patch)
tree6ee450e7f1078a114c71f73ead16310f13bbc00c /src/mapgen.cpp
parentc8930850e37dab9820049152a3e668a315a97560 (diff)
downloadminetest-d718b0b34eda84744778fa12a01d5be5f03753d3.tar.gz
minetest-d718b0b34eda84744778fa12a01d5be5f03753d3.tar.bz2
minetest-d718b0b34eda84744778fa12a01d5be5f03753d3.zip
Dont write directly to files but rather write and copy a tmp file
Diffstat (limited to 'src/mapgen.cpp')
-rw-r--r--src/mapgen.cpp17
1 files changed, 10 insertions, 7 deletions
diff --git a/src/mapgen.cpp b/src/mapgen.cpp
index 97d672b01..be65694aa 100644
--- a/src/mapgen.cpp
+++ b/src/mapgen.cpp
@@ -36,6 +36,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "mapgen_v6.h"
#include "mapgen_v7.h"
#include "util/serialize.h"
+#include "filesys.h"
FlagDesc flagdesc_mapgen[] = {
{"trees", MG_TREES},
@@ -756,24 +757,26 @@ bool DecoSchematic::loadSchematicFile() {
2 - Fixed messy never/always place; 0 probability is now never, 0xFF is always
*/
void DecoSchematic::saveSchematicFile(INodeDefManager *ndef) {
- std::ofstream os(filename.c_str(), std::ios_base::binary);
+ std::ostringstream ss(std::ios_base::binary);
- writeU32(os, MTSCHEM_FILE_SIGNATURE); // signature
- writeU16(os, 2); // version
- writeV3S16(os, size); // schematic size
+ writeU32(ss, MTSCHEM_FILE_SIGNATURE); // signature
+ writeU16(ss, 2); // version
+ writeV3S16(ss, size); // schematic size
std::vector<content_t> usednodes;
int nodecount = size.X * size.Y * size.Z;
build_nnlist_and_update_ids(schematic, nodecount, &usednodes);
u16 numids = usednodes.size();
- writeU16(os, numids); // name count
+ writeU16(ss, numids); // name count
for (int i = 0; i != numids; i++)
- os << serializeString(ndef->get(usednodes[i]).name); // node names
+ ss << serializeString(ndef->get(usednodes[i]).name); // node names
// compressed bulk node data
- MapNode::serializeBulk(os, SER_FMT_VER_HIGHEST_WRITE, schematic,
+ MapNode::serializeBulk(ss, SER_FMT_VER_HIGHEST_WRITE, schematic,
nodecount, 2, 2, true);
+
+ fs::safeWriteToFile(filename, ss.str());
}