17
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-10-17 03:59:19 +02:00

feat(terrain): file.binary.terrain.checksum setting for the check of binary terrain files against their text: full (length and checksum), simple (length, the default), off

This commit is contained in:
2026-10-06 19:11:48 +02:00
parent 4e4cbdd052
commit 96cd3e32ef
4 changed files with 23 additions and 2 deletions

View File

@@ -614,7 +614,7 @@ bool terrain_file::convert(std::string const &Textfile, std::string const &Binar
return result;
}
// makes sure binary version of specified text terrain file is in place and matches the text
// makes sure binary version of specified text terrain file is in place and matches the text, as far as the settings ask for it
terrain_file::state terrain_file::prepare(std::string const &Textfile, std::string const &Binaryfile)
{
file_header header;
@@ -628,10 +628,20 @@ terrain_file::state terrain_file::prepare(std::string const &Textfile, std::stri
return (binarypresent ? state::binary : state::missing);
}
// how far the check goes is up to the settings (file.binary.terrain.checksum): none at all, length of the text, or its length and checksum
if (binarypresent && Global.file_binary_terrain_checksum <= 0)
{
return state::binary;
}
std::string text;
auto textloaded{false};
if (binarypresent && (header.sourcesize == textsize))
{
if (Global.file_binary_terrain_checksum == 1)
{
// NOTE: this takes a text changed without a change of its length for the one the binary file was made from
return state::binary;
}
// the length is the same; the checksum tells whether the content is, too
textloaded = read_file(Textfile, text);
if (textloaded && (text.size() == header.sourcesize) && (checksum(text.data(), text.size()) == header.sourcechecksum))

View File

@@ -39,7 +39,7 @@ class terrain_file
// converts specified text terrain file to binary format. returns: true on success, false otherwise.
// description of the result or of the failure is stored in Message, if provided
static bool convert(std::string const &Textfile, std::string const &Binaryfile, std::string *Message = nullptr);
// makes sure binary version of specified text terrain file is in place and matches the text
// makes sure binary version of specified text terrain file is in place and matches the text, as far as the settings ask for it
static state prepare(std::string const &Textfile, std::string const &Binaryfile);
// makes content of specified binary terrain file a part of provided region. the geometry is loaded right away,
// or left for the sections of the region to load when they're about to be used. returns: true on success, false otherwise