Zmiana metody kompresji na chunkowanie, zmiana nazwy z Void Archive na expak
This commit is contained in:
parent
f6150b0d17
commit
aef8daae9b
15 changed files with 320 additions and 93 deletions
|
|
@ -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))
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue