summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Zach Hilman2018-08-11 22:44:50 -0400
committerGravatar Zach Hilman2018-08-11 22:50:48 -0400
commit149bda980a67cf8102aa8290334e697af166aac6 (patch)
tree28950d13200644e499b178131c1d838a82076d7c /src
parentregistration: Update documentation and style (diff)
downloadyuzu-149bda980a67cf8102aa8290334e697af166aac6.tar.gz
yuzu-149bda980a67cf8102aa8290334e697af166aac6.tar.xz
yuzu-149bda980a67cf8102aa8290334e697af166aac6.zip
romfs: Remove cyclic shared_ptr leak in romfs code
Diffstat (limited to 'src')
-rw-r--r--src/core/file_sys/romfs.cpp8
-rw-r--r--src/core/file_sys/vfs_vector.cpp4
-rw-r--r--src/core/file_sys/vfs_vector.h4
3 files changed, 8 insertions, 8 deletions
diff --git a/src/core/file_sys/romfs.cpp b/src/core/file_sys/romfs.cpp
index ff3ddb29c..e490c8ace 100644
--- a/src/core/file_sys/romfs.cpp
+++ b/src/core/file_sys/romfs.cpp
@@ -65,7 +65,7 @@ void ProcessFile(VirtualFile file, size_t file_offset, size_t data_offset, u32 t
65 auto entry = GetEntry<FileEntry>(file, file_offset + this_file_offset); 65 auto entry = GetEntry<FileEntry>(file, file_offset + this_file_offset);
66 66
67 parent->AddFile(std::make_shared<OffsetVfsFile>( 67 parent->AddFile(std::make_shared<OffsetVfsFile>(
68 file, entry.first.size, entry.first.offset + data_offset, entry.second, parent)); 68 file, entry.first.size, entry.first.offset + data_offset, entry.second));
69 69
70 if (entry.first.sibling == ROMFS_ENTRY_EMPTY) 70 if (entry.first.sibling == ROMFS_ENTRY_EMPTY)
71 break; 71 break;
@@ -79,7 +79,7 @@ void ProcessDirectory(VirtualFile file, size_t dir_offset, size_t file_offset, s
79 while (true) { 79 while (true) {
80 auto entry = GetEntry<DirectoryEntry>(file, dir_offset + this_dir_offset); 80 auto entry = GetEntry<DirectoryEntry>(file, dir_offset + this_dir_offset);
81 auto current = std::make_shared<VectorVfsDirectory>( 81 auto current = std::make_shared<VectorVfsDirectory>(
82 std::vector<VirtualFile>{}, std::vector<VirtualDir>{}, parent, entry.second); 82 std::vector<VirtualFile>{}, std::vector<VirtualDir>{}, entry.second);
83 83
84 if (entry.first.child_file != ROMFS_ENTRY_EMPTY) { 84 if (entry.first.child_file != ROMFS_ENTRY_EMPTY) {
85 ProcessFile(file, file_offset, data_offset, entry.first.child_file, current); 85 ProcessFile(file, file_offset, data_offset, entry.first.child_file, current);
@@ -108,9 +108,9 @@ VirtualDir ExtractRomFS(VirtualFile file) {
108 const u64 file_offset = header.file_meta.offset; 108 const u64 file_offset = header.file_meta.offset;
109 const u64 dir_offset = header.directory_meta.offset + 4; 109 const u64 dir_offset = header.directory_meta.offset + 4;
110 110
111 const auto root = 111 auto root =
112 std::make_shared<VectorVfsDirectory>(std::vector<VirtualFile>{}, std::vector<VirtualDir>{}, 112 std::make_shared<VectorVfsDirectory>(std::vector<VirtualFile>{}, std::vector<VirtualDir>{},
113 file->GetContainingDirectory(), file->GetName()); 113 file->GetName(), file->GetContainingDirectory());
114 114
115 ProcessDirectory(file, dir_offset, file_offset, header.data_offset, 0, root); 115 ProcessDirectory(file, dir_offset, file_offset, header.data_offset, 0, root);
116 116
diff --git a/src/core/file_sys/vfs_vector.cpp b/src/core/file_sys/vfs_vector.cpp
index fda603960..98e7c4598 100644
--- a/src/core/file_sys/vfs_vector.cpp
+++ b/src/core/file_sys/vfs_vector.cpp
@@ -8,8 +8,8 @@
8 8
9namespace FileSys { 9namespace FileSys {
10VectorVfsDirectory::VectorVfsDirectory(std::vector<VirtualFile> files_, 10VectorVfsDirectory::VectorVfsDirectory(std::vector<VirtualFile> files_,
11 std::vector<VirtualDir> dirs_, VirtualDir parent_, 11 std::vector<VirtualDir> dirs_, std::string name_,
12 std::string name_) 12 VirtualDir parent_)
13 : files(std::move(files_)), dirs(std::move(dirs_)), parent(std::move(parent_)), 13 : files(std::move(files_)), dirs(std::move(dirs_)), parent(std::move(parent_)),
14 name(std::move(name_)) {} 14 name(std::move(name_)) {}
15 15
diff --git a/src/core/file_sys/vfs_vector.h b/src/core/file_sys/vfs_vector.h
index ba469647b..dc39c9f2f 100644
--- a/src/core/file_sys/vfs_vector.h
+++ b/src/core/file_sys/vfs_vector.h
@@ -12,8 +12,8 @@ namespace FileSys {
12// Vector data is supplied upon construction. 12// Vector data is supplied upon construction.
13struct VectorVfsDirectory : public VfsDirectory { 13struct VectorVfsDirectory : public VfsDirectory {
14 explicit VectorVfsDirectory(std::vector<VirtualFile> files = {}, 14 explicit VectorVfsDirectory(std::vector<VirtualFile> files = {},
15 std::vector<VirtualDir> dirs = {}, VirtualDir parent = nullptr, 15 std::vector<VirtualDir> dirs = {}, std::string name = "",
16 std::string name = ""); 16 VirtualDir parent = nullptr);
17 17
18 std::vector<std::shared_ptr<VfsFile>> GetFiles() const override; 18 std::vector<std::shared_ptr<VfsFile>> GetFiles() const override;
19 std::vector<std::shared_ptr<VfsDirectory>> GetSubdirectories() const override; 19 std::vector<std::shared_ptr<VfsDirectory>> GetSubdirectories() const override;