diff --git a/components/bsa/compressedbsafile.cpp b/components/bsa/compressedbsafile.cpp index 6cf8c366a3..fbfb72abd3 100644 --- a/components/bsa/compressedbsafile.cpp +++ b/components/bsa/compressedbsafile.cpp @@ -175,19 +175,25 @@ namespace Bsa for (auto& [folder, filelist] : folders) { std::map fileMap; - for (const auto& file : filelist) + + for (auto& file : filelist) fileMap[file.mHash] = std::move(file); - auto& folderMap = mFolders[folder.mHash]; - folderMap = FolderRecord{ folder.mCount, folder.mOffset, std::move(fileMap) }; - for (auto& [hash, fileRec] : folderMap.mFiles) + + mFolders[folder.mHash] = FolderRecord{ folder.mCount, folder.mOffset, folder.mName, std::move(fileMap) }; + } + + for (auto& [folderHash, folderRecord] : mFolders) + { + for (auto& [fileHash, fileRecord] : folderRecord.mFiles) { FileStruct fileStruct{}; - fileStruct.mFileSize = fileRec.mSize & (~FileSizeFlag_Compression); - fileStruct.mOffset = fileRec.mOffset; + fileStruct.mFileSize = fileRecord.mSize & (~FileSizeFlag_Compression); + fileStruct.mOffset = fileRecord.mOffset; fileStruct.mNameOffset = 0; - fileStruct.mNameSize = fileRec.mName.empty() ? 0 : static_cast(fileRec.mName.size() - 1); - fileStruct.mNamesBuffer = &fileRec.mName; - mFiles.emplace_back(fileStruct); + fileStruct.mNameSize + = fileRecord.mName.empty() ? 0 : static_cast(fileRecord.mName.size() - 1); + fileStruct.mNamesBuffer = &fileRecord.mName; + mFiles.push_back(fileStruct); } } diff --git a/components/bsa/compressedbsafile.hpp b/components/bsa/compressedbsafile.hpp index 9610e88f73..88c04614ed 100644 --- a/components/bsa/compressedbsafile.hpp +++ b/components/bsa/compressedbsafile.hpp @@ -103,6 +103,7 @@ namespace Bsa { std::uint32_t mCount; std::int64_t mOffset; + std::string mName; std::map mFiles; };