TreFile: fix compressed file size of last file

This commit is contained in:
2015-04-29 16:45:21 +02:00
parent c317918618
commit b9d4048695

View File

@@ -95,6 +95,20 @@ TreFile::TreFile(char const* base, size_t length)
table3_.emplace_back(dataPtr, length, length, flags);
}
// Fixup last file clength
{
uint32_t lastPtr, lastLen;
uint8_t lastFlags;
std::tie(lastPtr, std::ignore, lastLen, lastFlags) = table3_.back();
if (lastPtr+lastLen > length_) {
if (lastFlags&0x80)
std::get<2>(table3_.back()) = length_ - lastPtr;
else
fprintf(stderr, "Overrun? %u %u (%hhu) -> %lu\n",lastPtr, lastLen, lastFlags, length_);
}
}
// Read Table 2
std::map<size_t, uint32_t> table2Pos;
@@ -268,17 +282,19 @@ void TreFile::printStructure()
printf("Files by CRC:\n");
for(auto const& ent : table1_) {
printf("\t%.8x -> (ofs %.8x, len %.8x, flags %.2hhx)\n", ent.first,
printf("\t%.8x -> (ofs %.8x, len %.8x, clen %.8x, flags %.2hhx)\n", ent.first,
std::get<0>(table3_[ent.second]),
std::get<1>(table3_[ent.second]),
std::get<2>(table3_[ent.second]),
std::get<3>(table3_[ent.second]));
}
printf("Files by Name:\n");
for(auto const& ent : table2_) {
printf("\t%s -> (ofs %.8x, len %.8x, flags %.2hhx)\n", ent.first.c_str(),
printf("\t%s -> (ofs %.8x, len %.8x, clen %.8x, flags %.2hhx)\n", ent.first.c_str(),
std::get<0>(table3_[ent.second]),
std::get<1>(table3_[ent.second]),
std::get<2>(table3_[ent.second]),
std::get<3>(table3_[ent.second]));
}
}