mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-10-31 07:59:02 -05:00 
			
		
		
		
	filesystem: Make CreateFactories() and InstallInterface() take a VfsFilesystem instance by reference
Neither of these functions alter the ownership of the provided pointer, so we can simply make the parameters a reference rather than a direct shared pointer alias. This way we also disallow passing incorrect memory values like nullptr.
This commit is contained in:
		| @@ -361,19 +361,19 @@ FileSys::VirtualDir GetModificationLoadRoot(u64 title_id) { | ||||
|     return bis_factory->GetModificationLoadRoot(title_id); | ||||
| } | ||||
|  | ||||
| void CreateFactories(const FileSys::VirtualFilesystem& vfs, bool overwrite) { | ||||
| void CreateFactories(FileSys::VfsFilesystem& vfs, bool overwrite) { | ||||
|     if (overwrite) { | ||||
|         bis_factory = nullptr; | ||||
|         save_data_factory = nullptr; | ||||
|         sdmc_factory = nullptr; | ||||
|     } | ||||
|  | ||||
|     auto nand_directory = vfs->OpenDirectory(FileUtil::GetUserPath(FileUtil::UserPath::NANDDir), | ||||
|                                              FileSys::Mode::ReadWrite); | ||||
|     auto sd_directory = vfs->OpenDirectory(FileUtil::GetUserPath(FileUtil::UserPath::SDMCDir), | ||||
|                                            FileSys::Mode::ReadWrite); | ||||
|     auto load_directory = vfs->OpenDirectory(FileUtil::GetUserPath(FileUtil::UserPath::LoadDir), | ||||
|                                              FileSys::Mode::ReadWrite); | ||||
|     auto nand_directory = vfs.OpenDirectory(FileUtil::GetUserPath(FileUtil::UserPath::NANDDir), | ||||
|                                             FileSys::Mode::ReadWrite); | ||||
|     auto sd_directory = vfs.OpenDirectory(FileUtil::GetUserPath(FileUtil::UserPath::SDMCDir), | ||||
|                                           FileSys::Mode::ReadWrite); | ||||
|     auto load_directory = vfs.OpenDirectory(FileUtil::GetUserPath(FileUtil::UserPath::LoadDir), | ||||
|                                             FileSys::Mode::ReadWrite); | ||||
|  | ||||
|     if (bis_factory == nullptr) | ||||
|         bis_factory = std::make_unique<FileSys::BISFactory>(nand_directory, load_directory); | ||||
| @@ -383,7 +383,7 @@ void CreateFactories(const FileSys::VirtualFilesystem& vfs, bool overwrite) { | ||||
|         sdmc_factory = std::make_unique<FileSys::SDMCFactory>(std::move(sd_directory)); | ||||
| } | ||||
|  | ||||
| void InstallInterfaces(SM::ServiceManager& service_manager, const FileSys::VirtualFilesystem& vfs) { | ||||
| void InstallInterfaces(SM::ServiceManager& service_manager, FileSys::VfsFilesystem& vfs) { | ||||
|     romfs_factory = nullptr; | ||||
|     CreateFactories(vfs, false); | ||||
|     std::make_shared<FSP_LDR>()->InstallAsService(service_manager); | ||||
|   | ||||
| @@ -57,9 +57,9 @@ FileSys::VirtualDir GetModificationLoadRoot(u64 title_id); | ||||
|  | ||||
| // Creates the SaveData, SDMC, and BIS Factories. Should be called once and before any function | ||||
| // above is called. | ||||
| void CreateFactories(const FileSys::VirtualFilesystem& vfs, bool overwrite = true); | ||||
| void CreateFactories(FileSys::VfsFilesystem& vfs, bool overwrite = true); | ||||
|  | ||||
| void InstallInterfaces(SM::ServiceManager& service_manager, const FileSys::VirtualFilesystem& vfs); | ||||
| void InstallInterfaces(SM::ServiceManager& service_manager, FileSys::VfsFilesystem& vfs); | ||||
|  | ||||
| // A class that wraps a VfsDirectory with methods that return ResultVal and ResultCode instead of | ||||
| // pointers and booleans. This makes using a VfsDirectory with switch services much easier and | ||||
|   | ||||
| @@ -197,7 +197,7 @@ ResultCode ServiceFrameworkBase::HandleSyncRequest(Kernel::HLERequestContext& co | ||||
| // Module interface | ||||
|  | ||||
| /// Initialize ServiceManager | ||||
| void Init(std::shared_ptr<SM::ServiceManager>& sm, const FileSys::VirtualFilesystem& rfs) { | ||||
| void Init(std::shared_ptr<SM::ServiceManager>& sm, FileSys::VfsFilesystem& vfs) { | ||||
|     // NVFlinger needs to be accessed by several services like Vi and AppletOE so we instantiate it | ||||
|     // here and pass it into the respective InstallInterfaces functions. | ||||
|     auto nv_flinger = std::make_shared<NVFlinger::NVFlinger>(); | ||||
| @@ -220,7 +220,7 @@ void Init(std::shared_ptr<SM::ServiceManager>& sm, const FileSys::VirtualFilesys | ||||
|     EUPLD::InstallInterfaces(*sm); | ||||
|     Fatal::InstallInterfaces(*sm); | ||||
|     FGM::InstallInterfaces(*sm); | ||||
|     FileSystem::InstallInterfaces(*sm, rfs); | ||||
|     FileSystem::InstallInterfaces(*sm, vfs); | ||||
|     Friend::InstallInterfaces(*sm); | ||||
|     GRC::InstallInterfaces(*sm); | ||||
|     HID::InstallInterfaces(*sm); | ||||
|   | ||||
| @@ -180,8 +180,7 @@ private: | ||||
| }; | ||||
|  | ||||
| /// Initialize ServiceManager | ||||
| void Init(std::shared_ptr<SM::ServiceManager>& sm, | ||||
|           const std::shared_ptr<FileSys::VfsFilesystem>& vfs); | ||||
| void Init(std::shared_ptr<SM::ServiceManager>& sm, FileSys::VfsFilesystem& vfs); | ||||
|  | ||||
| /// Shutdown ServiceManager | ||||
| void Shutdown(); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Lioncash
					Lioncash