diff options
| author | 2023-08-21 16:29:04 +0200 | |
|---|---|---|
| committer | 2023-08-21 16:29:04 +0200 | |
| commit | 861597eb2e32663dba37813273ff91434566523a (patch) | |
| tree | a05b7c596209f754a822c03cca162c6f32b6a565 /src/core/hle | |
| parent | Merge pull request #11320 from Kelebek1/mask_depthstencil_clear (diff) | |
| parent | file_sys: tolerate empty NCA (diff) | |
| download | yuzu-861597eb2e32663dba37813273ff91434566523a.tar.gz yuzu-861597eb2e32663dba37813273ff91434566523a.tar.xz yuzu-861597eb2e32663dba37813273ff91434566523a.zip | |
Merge pull request #11284 from liamwhite/nca-release
vfs: expand support for NCA reading
Diffstat (limited to 'src/core/hle')
| -rw-r--r-- | src/core/hle/service/am/applets/applet_web_browser.cpp | 2 | ||||
| -rw-r--r-- | src/core/hle/service/filesystem/filesystem.cpp | 5 | ||||
| -rw-r--r-- | src/core/hle/service/filesystem/filesystem.h | 3 | ||||
| -rw-r--r-- | src/core/hle/service/filesystem/fsp_srv.cpp | 3 |
4 files changed, 11 insertions, 2 deletions
diff --git a/src/core/hle/service/am/applets/applet_web_browser.cpp b/src/core/hle/service/am/applets/applet_web_browser.cpp index 2accf7898..1c9a1dc29 100644 --- a/src/core/hle/service/am/applets/applet_web_browser.cpp +++ b/src/core/hle/service/am/applets/applet_web_browser.cpp | |||
| @@ -139,7 +139,7 @@ FileSys::VirtualFile GetOfflineRomFS(Core::System& system, u64 title_id, | |||
| 139 | const FileSys::PatchManager pm{title_id, system.GetFileSystemController(), | 139 | const FileSys::PatchManager pm{title_id, system.GetFileSystemController(), |
| 140 | system.GetContentProvider()}; | 140 | system.GetContentProvider()}; |
| 141 | 141 | ||
| 142 | return pm.PatchRomFS(nca->GetRomFS(), nca->GetBaseIVFCOffset(), nca_type); | 142 | return pm.PatchRomFS(nca.get(), nca->GetRomFS(), nca_type); |
| 143 | } | 143 | } |
| 144 | } | 144 | } |
| 145 | 145 | ||
diff --git a/src/core/hle/service/filesystem/filesystem.cpp b/src/core/hle/service/filesystem/filesystem.cpp index ac465d5a9..4c1ea1a5b 100644 --- a/src/core/hle/service/filesystem/filesystem.cpp +++ b/src/core/hle/service/filesystem/filesystem.cpp | |||
| @@ -373,6 +373,11 @@ FileSys::VirtualFile FileSystemController::OpenRomFS(u64 title_id, FileSys::Stor | |||
| 373 | return romfs_factory->Open(title_id, storage_id, type); | 373 | return romfs_factory->Open(title_id, storage_id, type); |
| 374 | } | 374 | } |
| 375 | 375 | ||
| 376 | std::shared_ptr<FileSys::NCA> FileSystemController::OpenBaseNca( | ||
| 377 | u64 title_id, FileSys::StorageId storage_id, FileSys::ContentRecordType type) const { | ||
| 378 | return romfs_factory->GetEntry(title_id, storage_id, type); | ||
| 379 | } | ||
| 380 | |||
| 376 | Result FileSystemController::CreateSaveData(FileSys::VirtualDir* out_save_data, | 381 | Result FileSystemController::CreateSaveData(FileSys::VirtualDir* out_save_data, |
| 377 | FileSys::SaveDataSpaceId space, | 382 | FileSys::SaveDataSpaceId space, |
| 378 | const FileSys::SaveDataAttribute& save_struct) const { | 383 | const FileSys::SaveDataAttribute& save_struct) const { |
diff --git a/src/core/hle/service/filesystem/filesystem.h b/src/core/hle/service/filesystem/filesystem.h index fd991f976..e7e7c4c28 100644 --- a/src/core/hle/service/filesystem/filesystem.h +++ b/src/core/hle/service/filesystem/filesystem.h | |||
| @@ -15,6 +15,7 @@ class System; | |||
| 15 | 15 | ||
| 16 | namespace FileSys { | 16 | namespace FileSys { |
| 17 | class BISFactory; | 17 | class BISFactory; |
| 18 | class NCA; | ||
| 18 | class RegisteredCache; | 19 | class RegisteredCache; |
| 19 | class RegisteredCacheUnion; | 20 | class RegisteredCacheUnion; |
| 20 | class PlaceholderCache; | 21 | class PlaceholderCache; |
| @@ -70,6 +71,8 @@ public: | |||
| 70 | FileSys::ContentRecordType type) const; | 71 | FileSys::ContentRecordType type) const; |
| 71 | FileSys::VirtualFile OpenRomFS(u64 title_id, FileSys::StorageId storage_id, | 72 | FileSys::VirtualFile OpenRomFS(u64 title_id, FileSys::StorageId storage_id, |
| 72 | FileSys::ContentRecordType type) const; | 73 | FileSys::ContentRecordType type) const; |
| 74 | std::shared_ptr<FileSys::NCA> OpenBaseNca(u64 title_id, FileSys::StorageId storage_id, | ||
| 75 | FileSys::ContentRecordType type) const; | ||
| 73 | 76 | ||
| 74 | Result CreateSaveData(FileSys::VirtualDir* out_save_data, FileSys::SaveDataSpaceId space, | 77 | Result CreateSaveData(FileSys::VirtualDir* out_save_data, FileSys::SaveDataSpaceId space, |
| 75 | const FileSys::SaveDataAttribute& save_struct) const; | 78 | const FileSys::SaveDataAttribute& save_struct) const; |
diff --git a/src/core/hle/service/filesystem/fsp_srv.cpp b/src/core/hle/service/filesystem/fsp_srv.cpp index 423a814cb..6e4d26b1e 100644 --- a/src/core/hle/service/filesystem/fsp_srv.cpp +++ b/src/core/hle/service/filesystem/fsp_srv.cpp | |||
| @@ -1029,8 +1029,9 @@ void FSP_SRV::OpenDataStorageByDataId(HLERequestContext& ctx) { | |||
| 1029 | 1029 | ||
| 1030 | const FileSys::PatchManager pm{title_id, fsc, content_provider}; | 1030 | const FileSys::PatchManager pm{title_id, fsc, content_provider}; |
| 1031 | 1031 | ||
| 1032 | auto base = fsc.OpenBaseNca(title_id, storage_id, FileSys::ContentRecordType::Data); | ||
| 1032 | auto storage = std::make_shared<IStorage>( | 1033 | auto storage = std::make_shared<IStorage>( |
| 1033 | system, pm.PatchRomFS(std::move(data), 0, FileSys::ContentRecordType::Data)); | 1034 | system, pm.PatchRomFS(base.get(), std::move(data), FileSys::ContentRecordType::Data)); |
| 1034 | 1035 | ||
| 1035 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 1036 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 1036 | rb.Push(ResultSuccess); | 1037 | rb.Push(ResultSuccess); |