summaryrefslogtreecommitdiff
path: root/src/core/hle/service/filesystem
diff options
context:
space:
mode:
authorGravatar Liam2023-08-10 21:34:43 -0400
committerGravatar Liam2023-08-15 17:47:25 -0400
commit86f6b6b7b2d930e8203114332b04a5c49a780b06 (patch)
treebf7ff58b0a36051d3c3489a40999d80357c570d0 /src/core/hle/service/filesystem
parentMerge pull request #11287 from liamwhite/replaced-bytes (diff)
downloadyuzu-86f6b6b7b2d930e8203114332b04a5c49a780b06.tar.gz
yuzu-86f6b6b7b2d930e8203114332b04a5c49a780b06.tar.xz
yuzu-86f6b6b7b2d930e8203114332b04a5c49a780b06.zip
vfs: expand support for NCA reading
Diffstat (limited to 'src/core/hle/service/filesystem')
-rw-r--r--src/core/hle/service/filesystem/filesystem.cpp5
-rw-r--r--src/core/hle/service/filesystem/filesystem.h3
-rw-r--r--src/core/hle/service/filesystem/fsp_srv.cpp7
3 files changed, 12 insertions, 3 deletions
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
376std::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
376Result FileSystemController::CreateSaveData(FileSys::VirtualDir* out_save_data, 381Result 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
16namespace FileSys { 16namespace FileSys {
17class BISFactory; 17class BISFactory;
18class NCA;
18class RegisteredCache; 19class RegisteredCache;
19class RegisteredCacheUnion; 20class RegisteredCacheUnion;
20class PlaceholderCache; 21class 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..eaaf8cdd9 100644
--- a/src/core/hle/service/filesystem/fsp_srv.cpp
+++ b/src/core/hle/service/filesystem/fsp_srv.cpp
@@ -310,8 +310,8 @@ private:
310class IFileSystem final : public ServiceFramework<IFileSystem> { 310class IFileSystem final : public ServiceFramework<IFileSystem> {
311public: 311public:
312 explicit IFileSystem(Core::System& system_, FileSys::VirtualDir backend_, SizeGetter size_) 312 explicit IFileSystem(Core::System& system_, FileSys::VirtualDir backend_, SizeGetter size_)
313 : ServiceFramework{system_, "IFileSystem"}, backend{std::move(backend_)}, size{std::move( 313 : ServiceFramework{system_, "IFileSystem"}, backend{std::move(backend_)},
314 size_)} { 314 size{std::move(size_)} {
315 static const FunctionInfo functions[] = { 315 static const FunctionInfo functions[] = {
316 {0, &IFileSystem::CreateFile, "CreateFile"}, 316 {0, &IFileSystem::CreateFile, "CreateFile"},
317 {1, &IFileSystem::DeleteFile, "DeleteFile"}, 317 {1, &IFileSystem::DeleteFile, "DeleteFile"},
@@ -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);