mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-10-30 23:49:01 -05:00 
			
		
		
		
	yuzu: Port old usages of Filesystem namespace to FilesystemController
This commit is contained in:
		| @@ -26,6 +26,7 @@ | ||||
| #include "core/hle/service/filesystem/fsp_pr.h" | ||||
| #include "core/hle/service/filesystem/fsp_srv.h" | ||||
| #include "core/loader/loader.h" | ||||
| #include "core/settings.h" | ||||
|  | ||||
| namespace Service::FileSystem { | ||||
|  | ||||
|   | ||||
| @@ -19,6 +19,7 @@ | ||||
| #include "core/file_sys/mode.h" | ||||
| #include "core/file_sys/nca_metadata.h" | ||||
| #include "core/file_sys/patch_manager.h" | ||||
| #include "core/file_sys/romfs_factory.h" | ||||
| #include "core/file_sys/savedata_factory.h" | ||||
| #include "core/file_sys/system_archive/system_archive.h" | ||||
| #include "core/file_sys/vfs.h" | ||||
| @@ -502,8 +503,8 @@ private: | ||||
|  | ||||
| class ISaveDataInfoReader final : public ServiceFramework<ISaveDataInfoReader> { | ||||
| public: | ||||
|     explicit ISaveDataInfoReader(FileSys::SaveDataSpaceId space) | ||||
|         : ServiceFramework("ISaveDataInfoReader") { | ||||
|     explicit ISaveDataInfoReader(FileSys::SaveDataSpaceId space, FileSystemController& fsc) | ||||
|         : ServiceFramework("ISaveDataInfoReader"), fsc(fsc) { | ||||
|         static const FunctionInfo functions[] = { | ||||
|             {0, &ISaveDataInfoReader::ReadSaveDataInfo, "ReadSaveDataInfo"}, | ||||
|         }; | ||||
| @@ -549,8 +550,13 @@ private: | ||||
|     } | ||||
|  | ||||
|     void FindAllSaves(FileSys::SaveDataSpaceId space) { | ||||
|         const auto save_root = OpenSaveDataSpace(space); | ||||
|         ASSERT(save_root.Succeeded()); | ||||
|         const auto save_root = fsc.OpenSaveDataSpace(space); | ||||
|  | ||||
|         if (save_root.Failed() || *save_root == nullptr) { | ||||
|             LOG_ERROR(Service_FS, "The save root for the space_id={:02X} was invalid!", | ||||
|                       static_cast<u8>(space)); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         for (const auto& type : (*save_root)->GetSubdirectories()) { | ||||
|             if (type->GetName() == "save") { | ||||
| @@ -639,11 +645,12 @@ private: | ||||
|     }; | ||||
|     static_assert(sizeof(SaveDataInfo) == 0x60, "SaveDataInfo has incorrect size."); | ||||
|  | ||||
|     FileSystemController& fsc; | ||||
|     std::vector<SaveDataInfo> info; | ||||
|     u64 next_entry_index = 0; | ||||
| }; | ||||
|  | ||||
| FSP_SRV::FSP_SRV(const Core::Reporter& reporter) : ServiceFramework("fsp-srv"), reporter(reporter) { | ||||
| FSP_SRV::FSP_SRV(FileSystemController& fsc) : ServiceFramework("fsp-srv"), fsc(fsc) { | ||||
|     // clang-format off | ||||
|     static const FunctionInfo functions[] = { | ||||
|         {0, nullptr, "OpenFileSystem"}, | ||||
| @@ -783,7 +790,8 @@ void FSP_SRV::OpenFileSystemWithPatch(Kernel::HLERequestContext& ctx) { | ||||
| void FSP_SRV::OpenSdCardFileSystem(Kernel::HLERequestContext& ctx) { | ||||
|     LOG_DEBUG(Service_FS, "called"); | ||||
|  | ||||
|     IFileSystem filesystem(OpenSDMC().Unwrap()); | ||||
|     IFileSystem filesystem(fsc.OpenSDMC().Unwrap(), | ||||
|                            SizeGetter::FromStorageId(fsc, FileSys::StorageId::SdCard)); | ||||
|  | ||||
|     IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | ||||
|     rb.Push(RESULT_SUCCESS); | ||||
| @@ -797,8 +805,10 @@ void FSP_SRV::CreateSaveDataFileSystem(Kernel::HLERequestContext& ctx) { | ||||
|     auto save_create_struct = rp.PopRaw<std::array<u8, 0x40>>(); | ||||
|     u128 uid = rp.PopRaw<u128>(); | ||||
|  | ||||
|     LOG_WARNING(Service_FS, "(STUBBED) called save_struct = {}, uid = {:016X}{:016X}", | ||||
|                 save_struct.DebugInfo(), uid[1], uid[0]); | ||||
|     LOG_DEBUG(Service_FS, "called save_struct = {}, uid = {:016X}{:016X}", save_struct.DebugInfo(), | ||||
|               uid[1], uid[0]); | ||||
|  | ||||
|     fsc.CreateSaveData(FileSys::SaveDataSpaceId::NandUser, save_struct); | ||||
|  | ||||
|     IPC::ResponseBuilder rb{ctx, 2}; | ||||
|     rb.Push(RESULT_SUCCESS); | ||||
| @@ -815,14 +825,24 @@ void FSP_SRV::OpenSaveDataFileSystem(Kernel::HLERequestContext& ctx) { | ||||
|     IPC::RequestParser rp{ctx}; | ||||
|     const auto parameters = rp.PopRaw<Parameters>(); | ||||
|  | ||||
|     auto dir = OpenSaveData(parameters.save_data_space_id, parameters.descriptor); | ||||
|     auto dir = fsc.OpenSaveData(parameters.save_data_space_id, parameters.descriptor); | ||||
|     if (dir.Failed()) { | ||||
|         IPC::ResponseBuilder rb{ctx, 2, 0, 0}; | ||||
|         rb.Push(FileSys::ERROR_ENTITY_NOT_FOUND); | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     IFileSystem filesystem(std::move(dir.Unwrap())); | ||||
|     FileSys::StorageId id; | ||||
|     if (parameters.save_data_space_id == FileSys::SaveDataSpaceId::NandUser) { | ||||
|         id = FileSys::StorageId::NandUser; | ||||
|     } else if (parameters.save_data_space_id == FileSys::SaveDataSpaceId::SdCardSystem || | ||||
|                parameters.save_data_space_id == FileSys::SaveDataSpaceId::SdCardUser) { | ||||
|         id = FileSys::StorageId::SdCard; | ||||
|     } else { | ||||
|         id = FileSys::StorageId::NandSystem; | ||||
|     } | ||||
|  | ||||
|     IFileSystem filesystem(std::move(dir.Unwrap()), SizeGetter::FromStorageId(fsc, id)); | ||||
|  | ||||
|     IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | ||||
|     rb.Push(RESULT_SUCCESS); | ||||
| @@ -841,7 +861,7 @@ void FSP_SRV::OpenSaveDataInfoReaderBySaveDataSpaceId(Kernel::HLERequestContext& | ||||
|  | ||||
|     IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | ||||
|     rb.Push(RESULT_SUCCESS); | ||||
|     rb.PushIpcInterface<ISaveDataInfoReader>(std::make_shared<ISaveDataInfoReader>(space)); | ||||
|     rb.PushIpcInterface<ISaveDataInfoReader>(std::make_shared<ISaveDataInfoReader>(space, fsc)); | ||||
| } | ||||
|  | ||||
| void FSP_SRV::SetGlobalAccessLogMode(Kernel::HLERequestContext& ctx) { | ||||
| @@ -865,7 +885,7 @@ void FSP_SRV::GetGlobalAccessLogMode(Kernel::HLERequestContext& ctx) { | ||||
| void FSP_SRV::OpenDataStorageByCurrentProcess(Kernel::HLERequestContext& ctx) { | ||||
|     LOG_DEBUG(Service_FS, "called"); | ||||
|  | ||||
|     auto romfs = OpenRomFSCurrentProcess(); | ||||
|     auto romfs = fsc.OpenRomFSCurrentProcess(); | ||||
|     if (romfs.Failed()) { | ||||
|         // TODO (bunnei): Find the right error code to use here | ||||
|         LOG_CRITICAL(Service_FS, "no file system interface available!"); | ||||
| @@ -890,7 +910,7 @@ void FSP_SRV::OpenDataStorageByDataId(Kernel::HLERequestContext& ctx) { | ||||
|     LOG_DEBUG(Service_FS, "called with storage_id={:02X}, unknown={:08X}, title_id={:016X}", | ||||
|               static_cast<u8>(storage_id), unknown, title_id); | ||||
|  | ||||
|     auto data = OpenRomFS(title_id, storage_id, FileSys::ContentRecordType::Data); | ||||
|     auto data = fsc.OpenRomFS(title_id, storage_id, FileSys::ContentRecordType::Data); | ||||
|  | ||||
|     if (data.Failed()) { | ||||
|         const auto archive = FileSys::SystemArchive::SynthesizeSystemArchive(title_id); | ||||
|   | ||||
| @@ -32,7 +32,7 @@ enum class LogMode : u32 { | ||||
|  | ||||
| class FSP_SRV final : public ServiceFramework<FSP_SRV> { | ||||
| public: | ||||
|     explicit FSP_SRV(const Core::Reporter& reporter); | ||||
|     explicit FSP_SRV(FileSystemController& fsc); | ||||
|     ~FSP_SRV() override; | ||||
|  | ||||
| private: | ||||
| @@ -51,6 +51,8 @@ private: | ||||
|     void OutputAccessLogToSdCard(Kernel::HLERequestContext& ctx); | ||||
|     void GetAccessLogVersionInfo(Kernel::HLERequestContext& ctx); | ||||
|  | ||||
|     FileSystemController& fsc; | ||||
|  | ||||
|     FileSys::VirtualFile romfs; | ||||
|     u64 current_process_id = 0; | ||||
|     u32 access_log_program_index = 0; | ||||
|   | ||||
| @@ -230,7 +230,7 @@ void Init(std::shared_ptr<SM::ServiceManager>& sm, Core::System& system) { | ||||
|     Migration::InstallInterfaces(*sm); | ||||
|     Mii::InstallInterfaces(*sm); | ||||
|     MM::InstallInterfaces(*sm); | ||||
|     NCM::InstallInterfaces(*sm, fsc); | ||||
|     NCM::InstallInterfaces(*sm); | ||||
|     NFC::InstallInterfaces(*sm); | ||||
|     NFP::InstallInterfaces(*sm); | ||||
|     NIFM::InstallInterfaces(*sm); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Zach Hilman
					Zach Hilman