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_extsavedata.cpp
|
||||||
file_sys/archive_ncch.cpp
|
file_sys/archive_ncch.cpp
|
||||||
file_sys/archive_other_savedata.cpp
|
file_sys/archive_other_savedata.cpp
|
||||||
file_sys/archive_romfs.cpp
|
|
||||||
file_sys/archive_savedata.cpp
|
file_sys/archive_savedata.cpp
|
||||||
file_sys/archive_sdmc.cpp
|
file_sys/archive_sdmc.cpp
|
||||||
file_sys/archive_sdmcwriteonly.cpp
|
file_sys/archive_sdmcwriteonly.cpp
|
||||||
@ -198,7 +197,6 @@ set(HEADERS
|
|||||||
file_sys/archive_extsavedata.h
|
file_sys/archive_extsavedata.h
|
||||||
file_sys/archive_ncch.h
|
file_sys/archive_ncch.h
|
||||||
file_sys/archive_other_savedata.h
|
file_sys/archive_other_savedata.h
|
||||||
file_sys/archive_romfs.h
|
|
||||||
file_sys/archive_savedata.h
|
file_sys/archive_savedata.h
|
||||||
file_sys/archive_sdmc.h
|
file_sys/archive_sdmc.h
|
||||||
file_sys/archive_sdmcwriteonly.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
|
/// Supported archive types
|
||||||
enum class ArchiveIdCode : u32 {
|
enum class ArchiveIdCode : u32 {
|
||||||
RomFS = 0x00000003,
|
SelfNCCH = 0x00000003,
|
||||||
SaveData = 0x00000004,
|
SaveData = 0x00000004,
|
||||||
ExtSaveData = 0x00000006,
|
ExtSaveData = 0x00000006,
|
||||||
SharedExtSaveData = 0x00000007,
|
SharedExtSaveData = 0x00000007,
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include "common/logging/log.h"
|
#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/process.h"
|
||||||
#include "core/hle/kernel/resource_limit.h"
|
#include "core/hle/kernel/resource_limit.h"
|
||||||
#include "core/hle/service/fs/archive.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);
|
Kernel::g_current_process->Run(48, Kernel::DEFAULT_STACK_SIZE);
|
||||||
|
|
||||||
Service::FS::RegisterArchiveType(std::make_unique<FileSys::ArchiveFactory_RomFS>(*this),
|
Service::FS::RegisterArchiveType(std::make_unique<FileSys::ArchiveFactory_SelfNCCH>(*this),
|
||||||
Service::FS::ArchiveIdCode::RomFS);
|
Service::FS::ArchiveIdCode::SelfNCCH);
|
||||||
|
|
||||||
is_loaded = true;
|
is_loaded = true;
|
||||||
return ResultStatus::Success;
|
return ResultStatus::Success;
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
#include "common/string_util.h"
|
#include "common/string_util.h"
|
||||||
#include "common/swap.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/process.h"
|
||||||
#include "core/hle/kernel/resource_limit.h"
|
#include "core/hle/kernel/resource_limit.h"
|
||||||
#include "core/hle/service/cfg/cfg.h"
|
#include "core/hle/service/cfg/cfg.h"
|
||||||
@ -342,8 +342,8 @@ ResultStatus AppLoader_NCCH::Load() {
|
|||||||
if (ResultStatus::Success != result)
|
if (ResultStatus::Success != result)
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
Service::FS::RegisterArchiveType(std::make_unique<FileSys::ArchiveFactory_RomFS>(*this),
|
Service::FS::RegisterArchiveType(std::make_unique<FileSys::ArchiveFactory_SelfNCCH>(*this),
|
||||||
Service::FS::ArchiveIdCode::RomFS);
|
Service::FS::ArchiveIdCode::SelfNCCH);
|
||||||
|
|
||||||
ParseRegionLockoutInfo();
|
ParseRegionLockoutInfo();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user