From 7c13b16d308a29fb87ff3de5af7ad2c960b8afb0 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Mon, 14 Feb 2022 20:51:06 +0100 Subject: [PATCH] Add missing flush modes supported by zlib --- code/AssetLib/X/XFileParser.cpp | 15 +++++++++------ code/Common/Compression.cpp | 6 ++++++ code/Common/Compression.h | 2 ++ 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/code/AssetLib/X/XFileParser.cpp b/code/AssetLib/X/XFileParser.cpp index 65f4023a7..d22b99f5f 100644 --- a/code/AssetLib/X/XFileParser.cpp +++ b/code/AssetLib/X/XFileParser.cpp @@ -188,7 +188,8 @@ XFileParser::XFileParser(const std::vector &pBuffer) : Compression compression; uncompressed.resize(est_out + 1); char *out = &uncompressed.front(); - if (compression.open(mIsBinaryFormat ? Compression::Format::Binary : Compression::Format::ASCII, Compression::FlushMode::SyncFlush, -Compression::MAX_WBITS)) { + if (compression.open(mIsBinaryFormat ? Compression::Format::Binary : Compression::Format::ASCII, + Compression::FlushMode::SyncFlush, -Compression::MaxWBits)) { while (mP + 3 < mEnd) { uint16_t ofs = *((uint16_t *)mP); AI_SWAP2(ofs); @@ -243,11 +244,11 @@ void XFileParser::ParseFile() { } // parse specific object - if (objectName == "template") + if (objectName == "template") { ParseDataObjectTemplate(); - else if (objectName == "Frame") + } else if (objectName == "Frame") { ParseDataObjectFrame(nullptr); - else if (objectName == "Mesh") { + } else if (objectName == "Mesh") { // some meshes have no frames at all Mesh *mesh = new Mesh; ParseDataObjectMesh(mesh); @@ -286,11 +287,13 @@ void XFileParser::ParseDataObjectTemplate() { while (running) { std::string s = GetNextToken(); - if (s == "}") + if (s == "}") { break; + } - if (s.length() == 0) + if (s.length() == 0) { ThrowException("Unexpected end of file reached while parsing template definition"); + } } } diff --git a/code/Common/Compression.cpp b/code/Common/Compression.cpp index 1249746b4..3bf306dee 100644 --- a/code/Common/Compression.cpp +++ b/code/Common/Compression.cpp @@ -104,6 +104,12 @@ static int getFlushMode(Compression::FlushMode flush) { case Compression::FlushMode::NoFlush: z_flush = Z_NO_FLUSH; break; + case Compression::FlushMode::Block: + z_flush = Z_BLOCK; + break; + case Compression::FlushMode::Tree: + z_flush = Z_TREES; + break; case Compression::FlushMode::SyncFlush: z_flush = Z_SYNC_FLUSH; break; diff --git a/code/Common/Compression.h b/code/Common/Compression.h index 97e3f9bcd..edf1d232f 100644 --- a/code/Common/Compression.h +++ b/code/Common/Compression.h @@ -70,6 +70,8 @@ public: enum class FlushMode { InvalidFormat = -1, ///< Invalid enum type. NoFlush = 0, ///< No flush, will be done on inflate end. + Block, ///< Assists in combination of compress. + Tree, ///< Assists in combination of compress and returns if stream is finish. SyncFlush, ///< Synced flush mode. Finish, ///< Finish mode, all in once, no block access.