DirectoryBlob: Don't add DiscContents with size 0
Having DiscContents with size 0 would mean that some DiscContents might not get added to the std::set because of them comparing identically to another DiscContent. This replaces an older piece of code in WriteDirectory that ensures that no two files have the same starting offset. (We now care about the ending offset, not the starting offset. The new solution both ensures that no two files have the same ending offset and that no two files have the same starting offset.)
This commit is contained in:
parent
78fa98f559
commit
6b0a60d2ee
|
@ -122,11 +122,13 @@ bool DiscContent::Read(u64* offset, u64* length, u8** buffer) const
|
||||||
|
|
||||||
void DiscContentContainer::Add(u64 offset, u64 size, const std::string& path)
|
void DiscContentContainer::Add(u64 offset, u64 size, const std::string& path)
|
||||||
{
|
{
|
||||||
|
if (size != 0)
|
||||||
m_contents.emplace(offset, size, path);
|
m_contents.emplace(offset, size, path);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DiscContentContainer::Add(u64 offset, u64 size, const u8* data)
|
void DiscContentContainer::Add(u64 offset, u64 size, const u8* data)
|
||||||
{
|
{
|
||||||
|
if (size != 0)
|
||||||
m_contents.emplace(offset, size, data);
|
m_contents.emplace(offset, size, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -761,7 +763,7 @@ void DirectoryBlobPartition::WriteDirectory(const File::FSTEntry& parent_entry,
|
||||||
m_contents.Add(*data_offset, entry.size, entry.physicalName);
|
m_contents.Add(*data_offset, entry.size, entry.physicalName);
|
||||||
|
|
||||||
// 32 KiB aligned - many games are fine with less alignment, but not all
|
// 32 KiB aligned - many games are fine with less alignment, but not all
|
||||||
*data_offset = Common::AlignUp(*data_offset + std::max<u64>(entry.size, 1ull), 0x8000ull);
|
*data_offset = Common::AlignUp(*data_offset + entry.size, 0x8000ull);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue