Zmiana metody kompresji na chunkowanie, zmiana nazwy z Void Archive na expak

This commit is contained in:
yanczi 2025-09-30 00:33:16 +02:00
parent f6150b0d17
commit aef8daae9b
15 changed files with 320 additions and 93 deletions

View file

@ -78,8 +78,8 @@ bool ExtractCargo::Extract(const std::string& cFile)
//-----------------------------------------------------------------------------
bool ExtractCargo::CheckCargoFile()
{
std::vector<char> magic(6);
uint8_t cargoVer = 0;
std::vector<char> magic(signature.size());
uint16_t cargoVer = 0;
if (!cargoFile.is_open())
{
@ -92,6 +92,8 @@ bool ExtractCargo::CheckCargoFile()
cargoFile.read(reinterpret_cast<char*>(&filesLen), sizeof(filesLen));
cargoFile.read(reinterpret_cast<char*>(&tablePosition), sizeof(tablePosition));
std::cout << std::string(magic.begin(), magic.end()) << std::endl;
if (std::string(magic.begin(), magic.end()) != signature)
{
std::cerr << "Error: Corrupted Cargo" << std::endl;
@ -109,29 +111,6 @@ bool ExtractCargo::CheckCargoFile()
return true;
}
//-----------------------------------------------------------------------------
// Dekomprezja danych
//-----------------------------------------------------------------------------
std::vector<char> ExtractCargo::DecompressingData(const std::vector<char>& zip, const uint32_t& estimatedSize)
{
std::vector<char> unzip(estimatedSize);
int sizeData = LZ4_decompress_safe(
zip.data(),
unzip.data(),
static_cast<int>(zip.size()),
static_cast<int>(estimatedSize)
);
if (sizeData < 0)
{
throw std::runtime_error("LZ4 Decompressing Error");
}
unzip.resize(sizeData);
return unzip;
}
//-----------------------------------------------------------------------------
// Sprawdzanie sumy kontrolnej
//-----------------------------------------------------------------------------
@ -163,9 +142,9 @@ void ExtractCargo::LoadFilesTable()
cargoFile.read(nameBuffor.data(), fhTmp.nameLen);
fhTmp.nameFile = std::string(nameBuffor.begin(), nameBuffor.end());
cargoFile.read(reinterpret_cast<char*>(&fhTmp.hashName), sizeof(fhTmp.hashName));
cargoFile.read(reinterpret_cast<char*>(&fhTmp.offset), sizeof(fhTmp.offset));
cargoFile.read(reinterpret_cast<char*>(&fhTmp.size), sizeof(fhTmp.size));
cargoFile.read(reinterpret_cast<char*>(&fhTmp.rawSize), sizeof(fhTmp.rawSize));
cargoFile.read(reinterpret_cast<char*>(&fhTmp.crc), sizeof(fhTmp.crc));
cargoFile.read(reinterpret_cast<char*>(&fhTmp.isZip), sizeof(fhTmp.isZip));
@ -178,6 +157,8 @@ void ExtractCargo::LoadFilesTable()
//-----------------------------------------------------------------------------
void ExtractCargo::ExtractingFilesFromCargo()
{
CompressingManager cm;
for (const auto& fh : filesHeads)
{
std::filesystem::path dir = cargoFileName.stem() / fh.nameFile;
@ -189,7 +170,7 @@ void ExtractCargo::ExtractingFilesFromCargo()
cargoFile.read(buffor.data(), fh.size);
std::vector<char> rawBuffor = fh.isZip ? DecompressingData(buffor, fh.rawSize) : buffor;
std::vector<char> rawBuffor = fh.isZip ? cm.decompress(buffor) : buffor;
if (!HashValid(rawBuffor, fh.crc))
{