Fix IW4 zone loading

This commit is contained in:
Jan 2021-03-30 11:19:56 +02:00
parent 31407e62e2
commit 590a108a1b
3 changed files with 2 additions and 15 deletions

View File

@ -137,8 +137,8 @@ class ZoneLoaderFactory::Impl
auto* masterBlockHashesPtr = masterBlockHashes.get(); auto* masterBlockHashesPtr = masterBlockHashes.get();
zoneLoader->AddLoadingStep(std::move(masterBlockHashes)); zoneLoader->AddLoadingStep(std::move(masterBlockHashes));
zoneLoader->AddLoadingStep(std::make_unique<StepRemoveProcessor>(subHeaderCapturePtr));
zoneLoader->AddLoadingStep(std::make_unique<StepVerifyHash>(std::unique_ptr<IHashFunction>(Crypto::CreateSHA256()), 0, subHeaderHashPtr, subHeaderCapturePtr)); zoneLoader->AddLoadingStep(std::make_unique<StepVerifyHash>(std::unique_ptr<IHashFunction>(Crypto::CreateSHA256()), 0, subHeaderHashPtr, subHeaderCapturePtr));
zoneLoader->AddLoadingStep(std::make_unique<StepRemoveProcessor>(subHeaderCapturePtr));
// Skip the rest of the first chunk // Skip the rest of the first chunk
zoneLoader->AddLoadingStep(std::make_unique<StepSkipBytes>(ZoneConstants::AUTHED_CHUNK_SIZE - sizeof(DB_AuthHeader))); zoneLoader->AddLoadingStep(std::make_unique<StepSkipBytes>(ZoneConstants::AUTHED_CHUNK_SIZE - sizeof(DB_AuthHeader)));

View File

@ -2,25 +2,14 @@
#include <cassert> #include <cassert>
StepRemoveProcessor::StepRemoveProcessor(StreamProcessor* streamProcessor) StepRemoveProcessor::StepRemoveProcessor(StreamProcessor* streamProcessor)
: m_stream_processor(streamProcessor), : m_stream_processor(streamProcessor)
m_removed(false)
{ {
} }
StepRemoveProcessor::~StepRemoveProcessor()
{
if(m_removed)
{
delete m_stream_processor;
m_stream_processor = nullptr;
}
}
void StepRemoveProcessor::PerformStep(ZoneLoader* zoneLoader, ILoadingStream* stream) void StepRemoveProcessor::PerformStep(ZoneLoader* zoneLoader, ILoadingStream* stream)
{ {
assert(zoneLoader != nullptr); assert(zoneLoader != nullptr);
assert(m_stream_processor != nullptr); assert(m_stream_processor != nullptr);
zoneLoader->RemoveStreamProcessor(m_stream_processor); zoneLoader->RemoveStreamProcessor(m_stream_processor);
m_removed = true;
} }

View File

@ -5,11 +5,9 @@
class StepRemoveProcessor final : public ILoadingStep class StepRemoveProcessor final : public ILoadingStep
{ {
StreamProcessor* m_stream_processor; StreamProcessor* m_stream_processor;
bool m_removed;
public: public:
explicit StepRemoveProcessor(StreamProcessor* streamProcessor); explicit StepRemoveProcessor(StreamProcessor* streamProcessor);
~StepRemoveProcessor() override;
void PerformStep(ZoneLoader* zoneLoader, ILoadingStream* stream) override; void PerformStep(ZoneLoader* zoneLoader, ILoadingStream* stream) override;
}; };