aboutsummaryrefslogtreecommitdiff
path: root/src/core/file_sys/fsmitm_romfsbuild.cpp
diff options
context:
space:
mode:
authorMorph <39850852+Morph1984@users.noreply.github.com>2020-07-12 04:31:01 -0400
committerMorph <39850852+Morph1984@users.noreply.github.com>2020-07-12 04:33:35 -0400
commite01424699b3256f2a021a02404a8daf1ee82946b (patch)
tree5da6c5aa9a03bbe13c37776e3c7f6f2995e474ed /src/core/file_sys/fsmitm_romfsbuild.cpp
parent739562c33456bddbd032e69b0bfaba0aacce6ca5 (diff)
fs: Fix RomFS building when zero byte files are present
When zero byte files are present, the key (offset) for that file is identical to the file right after. A std::map isn't able to fit key-value pairs with identical keys (offsets), therefore, the solution is to use std::multimap which permits multiple entries with the same key. This most prominently fixes Pokemon Sword and Shield weather with any RomFS mod applied.
Diffstat (limited to 'src/core/file_sys/fsmitm_romfsbuild.cpp')
-rw-r--r--src/core/file_sys/fsmitm_romfsbuild.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/core/file_sys/fsmitm_romfsbuild.cpp b/src/core/file_sys/fsmitm_romfsbuild.cpp
index d126ae8dd0..2aff2708a5 100644
--- a/src/core/file_sys/fsmitm_romfsbuild.cpp
+++ b/src/core/file_sys/fsmitm_romfsbuild.cpp
@@ -240,7 +240,7 @@ RomFSBuildContext::RomFSBuildContext(VirtualDir base_, VirtualDir ext_)
RomFSBuildContext::~RomFSBuildContext() = default;
-std::map<u64, VirtualFile> RomFSBuildContext::Build() {
+std::multimap<u64, VirtualFile> RomFSBuildContext::Build() {
const u64 dir_hash_table_entry_count = romfs_get_hash_table_count(num_dirs);
const u64 file_hash_table_entry_count = romfs_get_hash_table_count(num_files);
dir_hash_table_size = 4 * dir_hash_table_entry_count;
@@ -294,7 +294,7 @@ std::map<u64, VirtualFile> RomFSBuildContext::Build() {
cur_dir->parent->child = cur_dir;
}
- std::map<u64, VirtualFile> out;
+ std::multimap<u64, VirtualFile> out;
// Populate file tables.
for (const auto& it : files) {