diff --git a/ExtractCargo.cpp b/ExtractCargo.cpp index ad2e963..2f447a5 100644 --- a/ExtractCargo.cpp +++ b/ExtractCargo.cpp @@ -197,9 +197,9 @@ void ExtractCargo::ExtractingFilesFromCargo() cargoFile.seekg(fh.offset); // Strumień wyciągający - for (uint64_t sc = 0; sc < fh.size; sc += ds::chunk_stream) + if (fh.flag == flag::raw) { - if (fh.flag == flag::raw) + for (uint64_t sc = 0; sc < fh.size; sc += ds::chunk_stream) { const uint32_t streamChunk = std::min(ds::chunk_stream, static_cast(fh.size - sc)); @@ -207,45 +207,45 @@ void ExtractCargo::ExtractingFilesFromCargo() cargoFile.read(buffer.data(), streamChunk); file.write(reinterpret_cast(buffer.data()), streamChunk); } - else + } + else + { + uint32_t chunkLen; + uint32_t chunkBeforeSize; + uint32_t chunkLastSize; + + cargoFile.read(reinterpret_cast(&chunkLen), sizeof(chunkLen)); + cargoFile.read(reinterpret_cast(&chunkBeforeSize), sizeof(chunkBeforeSize)); + cargoFile.read(reinterpret_cast(&chunkLastSize), sizeof(chunkLastSize)); + + std::vector chunksString; + + // Dekompresja bloków + for (size_t i = 0; i < chunkLen; ++i) { - uint32_t chunkLen; - uint32_t chunkBeforeSize; - uint32_t chunkLastSize; + // Pobierz rozmiar chunków przed i po skompresowaniem + uint32_t chunkSize = i < chunkLen - 1 ? chunkBeforeSize : chunkLastSize; - cargoFile.read(reinterpret_cast(&chunkLen), sizeof(chunkLen)); - cargoFile.read(reinterpret_cast(&chunkBeforeSize), sizeof(chunkBeforeSize)); - cargoFile.read(reinterpret_cast(&chunkLastSize), sizeof(chunkLastSize)); + uint32_t chunkZipSize; + cargoFile.read(reinterpret_cast(&chunkZipSize), sizeof(chunkZipSize)); - std::vector chunksString; + // Pobierz blok chunka + std::vector buffer(chunkZipSize); + cargoFile.read(buffer.data(), chunkZipSize); - // Dekompresja bloków - for (size_t i = 0; i < chunkLen; ++i) + std::vector rawBuffer(chunkSize); + if ((fh.flag & flag::zip) == flag::zip) { - // Pobierz rozmiar chunków przed i po skompresowaniem - uint32_t chunkSize = i < chunkLen - 1 ? chunkBeforeSize : chunkLastSize; - uint32_t chunkZipSize; - - cargoFile.read(reinterpret_cast(&chunkZipSize), sizeof(chunkZipSize)); - - // Pobierz blok chunka - std::vector buffer(chunkZipSize); - cargoFile.read(buffer.data(), chunkZipSize); - - std::vector rawBuffer(chunkSize); - if ((fh.flag & flag::zip) == flag::zip) - { - rawBuffer = (fh.flag & flag::enc) == flag::enc ? - eman.decrypt(cman.decompress(buffer, chunkSize)) : - cman.decompress(buffer, chunkSize); - } - else - { - rawBuffer = eman.decrypt(buffer); - } - - file.write(reinterpret_cast(rawBuffer.data()), chunkSize); + rawBuffer = (fh.flag & flag::enc) == flag::enc ? + eman.decrypt(cman.decompress(buffer, chunkSize)) : + cman.decompress(buffer, chunkSize); } + else + { + rawBuffer = eman.decrypt(buffer); + } + + file.write(reinterpret_cast(rawBuffer.data()), chunkSize); } }