mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 13:50:03 +00:00 
			
		
		
		
	loader: use self NCCH archive
This commit is contained in:
		
							parent
							
								
									a0df747325
								
							
						
					
					
						commit
						20544977da
					
				
					 6 changed files with 7 additions and 90 deletions
				
			
		|  | @ -20,7 +20,6 @@ set(SRCS | |||
|             file_sys/archive_extsavedata.cpp | ||||
|             file_sys/archive_ncch.cpp | ||||
|             file_sys/archive_other_savedata.cpp | ||||
|             file_sys/archive_romfs.cpp | ||||
|             file_sys/archive_savedata.cpp | ||||
|             file_sys/archive_sdmc.cpp | ||||
|             file_sys/archive_sdmcwriteonly.cpp | ||||
|  | @ -198,7 +197,6 @@ set(HEADERS | |||
|             file_sys/archive_extsavedata.h | ||||
|             file_sys/archive_ncch.h | ||||
|             file_sys/archive_other_savedata.h | ||||
|             file_sys/archive_romfs.h | ||||
|             file_sys/archive_savedata.h | ||||
|             file_sys/archive_sdmc.h | ||||
|             file_sys/archive_sdmcwriteonly.h | ||||
|  |  | |||
|  | @ -1,43 +0,0 @@ | |||
| // Copyright 2014 Citra Emulator Project
 | ||||
| // Licensed under GPLv2 or any later version
 | ||||
| // Refer to the license.txt file included.
 | ||||
| 
 | ||||
| #include <algorithm> | ||||
| #include <memory> | ||||
| #include "common/common_types.h" | ||||
| #include "common/logging/log.h" | ||||
| #include "core/file_sys/archive_romfs.h" | ||||
| #include "core/file_sys/ivfc_archive.h" | ||||
| 
 | ||||
| ////////////////////////////////////////////////////////////////////////////////////////////////////
 | ||||
| // FileSys namespace
 | ||||
| 
 | ||||
| namespace FileSys { | ||||
| 
 | ||||
| ArchiveFactory_RomFS::ArchiveFactory_RomFS(Loader::AppLoader& app_loader) { | ||||
|     // Load the RomFS from the app
 | ||||
|     if (Loader::ResultStatus::Success != app_loader.ReadRomFS(romfs_file, data_offset, data_size)) { | ||||
|         LOG_ERROR(Service_FS, "Unable to read RomFS!"); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| ResultVal<std::unique_ptr<ArchiveBackend>> ArchiveFactory_RomFS::Open(const Path& path) { | ||||
|     auto archive = std::make_unique<IVFCArchive>(romfs_file, data_offset, data_size); | ||||
|     return MakeResult<std::unique_ptr<ArchiveBackend>>(std::move(archive)); | ||||
| } | ||||
| 
 | ||||
| ResultCode ArchiveFactory_RomFS::Format(const Path& path, | ||||
|                                         const FileSys::ArchiveFormatInfo& format_info) { | ||||
|     LOG_ERROR(Service_FS, "Attempted to format a RomFS archive."); | ||||
|     // TODO: Verify error code
 | ||||
|     return ResultCode(ErrorDescription::NotAuthorized, ErrorModule::FS, ErrorSummary::NotSupported, | ||||
|                       ErrorLevel::Permanent); | ||||
| } | ||||
| 
 | ||||
| ResultVal<ArchiveFormatInfo> ArchiveFactory_RomFS::GetFormatInfo(const Path& path) const { | ||||
|     // TODO(Subv): Implement
 | ||||
|     LOG_ERROR(Service_FS, "Unimplemented GetFormatInfo archive %s", GetName().c_str()); | ||||
|     return ResultCode(-1); | ||||
| } | ||||
| 
 | ||||
| } // namespace FileSys
 | ||||
|  | @ -1,38 +0,0 @@ | |||
| // Copyright 2014 Citra Emulator Project
 | ||||
| // Licensed under GPLv2 or any later version
 | ||||
| // Refer to the license.txt file included.
 | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include <memory> | ||||
| #include <string> | ||||
| #include <vector> | ||||
| #include "common/common_types.h" | ||||
| #include "core/file_sys/archive_backend.h" | ||||
| #include "core/hle/result.h" | ||||
| #include "core/loader/loader.h" | ||||
| 
 | ||||
| ////////////////////////////////////////////////////////////////////////////////////////////////////
 | ||||
| // FileSys namespace
 | ||||
| 
 | ||||
| namespace FileSys { | ||||
| 
 | ||||
| /// File system interface to the RomFS archive
 | ||||
| class ArchiveFactory_RomFS final : public ArchiveFactory { | ||||
| public: | ||||
|     explicit ArchiveFactory_RomFS(Loader::AppLoader& app_loader); | ||||
| 
 | ||||
|     std::string GetName() const override { | ||||
|         return "RomFS"; | ||||
|     } | ||||
|     ResultVal<std::unique_ptr<ArchiveBackend>> Open(const Path& path) override; | ||||
|     ResultCode Format(const Path& path, const FileSys::ArchiveFormatInfo& format_info) override; | ||||
|     ResultVal<ArchiveFormatInfo> GetFormatInfo(const Path& path) const override; | ||||
| 
 | ||||
| private: | ||||
|     std::shared_ptr<FileUtil::IOFile> romfs_file; | ||||
|     u64 data_offset; | ||||
|     u64 data_size; | ||||
| }; | ||||
| 
 | ||||
| } // namespace FileSys
 | ||||
|  | @ -26,7 +26,7 @@ namespace FS { | |||
| 
 | ||||
| /// Supported archive types
 | ||||
| enum class ArchiveIdCode : u32 { | ||||
|     RomFS = 0x00000003, | ||||
|     SelfNCCH = 0x00000003, | ||||
|     SaveData = 0x00000004, | ||||
|     ExtSaveData = 0x00000006, | ||||
|     SharedExtSaveData = 0x00000007, | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ | |||
| #include <algorithm> | ||||
| #include <vector> | ||||
| #include "common/logging/log.h" | ||||
| #include "core/file_sys/archive_romfs.h" | ||||
| #include "core/file_sys/archive_selfncch.h" | ||||
| #include "core/hle/kernel/process.h" | ||||
| #include "core/hle/kernel/resource_limit.h" | ||||
| #include "core/hle/service/fs/archive.h" | ||||
|  | @ -277,8 +277,8 @@ ResultStatus AppLoader_THREEDSX::Load() { | |||
| 
 | ||||
|     Kernel::g_current_process->Run(48, Kernel::DEFAULT_STACK_SIZE); | ||||
| 
 | ||||
|     Service::FS::RegisterArchiveType(std::make_unique<FileSys::ArchiveFactory_RomFS>(*this), | ||||
|                                      Service::FS::ArchiveIdCode::RomFS); | ||||
|     Service::FS::RegisterArchiveType(std::make_unique<FileSys::ArchiveFactory_SelfNCCH>(*this), | ||||
|                                      Service::FS::ArchiveIdCode::SelfNCCH); | ||||
| 
 | ||||
|     is_loaded = true; | ||||
|     return ResultStatus::Success; | ||||
|  |  | |||
|  | @ -8,7 +8,7 @@ | |||
| #include "common/logging/log.h" | ||||
| #include "common/string_util.h" | ||||
| #include "common/swap.h" | ||||
| #include "core/file_sys/archive_romfs.h" | ||||
| #include "core/file_sys/archive_selfncch.h" | ||||
| #include "core/hle/kernel/process.h" | ||||
| #include "core/hle/kernel/resource_limit.h" | ||||
| #include "core/hle/service/cfg/cfg.h" | ||||
|  | @ -342,8 +342,8 @@ ResultStatus AppLoader_NCCH::Load() { | |||
|     if (ResultStatus::Success != result) | ||||
|         return result; | ||||
| 
 | ||||
|     Service::FS::RegisterArchiveType(std::make_unique<FileSys::ArchiveFactory_RomFS>(*this), | ||||
|                                      Service::FS::ArchiveIdCode::RomFS); | ||||
|     Service::FS::RegisterArchiveType(std::make_unique<FileSys::ArchiveFactory_SelfNCCH>(*this), | ||||
|                                      Service::FS::ArchiveIdCode::SelfNCCH); | ||||
| 
 | ||||
|     ParseRegionLockoutInfo(); | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue