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:
JosJuice 2017-08-01 19:21:38 +02:00
parent 78fa98f559
commit 6b0a60d2ee

View File

@ -122,12 +122,14 @@ 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)
{ {
m_contents.emplace(offset, size, path); if (size != 0)
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)
{ {
m_contents.emplace(offset, size, data); if (size != 0)
m_contents.emplace(offset, size, data);
} }
u64 DiscContentContainer::CheckSizeAndAdd(u64 offset, const std::string& path) u64 DiscContentContainer::CheckSizeAndAdd(u64 offset, const std::string& path)
@ -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);
} }
} }
} }