mirror of
https://git.suyu.dev/suyu/suyu.git
synced 2024-11-29 23:06:23 -05:00
yuzu: Port old usages of Filesystem namespace to FilesystemController
This commit is contained in:
parent
faf628ad8d
commit
c6ff4a6f4d
14 changed files with 106 additions and 46 deletions
|
@ -63,7 +63,8 @@ VirtualDir PatchManager::PatchExeFS(VirtualDir exefs) const {
|
||||||
|
|
||||||
if (Settings::values.dump_exefs) {
|
if (Settings::values.dump_exefs) {
|
||||||
LOG_INFO(Loader, "Dumping ExeFS for title_id={:016X}", title_id);
|
LOG_INFO(Loader, "Dumping ExeFS for title_id={:016X}", title_id);
|
||||||
const auto dump_dir = Service::FileSystem::GetModificationDumpRoot(title_id);
|
const auto dump_dir =
|
||||||
|
Core::System::GetInstance().GetFileSystemController().GetModificationDumpRoot(title_id);
|
||||||
if (dump_dir != nullptr) {
|
if (dump_dir != nullptr) {
|
||||||
const auto exefs_dir = GetOrCreateDirectoryRelative(dump_dir, "/exefs");
|
const auto exefs_dir = GetOrCreateDirectoryRelative(dump_dir, "/exefs");
|
||||||
VfsRawCopyD(exefs, exefs_dir);
|
VfsRawCopyD(exefs, exefs_dir);
|
||||||
|
@ -88,7 +89,8 @@ VirtualDir PatchManager::PatchExeFS(VirtualDir exefs) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
// LayeredExeFS
|
// LayeredExeFS
|
||||||
const auto load_dir = Service::FileSystem::GetModificationLoadRoot(title_id);
|
const auto load_dir =
|
||||||
|
Core::System::GetInstance().GetFileSystemController().GetModificationLoadRoot(title_id);
|
||||||
if (load_dir != nullptr && load_dir->GetSize() > 0) {
|
if (load_dir != nullptr && load_dir->GetSize() > 0) {
|
||||||
auto patch_dirs = load_dir->GetSubdirectories();
|
auto patch_dirs = load_dir->GetSubdirectories();
|
||||||
std::sort(
|
std::sort(
|
||||||
|
@ -174,7 +176,8 @@ std::vector<u8> PatchManager::PatchNSO(const std::vector<u8>& nso, const std::st
|
||||||
if (Settings::values.dump_nso) {
|
if (Settings::values.dump_nso) {
|
||||||
LOG_INFO(Loader, "Dumping NSO for name={}, build_id={}, title_id={:016X}", name, build_id,
|
LOG_INFO(Loader, "Dumping NSO for name={}, build_id={}, title_id={:016X}", name, build_id,
|
||||||
title_id);
|
title_id);
|
||||||
const auto dump_dir = Service::FileSystem::GetModificationDumpRoot(title_id);
|
const auto dump_dir =
|
||||||
|
Core::System::GetInstance().GetFileSystemController().GetModificationDumpRoot(title_id);
|
||||||
if (dump_dir != nullptr) {
|
if (dump_dir != nullptr) {
|
||||||
const auto nso_dir = GetOrCreateDirectoryRelative(dump_dir, "/nso");
|
const auto nso_dir = GetOrCreateDirectoryRelative(dump_dir, "/nso");
|
||||||
const auto file = nso_dir->CreateFile(fmt::format("{}-{}.nso", name, build_id));
|
const auto file = nso_dir->CreateFile(fmt::format("{}-{}.nso", name, build_id));
|
||||||
|
@ -186,7 +189,8 @@ std::vector<u8> PatchManager::PatchNSO(const std::vector<u8>& nso, const std::st
|
||||||
|
|
||||||
LOG_INFO(Loader, "Patching NSO for name={}, build_id={}", name, build_id);
|
LOG_INFO(Loader, "Patching NSO for name={}, build_id={}", name, build_id);
|
||||||
|
|
||||||
const auto load_dir = Service::FileSystem::GetModificationLoadRoot(title_id);
|
const auto load_dir =
|
||||||
|
Core::System::GetInstance().GetFileSystemController().GetModificationLoadRoot(title_id);
|
||||||
if (load_dir == nullptr) {
|
if (load_dir == nullptr) {
|
||||||
LOG_ERROR(Loader, "Cannot load mods for invalid title_id={:016X}", title_id);
|
LOG_ERROR(Loader, "Cannot load mods for invalid title_id={:016X}", title_id);
|
||||||
return nso;
|
return nso;
|
||||||
|
@ -229,7 +233,8 @@ bool PatchManager::HasNSOPatch(const std::array<u8, 32>& build_id_) const {
|
||||||
|
|
||||||
LOG_INFO(Loader, "Querying NSO patch existence for build_id={}", build_id);
|
LOG_INFO(Loader, "Querying NSO patch existence for build_id={}", build_id);
|
||||||
|
|
||||||
const auto load_dir = Service::FileSystem::GetModificationLoadRoot(title_id);
|
const auto load_dir =
|
||||||
|
Core::System::GetInstance().GetFileSystemController().GetModificationLoadRoot(title_id);
|
||||||
if (load_dir == nullptr) {
|
if (load_dir == nullptr) {
|
||||||
LOG_ERROR(Loader, "Cannot load mods for invalid title_id={:016X}", title_id);
|
LOG_ERROR(Loader, "Cannot load mods for invalid title_id={:016X}", title_id);
|
||||||
return false;
|
return false;
|
||||||
|
@ -268,7 +273,8 @@ static std::optional<CheatList> ReadCheatFileFromFolder(const Core::System& syst
|
||||||
|
|
||||||
std::vector<CheatList> PatchManager::CreateCheatList(const Core::System& system,
|
std::vector<CheatList> PatchManager::CreateCheatList(const Core::System& system,
|
||||||
const std::array<u8, 32>& build_id_) const {
|
const std::array<u8, 32>& build_id_) const {
|
||||||
const auto load_dir = Service::FileSystem::GetModificationLoadRoot(title_id);
|
const auto load_dir =
|
||||||
|
Core::System::GetInstance().GetFileSystemController().GetModificationLoadRoot(title_id);
|
||||||
if (load_dir == nullptr) {
|
if (load_dir == nullptr) {
|
||||||
LOG_ERROR(Loader, "Cannot load mods for invalid title_id={:016X}", title_id);
|
LOG_ERROR(Loader, "Cannot load mods for invalid title_id={:016X}", title_id);
|
||||||
return {};
|
return {};
|
||||||
|
@ -299,7 +305,8 @@ std::vector<CheatList> PatchManager::CreateCheatList(const Core::System& system,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ApplyLayeredFS(VirtualFile& romfs, u64 title_id, ContentRecordType type) {
|
static void ApplyLayeredFS(VirtualFile& romfs, u64 title_id, ContentRecordType type) {
|
||||||
const auto load_dir = Service::FileSystem::GetModificationLoadRoot(title_id);
|
const auto load_dir =
|
||||||
|
Core::System::GetInstance().GetFileSystemController().GetModificationLoadRoot(title_id);
|
||||||
if ((type != ContentRecordType::Program && type != ContentRecordType::Data) ||
|
if ((type != ContentRecordType::Program && type != ContentRecordType::Data) ||
|
||||||
load_dir == nullptr || load_dir->GetSize() <= 0) {
|
load_dir == nullptr || load_dir->GetSize() <= 0) {
|
||||||
return;
|
return;
|
||||||
|
@ -440,7 +447,8 @@ std::map<std::string, std::string, std::less<>> PatchManager::GetPatchVersionNam
|
||||||
}
|
}
|
||||||
|
|
||||||
// General Mods (LayeredFS and IPS)
|
// General Mods (LayeredFS and IPS)
|
||||||
const auto mod_dir = Service::FileSystem::GetModificationLoadRoot(title_id);
|
const auto mod_dir =
|
||||||
|
Core::System::GetInstance().GetFileSystemController().GetModificationLoadRoot(title_id);
|
||||||
if (mod_dir != nullptr && mod_dir->GetSize() > 0) {
|
if (mod_dir != nullptr && mod_dir->GetSize() > 0) {
|
||||||
for (const auto& mod : mod_dir->GetSubdirectories()) {
|
for (const auto& mod : mod_dir->GetSubdirectories()) {
|
||||||
std::string types;
|
std::string types;
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
// Refer to the license.txt file included.
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <random>
|
||||||
#include <regex>
|
#include <regex>
|
||||||
#include <mbedtls/sha256.h>
|
#include <mbedtls/sha256.h>
|
||||||
#include "common/assert.h"
|
#include "common/assert.h"
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#include "common/common_types.h"
|
#include "common/common_types.h"
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
#include "core/core.h"
|
#include "core/core.h"
|
||||||
|
#include "core/file_sys/card_image.h"
|
||||||
#include "core/file_sys/content_archive.h"
|
#include "core/file_sys/content_archive.h"
|
||||||
#include "core/file_sys/nca_metadata.h"
|
#include "core/file_sys/nca_metadata.h"
|
||||||
#include "core/file_sys/patch_manager.h"
|
#include "core/file_sys/patch_manager.h"
|
||||||
|
@ -51,13 +52,17 @@ ResultVal<VirtualFile> RomFSFactory::Open(u64 title_id, StorageId storage, Conte
|
||||||
res = Core::System::GetInstance().GetContentProvider().GetEntry(title_id, type);
|
res = Core::System::GetInstance().GetContentProvider().GetEntry(title_id, type);
|
||||||
break;
|
break;
|
||||||
case StorageId::NandSystem:
|
case StorageId::NandSystem:
|
||||||
res = Service::FileSystem::GetSystemNANDContents()->GetEntry(title_id, type);
|
res =
|
||||||
|
Core::System::GetInstance().GetFileSystemController().GetSystemNANDContents()->GetEntry(
|
||||||
|
title_id, type);
|
||||||
break;
|
break;
|
||||||
case StorageId::NandUser:
|
case StorageId::NandUser:
|
||||||
res = Service::FileSystem::GetUserNANDContents()->GetEntry(title_id, type);
|
res = Core::System::GetInstance().GetFileSystemController().GetUserNANDContents()->GetEntry(
|
||||||
|
title_id, type);
|
||||||
break;
|
break;
|
||||||
case StorageId::SdCard:
|
case StorageId::SdCard:
|
||||||
res = Service::FileSystem::GetSDMCContents()->GetEntry(title_id, type);
|
res = Core::System::GetInstance().GetFileSystemController().GetSDMCContents()->GetEntry(
|
||||||
|
title_id, type);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
UNIMPLEMENTED_MSG("Unimplemented storage_id={:02X}", static_cast<u8>(storage));
|
UNIMPLEMENTED_MSG("Unimplemented storage_id={:02X}", static_cast<u8>(storage));
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
#include "core/hle/service/filesystem/fsp_pr.h"
|
#include "core/hle/service/filesystem/fsp_pr.h"
|
||||||
#include "core/hle/service/filesystem/fsp_srv.h"
|
#include "core/hle/service/filesystem/fsp_srv.h"
|
||||||
#include "core/loader/loader.h"
|
#include "core/loader/loader.h"
|
||||||
|
#include "core/settings.h"
|
||||||
|
|
||||||
namespace Service::FileSystem {
|
namespace Service::FileSystem {
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
#include "core/file_sys/mode.h"
|
#include "core/file_sys/mode.h"
|
||||||
#include "core/file_sys/nca_metadata.h"
|
#include "core/file_sys/nca_metadata.h"
|
||||||
#include "core/file_sys/patch_manager.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/savedata_factory.h"
|
||||||
#include "core/file_sys/system_archive/system_archive.h"
|
#include "core/file_sys/system_archive/system_archive.h"
|
||||||
#include "core/file_sys/vfs.h"
|
#include "core/file_sys/vfs.h"
|
||||||
|
@ -502,8 +503,8 @@ private:
|
||||||
|
|
||||||
class ISaveDataInfoReader final : public ServiceFramework<ISaveDataInfoReader> {
|
class ISaveDataInfoReader final : public ServiceFramework<ISaveDataInfoReader> {
|
||||||
public:
|
public:
|
||||||
explicit ISaveDataInfoReader(FileSys::SaveDataSpaceId space)
|
explicit ISaveDataInfoReader(FileSys::SaveDataSpaceId space, FileSystemController& fsc)
|
||||||
: ServiceFramework("ISaveDataInfoReader") {
|
: ServiceFramework("ISaveDataInfoReader"), fsc(fsc) {
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
{0, &ISaveDataInfoReader::ReadSaveDataInfo, "ReadSaveDataInfo"},
|
{0, &ISaveDataInfoReader::ReadSaveDataInfo, "ReadSaveDataInfo"},
|
||||||
};
|
};
|
||||||
|
@ -549,8 +550,13 @@ private:
|
||||||
}
|
}
|
||||||
|
|
||||||
void FindAllSaves(FileSys::SaveDataSpaceId space) {
|
void FindAllSaves(FileSys::SaveDataSpaceId space) {
|
||||||
const auto save_root = OpenSaveDataSpace(space);
|
const auto save_root = fsc.OpenSaveDataSpace(space);
|
||||||
ASSERT(save_root.Succeeded());
|
|
||||||
|
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()) {
|
for (const auto& type : (*save_root)->GetSubdirectories()) {
|
||||||
if (type->GetName() == "save") {
|
if (type->GetName() == "save") {
|
||||||
|
@ -639,11 +645,12 @@ private:
|
||||||
};
|
};
|
||||||
static_assert(sizeof(SaveDataInfo) == 0x60, "SaveDataInfo has incorrect size.");
|
static_assert(sizeof(SaveDataInfo) == 0x60, "SaveDataInfo has incorrect size.");
|
||||||
|
|
||||||
|
FileSystemController& fsc;
|
||||||
std::vector<SaveDataInfo> info;
|
std::vector<SaveDataInfo> info;
|
||||||
u64 next_entry_index = 0;
|
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
|
// clang-format off
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
{0, nullptr, "OpenFileSystem"},
|
{0, nullptr, "OpenFileSystem"},
|
||||||
|
@ -783,7 +790,8 @@ void FSP_SRV::OpenFileSystemWithPatch(Kernel::HLERequestContext& ctx) {
|
||||||
void FSP_SRV::OpenSdCardFileSystem(Kernel::HLERequestContext& ctx) {
|
void FSP_SRV::OpenSdCardFileSystem(Kernel::HLERequestContext& ctx) {
|
||||||
LOG_DEBUG(Service_FS, "called");
|
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};
|
IPC::ResponseBuilder rb{ctx, 2, 0, 1};
|
||||||
rb.Push(RESULT_SUCCESS);
|
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>>();
|
auto save_create_struct = rp.PopRaw<std::array<u8, 0x40>>();
|
||||||
u128 uid = rp.PopRaw<u128>();
|
u128 uid = rp.PopRaw<u128>();
|
||||||
|
|
||||||
LOG_WARNING(Service_FS, "(STUBBED) called save_struct = {}, uid = {:016X}{:016X}",
|
LOG_DEBUG(Service_FS, "called save_struct = {}, uid = {:016X}{:016X}", save_struct.DebugInfo(),
|
||||||
save_struct.DebugInfo(), uid[1], uid[0]);
|
uid[1], uid[0]);
|
||||||
|
|
||||||
|
fsc.CreateSaveData(FileSys::SaveDataSpaceId::NandUser, save_struct);
|
||||||
|
|
||||||
IPC::ResponseBuilder rb{ctx, 2};
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
rb.Push(RESULT_SUCCESS);
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
@ -815,14 +825,24 @@ void FSP_SRV::OpenSaveDataFileSystem(Kernel::HLERequestContext& ctx) {
|
||||||
IPC::RequestParser rp{ctx};
|
IPC::RequestParser rp{ctx};
|
||||||
const auto parameters = rp.PopRaw<Parameters>();
|
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()) {
|
if (dir.Failed()) {
|
||||||
IPC::ResponseBuilder rb{ctx, 2, 0, 0};
|
IPC::ResponseBuilder rb{ctx, 2, 0, 0};
|
||||||
rb.Push(FileSys::ERROR_ENTITY_NOT_FOUND);
|
rb.Push(FileSys::ERROR_ENTITY_NOT_FOUND);
|
||||||
return;
|
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};
|
IPC::ResponseBuilder rb{ctx, 2, 0, 1};
|
||||||
rb.Push(RESULT_SUCCESS);
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
@ -841,7 +861,7 @@ void FSP_SRV::OpenSaveDataInfoReaderBySaveDataSpaceId(Kernel::HLERequestContext&
|
||||||
|
|
||||||
IPC::ResponseBuilder rb{ctx, 2, 0, 1};
|
IPC::ResponseBuilder rb{ctx, 2, 0, 1};
|
||||||
rb.Push(RESULT_SUCCESS);
|
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) {
|
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) {
|
void FSP_SRV::OpenDataStorageByCurrentProcess(Kernel::HLERequestContext& ctx) {
|
||||||
LOG_DEBUG(Service_FS, "called");
|
LOG_DEBUG(Service_FS, "called");
|
||||||
|
|
||||||
auto romfs = OpenRomFSCurrentProcess();
|
auto romfs = fsc.OpenRomFSCurrentProcess();
|
||||||
if (romfs.Failed()) {
|
if (romfs.Failed()) {
|
||||||
// TODO (bunnei): Find the right error code to use here
|
// TODO (bunnei): Find the right error code to use here
|
||||||
LOG_CRITICAL(Service_FS, "no file system interface available!");
|
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}",
|
LOG_DEBUG(Service_FS, "called with storage_id={:02X}, unknown={:08X}, title_id={:016X}",
|
||||||
static_cast<u8>(storage_id), unknown, title_id);
|
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()) {
|
if (data.Failed()) {
|
||||||
const auto archive = FileSys::SystemArchive::SynthesizeSystemArchive(title_id);
|
const auto archive = FileSys::SystemArchive::SynthesizeSystemArchive(title_id);
|
||||||
|
|
|
@ -32,7 +32,7 @@ enum class LogMode : u32 {
|
||||||
|
|
||||||
class FSP_SRV final : public ServiceFramework<FSP_SRV> {
|
class FSP_SRV final : public ServiceFramework<FSP_SRV> {
|
||||||
public:
|
public:
|
||||||
explicit FSP_SRV(const Core::Reporter& reporter);
|
explicit FSP_SRV(FileSystemController& fsc);
|
||||||
~FSP_SRV() override;
|
~FSP_SRV() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -51,6 +51,8 @@ private:
|
||||||
void OutputAccessLogToSdCard(Kernel::HLERequestContext& ctx);
|
void OutputAccessLogToSdCard(Kernel::HLERequestContext& ctx);
|
||||||
void GetAccessLogVersionInfo(Kernel::HLERequestContext& ctx);
|
void GetAccessLogVersionInfo(Kernel::HLERequestContext& ctx);
|
||||||
|
|
||||||
|
FileSystemController& fsc;
|
||||||
|
|
||||||
FileSys::VirtualFile romfs;
|
FileSys::VirtualFile romfs;
|
||||||
u64 current_process_id = 0;
|
u64 current_process_id = 0;
|
||||||
u32 access_log_program_index = 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);
|
Migration::InstallInterfaces(*sm);
|
||||||
Mii::InstallInterfaces(*sm);
|
Mii::InstallInterfaces(*sm);
|
||||||
MM::InstallInterfaces(*sm);
|
MM::InstallInterfaces(*sm);
|
||||||
NCM::InstallInterfaces(*sm, fsc);
|
NCM::InstallInterfaces(*sm);
|
||||||
NFC::InstallInterfaces(*sm);
|
NFC::InstallInterfaces(*sm);
|
||||||
NFP::InstallInterfaces(*sm);
|
NFP::InstallInterfaces(*sm);
|
||||||
NIFM::InstallInterfaces(*sm);
|
NIFM::InstallInterfaces(*sm);
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#include "common/common_funcs.h"
|
#include "common/common_funcs.h"
|
||||||
#include "common/file_util.h"
|
#include "common/file_util.h"
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
|
#include "core/core.h"
|
||||||
#include "core/file_sys/content_archive.h"
|
#include "core/file_sys/content_archive.h"
|
||||||
#include "core/file_sys/control_metadata.h"
|
#include "core/file_sys/control_metadata.h"
|
||||||
#include "core/file_sys/patch_manager.h"
|
#include "core/file_sys/patch_manager.h"
|
||||||
|
@ -176,7 +177,8 @@ AppLoader_DeconstructedRomDirectory::LoadResult AppLoader_DeconstructedRomDirect
|
||||||
// Register the RomFS if a ".romfs" file was found
|
// Register the RomFS if a ".romfs" file was found
|
||||||
if (romfs_iter != files.end() && *romfs_iter != nullptr) {
|
if (romfs_iter != files.end() && *romfs_iter != nullptr) {
|
||||||
romfs = *romfs_iter;
|
romfs = *romfs_iter;
|
||||||
Service::FileSystem::RegisterRomFS(std::make_unique<FileSys::RomFSFactory>(*this));
|
Core::System::GetInstance().GetFileSystemController().RegisterRomFS(
|
||||||
|
std::make_unique<FileSys::RomFSFactory>(*this));
|
||||||
}
|
}
|
||||||
|
|
||||||
is_loaded = true;
|
is_loaded = true;
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
|
|
||||||
#include "common/file_util.h"
|
#include "common/file_util.h"
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
|
#include "core/core.h"
|
||||||
#include "core/file_sys/content_archive.h"
|
#include "core/file_sys/content_archive.h"
|
||||||
#include "core/file_sys/romfs_factory.h"
|
#include "core/file_sys/romfs_factory.h"
|
||||||
#include "core/hle/kernel/process.h"
|
#include "core/hle/kernel/process.h"
|
||||||
|
@ -57,7 +58,8 @@ AppLoader_NCA::LoadResult AppLoader_NCA::Load(Kernel::Process& process) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nca->GetRomFS() != nullptr && nca->GetRomFS()->GetSize() > 0) {
|
if (nca->GetRomFS() != nullptr && nca->GetRomFS()->GetSize() > 0) {
|
||||||
Service::FileSystem::RegisterRomFS(std::make_unique<FileSys::RomFSFactory>(*this));
|
Core::System::GetInstance().GetFileSystemController().RegisterRomFS(
|
||||||
|
std::make_unique<FileSys::RomFSFactory>(*this));
|
||||||
}
|
}
|
||||||
|
|
||||||
is_loaded = true;
|
is_loaded = true;
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include "common/file_util.h"
|
#include "common/file_util.h"
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
#include "common/swap.h"
|
#include "common/swap.h"
|
||||||
|
#include "core/core.h"
|
||||||
#include "core/file_sys/control_metadata.h"
|
#include "core/file_sys/control_metadata.h"
|
||||||
#include "core/file_sys/romfs_factory.h"
|
#include "core/file_sys/romfs_factory.h"
|
||||||
#include "core/file_sys/vfs_offset.h"
|
#include "core/file_sys/vfs_offset.h"
|
||||||
|
@ -214,7 +215,8 @@ AppLoader_NRO::LoadResult AppLoader_NRO::Load(Kernel::Process& process) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (romfs != nullptr) {
|
if (romfs != nullptr) {
|
||||||
Service::FileSystem::RegisterRomFS(std::make_unique<FileSys::RomFSFactory>(*this));
|
Core::System::GetInstance().GetFileSystemController().RegisterRomFS(
|
||||||
|
std::make_unique<FileSys::RomFSFactory>(*this));
|
||||||
}
|
}
|
||||||
|
|
||||||
is_loaded = true;
|
is_loaded = true;
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "common/common_types.h"
|
#include "common/common_types.h"
|
||||||
|
#include "core/core.h"
|
||||||
#include "core/file_sys/card_image.h"
|
#include "core/file_sys/card_image.h"
|
||||||
#include "core/file_sys/content_archive.h"
|
#include "core/file_sys/content_archive.h"
|
||||||
#include "core/file_sys/control_metadata.h"
|
#include "core/file_sys/control_metadata.h"
|
||||||
|
@ -105,7 +106,8 @@ AppLoader_NSP::LoadResult AppLoader_NSP::Load(Kernel::Process& process) {
|
||||||
|
|
||||||
FileSys::VirtualFile update_raw;
|
FileSys::VirtualFile update_raw;
|
||||||
if (ReadUpdateRaw(update_raw) == ResultStatus::Success && update_raw != nullptr) {
|
if (ReadUpdateRaw(update_raw) == ResultStatus::Success && update_raw != nullptr) {
|
||||||
Service::FileSystem::SetPackedUpdate(std::move(update_raw));
|
Core::System::GetInstance().GetFileSystemController().SetPackedUpdate(
|
||||||
|
std::move(update_raw));
|
||||||
}
|
}
|
||||||
|
|
||||||
is_loaded = true;
|
is_loaded = true;
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "common/common_types.h"
|
#include "common/common_types.h"
|
||||||
|
#include "core/core.h"
|
||||||
#include "core/file_sys/card_image.h"
|
#include "core/file_sys/card_image.h"
|
||||||
#include "core/file_sys/content_archive.h"
|
#include "core/file_sys/content_archive.h"
|
||||||
#include "core/file_sys/control_metadata.h"
|
#include "core/file_sys/control_metadata.h"
|
||||||
|
@ -72,7 +73,8 @@ AppLoader_XCI::LoadResult AppLoader_XCI::Load(Kernel::Process& process) {
|
||||||
|
|
||||||
FileSys::VirtualFile update_raw;
|
FileSys::VirtualFile update_raw;
|
||||||
if (ReadUpdateRaw(update_raw) == ResultStatus::Success && update_raw != nullptr) {
|
if (ReadUpdateRaw(update_raw) == ResultStatus::Success && update_raw != nullptr) {
|
||||||
Service::FileSystem::SetPackedUpdate(std::move(update_raw));
|
Core::System::GetInstance().GetFileSystemController().SetPackedUpdate(
|
||||||
|
std::move(update_raw));
|
||||||
}
|
}
|
||||||
|
|
||||||
is_loaded = true;
|
is_loaded = true;
|
||||||
|
|
|
@ -221,7 +221,7 @@ GMainWindow::GMainWindow()
|
||||||
std::make_unique<FileSys::ContentProviderUnion>());
|
std::make_unique<FileSys::ContentProviderUnion>());
|
||||||
Core::System::GetInstance().RegisterContentProvider(
|
Core::System::GetInstance().RegisterContentProvider(
|
||||||
FileSys::ContentProviderUnionSlot::FrontendManual, provider.get());
|
FileSys::ContentProviderUnionSlot::FrontendManual, provider.get());
|
||||||
Service::FileSystem::CreateFactories(*vfs);
|
Core::System::GetInstance().GetFileSystemController().CreateFactories(*vfs);
|
||||||
|
|
||||||
// Gen keys if necessary
|
// Gen keys if necessary
|
||||||
OnReinitializeKeys(ReinitializeKeyBehavior::NoWarning);
|
OnReinitializeKeys(ReinitializeKeyBehavior::NoWarning);
|
||||||
|
@ -1507,15 +1507,19 @@ void GMainWindow::OnMenuInstallToNAND() {
|
||||||
failed();
|
failed();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const auto res =
|
const auto res = Core::System::GetInstance()
|
||||||
Service::FileSystem::GetUserNANDContents()->InstallEntry(*nsp, false, qt_raw_copy);
|
.GetFileSystemController()
|
||||||
|
.GetUserNANDContents()
|
||||||
|
->InstallEntry(*nsp, false, qt_raw_copy);
|
||||||
if (res == FileSys::InstallResult::Success) {
|
if (res == FileSys::InstallResult::Success) {
|
||||||
success();
|
success();
|
||||||
} else {
|
} else {
|
||||||
if (res == FileSys::InstallResult::ErrorAlreadyExists) {
|
if (res == FileSys::InstallResult::ErrorAlreadyExists) {
|
||||||
if (overwrite()) {
|
if (overwrite()) {
|
||||||
const auto res2 = Service::FileSystem::GetUserNANDContents()->InstallEntry(
|
const auto res2 = Core::System::GetInstance()
|
||||||
*nsp, true, qt_raw_copy);
|
.GetFileSystemController()
|
||||||
|
.GetUserNANDContents()
|
||||||
|
->InstallEntry(*nsp, true, qt_raw_copy);
|
||||||
if (res2 == FileSys::InstallResult::Success) {
|
if (res2 == FileSys::InstallResult::Success) {
|
||||||
success();
|
success();
|
||||||
} else {
|
} else {
|
||||||
|
@ -1569,19 +1573,28 @@ void GMainWindow::OnMenuInstallToNAND() {
|
||||||
|
|
||||||
FileSys::InstallResult res;
|
FileSys::InstallResult res;
|
||||||
if (index >= static_cast<size_t>(FileSys::TitleType::Application)) {
|
if (index >= static_cast<size_t>(FileSys::TitleType::Application)) {
|
||||||
res = Service::FileSystem::GetUserNANDContents()->InstallEntry(
|
res = Core::System::GetInstance()
|
||||||
*nca, static_cast<FileSys::TitleType>(index), false, qt_raw_copy);
|
.GetFileSystemController()
|
||||||
|
.GetUserNANDContents()
|
||||||
|
->InstallEntry(*nca, static_cast<FileSys::TitleType>(index), false,
|
||||||
|
qt_raw_copy);
|
||||||
} else {
|
} else {
|
||||||
res = Service::FileSystem::GetSystemNANDContents()->InstallEntry(
|
res = Core::System::GetInstance()
|
||||||
*nca, static_cast<FileSys::TitleType>(index), false, qt_raw_copy);
|
.GetFileSystemController()
|
||||||
|
.GetSystemNANDContents()
|
||||||
|
->InstallEntry(*nca, static_cast<FileSys::TitleType>(index), false,
|
||||||
|
qt_raw_copy);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (res == FileSys::InstallResult::Success) {
|
if (res == FileSys::InstallResult::Success) {
|
||||||
success();
|
success();
|
||||||
} else if (res == FileSys::InstallResult::ErrorAlreadyExists) {
|
} else if (res == FileSys::InstallResult::ErrorAlreadyExists) {
|
||||||
if (overwrite()) {
|
if (overwrite()) {
|
||||||
const auto res2 = Service::FileSystem::GetUserNANDContents()->InstallEntry(
|
const auto res2 = Core::System::GetInstance()
|
||||||
*nca, static_cast<FileSys::TitleType>(index), true, qt_raw_copy);
|
.GetFileSystemController()
|
||||||
|
.GetUserNANDContents()
|
||||||
|
->InstallEntry(*nca, static_cast<FileSys::TitleType>(index),
|
||||||
|
true, qt_raw_copy);
|
||||||
if (res2 == FileSys::InstallResult::Success) {
|
if (res2 == FileSys::InstallResult::Success) {
|
||||||
success();
|
success();
|
||||||
} else {
|
} else {
|
||||||
|
@ -1611,7 +1624,7 @@ void GMainWindow::OnMenuSelectEmulatedDirectory(EmulatedDirectoryTarget target)
|
||||||
FileUtil::GetUserPath(target == EmulatedDirectoryTarget::SDMC ? FileUtil::UserPath::SDMCDir
|
FileUtil::GetUserPath(target == EmulatedDirectoryTarget::SDMC ? FileUtil::UserPath::SDMCDir
|
||||||
: FileUtil::UserPath::NANDDir,
|
: FileUtil::UserPath::NANDDir,
|
||||||
dir_path.toStdString());
|
dir_path.toStdString());
|
||||||
Service::FileSystem::CreateFactories(*vfs);
|
Core::System::GetInstance().GetFileSystemController().CreateFactories(*vfs);
|
||||||
game_list->PopulateAsync(UISettings::values.game_dirs);
|
game_list->PopulateAsync(UISettings::values.game_dirs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1996,7 +2009,7 @@ void GMainWindow::OnReinitializeKeys(ReinitializeKeyBehavior behavior) {
|
||||||
|
|
||||||
const auto function = [this, &keys, &pdm] {
|
const auto function = [this, &keys, &pdm] {
|
||||||
keys.PopulateFromPartitionData(pdm);
|
keys.PopulateFromPartitionData(pdm);
|
||||||
Service::FileSystem::CreateFactories(*vfs);
|
Core::System::GetInstance().GetFileSystemController().CreateFactories(*vfs);
|
||||||
keys.DeriveETicket(pdm);
|
keys.DeriveETicket(pdm);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2041,7 +2054,7 @@ void GMainWindow::OnReinitializeKeys(ReinitializeKeyBehavior behavior) {
|
||||||
prog.close();
|
prog.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
Service::FileSystem::CreateFactories(*vfs);
|
Core::System::GetInstance().GetFileSystemController().CreateFactories(*vfs);
|
||||||
|
|
||||||
if (behavior == ReinitializeKeyBehavior::Warning) {
|
if (behavior == ReinitializeKeyBehavior::Warning) {
|
||||||
game_list->PopulateAsync(UISettings::values.game_dirs);
|
game_list->PopulateAsync(UISettings::values.game_dirs);
|
||||||
|
|
|
@ -184,7 +184,7 @@ int main(int argc, char** argv) {
|
||||||
Core::System& system{Core::System::GetInstance()};
|
Core::System& system{Core::System::GetInstance()};
|
||||||
system.SetContentProvider(std::make_unique<FileSys::ContentProviderUnion>());
|
system.SetContentProvider(std::make_unique<FileSys::ContentProviderUnion>());
|
||||||
system.SetFilesystem(std::make_shared<FileSys::RealVfsFilesystem>());
|
system.SetFilesystem(std::make_shared<FileSys::RealVfsFilesystem>());
|
||||||
Service::FileSystem::CreateFactories(*system.GetFilesystem());
|
system.GetFileSystemController().CreateFactories(*system.GetFilesystem());
|
||||||
|
|
||||||
SCOPE_EXIT({ system.Shutdown(); });
|
SCOPE_EXIT({ system.Shutdown(); });
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue