mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu-mainline.git
				synced 2025-03-21 01:53:15 +00:00 
			
		
		
		
	file_sys/romfs_factory: Eliminate usage of the global system accessor
This commit is contained in:
		
							parent
							
								
									0e80567bef
								
							
						
					
					
						commit
						a62c1999c5
					
				| @ -6,7 +6,6 @@ | ||||
| #include "common/assert.h" | ||||
| #include "common/common_types.h" | ||||
| #include "common/logging/log.h" | ||||
| #include "core/core.h" | ||||
| #include "core/file_sys/card_image.h" | ||||
| #include "core/file_sys/content_archive.h" | ||||
| #include "core/file_sys/nca_metadata.h" | ||||
| @ -19,7 +18,9 @@ | ||||
| 
 | ||||
| namespace FileSys { | ||||
| 
 | ||||
| RomFSFactory::RomFSFactory(Loader::AppLoader& app_loader) { | ||||
| RomFSFactory::RomFSFactory(Loader::AppLoader& app_loader, ContentProvider& provider, | ||||
|                            Service::FileSystem::FileSystemController& controller) | ||||
|     : content_provider{provider}, filesystem_controller{controller} { | ||||
|     // Load the RomFS from the app
 | ||||
|     if (app_loader.ReadRomFS(file) != Loader::ResultStatus::Success) { | ||||
|         LOG_ERROR(Service_FS, "Unable to read RomFS!"); | ||||
| @ -46,39 +47,38 @@ ResultVal<VirtualFile> RomFSFactory::OpenCurrentProcess(u64 current_process_titl | ||||
| 
 | ||||
| ResultVal<VirtualFile> RomFSFactory::Open(u64 title_id, StorageId storage, | ||||
|                                           ContentRecordType type) const { | ||||
|     std::shared_ptr<NCA> res; | ||||
| 
 | ||||
|     switch (storage) { | ||||
|     case StorageId::None: | ||||
|         res = Core::System::GetInstance().GetContentProvider().GetEntry(title_id, type); | ||||
|         break; | ||||
|     case StorageId::NandSystem: | ||||
|         res = | ||||
|             Core::System::GetInstance().GetFileSystemController().GetSystemNANDContents()->GetEntry( | ||||
|                 title_id, type); | ||||
|         break; | ||||
|     case StorageId::NandUser: | ||||
|         res = Core::System::GetInstance().GetFileSystemController().GetUserNANDContents()->GetEntry( | ||||
|             title_id, type); | ||||
|         break; | ||||
|     case StorageId::SdCard: | ||||
|         res = Core::System::GetInstance().GetFileSystemController().GetSDMCContents()->GetEntry( | ||||
|             title_id, type); | ||||
|         break; | ||||
|     default: | ||||
|         UNIMPLEMENTED_MSG("Unimplemented storage_id={:02X}", static_cast<u8>(storage)); | ||||
|     } | ||||
| 
 | ||||
|     const std::shared_ptr<NCA> res = GetEntry(title_id, storage, type); | ||||
|     if (res == nullptr) { | ||||
|         // TODO(DarkLordZach): Find the right error code to use here
 | ||||
|         return RESULT_UNKNOWN; | ||||
|     } | ||||
| 
 | ||||
|     const auto romfs = res->GetRomFS(); | ||||
|     if (romfs == nullptr) { | ||||
|         // TODO(DarkLordZach): Find the right error code to use here
 | ||||
|         return RESULT_UNKNOWN; | ||||
|     } | ||||
| 
 | ||||
|     return MakeResult<VirtualFile>(romfs); | ||||
| } | ||||
| 
 | ||||
| std::shared_ptr<NCA> RomFSFactory::GetEntry(u64 title_id, StorageId storage, | ||||
|                                             ContentRecordType type) const { | ||||
|     switch (storage) { | ||||
|     case StorageId::None: | ||||
|         return content_provider.GetEntry(title_id, type); | ||||
|     case StorageId::NandSystem: | ||||
|         return filesystem_controller.GetSystemNANDContents()->GetEntry(title_id, type); | ||||
|     case StorageId::NandUser: | ||||
|         return filesystem_controller.GetUserNANDContents()->GetEntry(title_id, type); | ||||
|     case StorageId::SdCard: | ||||
|         return filesystem_controller.GetSDMCContents()->GetEntry(title_id, type); | ||||
|     case StorageId::Host: | ||||
|     case StorageId::GameCard: | ||||
|     default: | ||||
|         UNIMPLEMENTED_MSG("Unimplemented storage_id={:02X}", static_cast<u8>(storage)); | ||||
|         return nullptr; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| } // namespace FileSys
 | ||||
|  | ||||
| @ -13,8 +13,15 @@ namespace Loader { | ||||
| class AppLoader; | ||||
| } // namespace Loader
 | ||||
| 
 | ||||
| namespace Service::FileSystem { | ||||
| class FileSystemController; | ||||
| } | ||||
| 
 | ||||
| namespace FileSys { | ||||
| 
 | ||||
| class ContentProvider; | ||||
| class NCA; | ||||
| 
 | ||||
| enum class ContentRecordType : u8; | ||||
| 
 | ||||
| enum class StorageId : u8 { | ||||
| @ -29,18 +36,26 @@ enum class StorageId : u8 { | ||||
| /// File system interface to the RomFS archive
 | ||||
| class RomFSFactory { | ||||
| public: | ||||
|     explicit RomFSFactory(Loader::AppLoader& app_loader); | ||||
|     explicit RomFSFactory(Loader::AppLoader& app_loader, ContentProvider& provider, | ||||
|                           Service::FileSystem::FileSystemController& controller); | ||||
|     ~RomFSFactory(); | ||||
| 
 | ||||
|     void SetPackedUpdate(VirtualFile update_raw); | ||||
|     ResultVal<VirtualFile> OpenCurrentProcess(u64 current_process_title_id) const; | ||||
|     ResultVal<VirtualFile> Open(u64 title_id, StorageId storage, ContentRecordType type) const; | ||||
|     [[nodiscard]] ResultVal<VirtualFile> OpenCurrentProcess(u64 current_process_title_id) const; | ||||
|     [[nodiscard]] ResultVal<VirtualFile> Open(u64 title_id, StorageId storage, | ||||
|                                               ContentRecordType type) const; | ||||
| 
 | ||||
| private: | ||||
|     [[nodiscard]] std::shared_ptr<NCA> GetEntry(u64 title_id, StorageId storage, | ||||
|                                                 ContentRecordType type) const; | ||||
| 
 | ||||
|     VirtualFile file; | ||||
|     VirtualFile update_raw; | ||||
|     bool updatable; | ||||
|     u64 ivfc_offset; | ||||
| 
 | ||||
|     ContentProvider& content_provider; | ||||
|     Service::FileSystem::FileSystemController& filesystem_controller; | ||||
| }; | ||||
| 
 | ||||
| } // namespace FileSys
 | ||||
|  | ||||
| @ -192,8 +192,8 @@ AppLoader_DeconstructedRomDirectory::LoadResult AppLoader_DeconstructedRomDirect | ||||
|     // Register the RomFS if a ".romfs" file was found
 | ||||
|     if (romfs_iter != files.end() && *romfs_iter != nullptr) { | ||||
|         romfs = *romfs_iter; | ||||
|         system.GetFileSystemController().RegisterRomFS( | ||||
|             std::make_unique<FileSys::RomFSFactory>(*this)); | ||||
|         system.GetFileSystemController().RegisterRomFS(std::make_unique<FileSys::RomFSFactory>( | ||||
|             *this, system.GetContentProvider(), system.GetFileSystemController())); | ||||
|     } | ||||
| 
 | ||||
|     is_loaded = true; | ||||
|  | ||||
| @ -58,8 +58,8 @@ AppLoader_NCA::LoadResult AppLoader_NCA::Load(Kernel::Process& process, Core::Sy | ||||
|     } | ||||
| 
 | ||||
|     if (nca->GetRomFS() != nullptr && nca->GetRomFS()->GetSize() > 0) { | ||||
|         system.GetFileSystemController().RegisterRomFS( | ||||
|             std::make_unique<FileSys::RomFSFactory>(*this)); | ||||
|         system.GetFileSystemController().RegisterRomFS(std::make_unique<FileSys::RomFSFactory>( | ||||
|             *this, system.GetContentProvider(), system.GetFileSystemController())); | ||||
|     } | ||||
| 
 | ||||
|     is_loaded = true; | ||||
|  | ||||
| @ -218,8 +218,8 @@ AppLoader_NRO::LoadResult AppLoader_NRO::Load(Kernel::Process& process, Core::Sy | ||||
|     } | ||||
| 
 | ||||
|     if (romfs != nullptr) { | ||||
|         system.GetFileSystemController().RegisterRomFS( | ||||
|             std::make_unique<FileSys::RomFSFactory>(*this)); | ||||
|         system.GetFileSystemController().RegisterRomFS(std::make_unique<FileSys::RomFSFactory>( | ||||
|             *this, system.GetContentProvider(), system.GetFileSystemController())); | ||||
|     } | ||||
| 
 | ||||
|     is_loaded = true; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Lioncash
						Lioncash