mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu.git
				synced 2025-05-12 00:45:25 +00:00 
			
		
		
		
	loader: use self NCCH archive
This commit is contained in:
		
							parent
							
								
									a0df747325
								
							
						
					
					
						commit
						20544977da
					
				@ -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…
	
		Reference in New Issue
	
	Block a user