yuzu: Port old usages of Filesystem namespace to FilesystemController
This commit is contained in:
		
							parent
							
								
									faf628ad8d
								
							
						
					
					
						commit
						c6ff4a6f4d
					
				@ -63,7 +63,8 @@ VirtualDir PatchManager::PatchExeFS(VirtualDir exefs) const {
 | 
			
		||||
 | 
			
		||||
    if (Settings::values.dump_exefs) {
 | 
			
		||||
        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) {
 | 
			
		||||
            const auto exefs_dir = GetOrCreateDirectoryRelative(dump_dir, "/exefs");
 | 
			
		||||
            VfsRawCopyD(exefs, exefs_dir);
 | 
			
		||||
@ -88,7 +89,8 @@ VirtualDir PatchManager::PatchExeFS(VirtualDir exefs) const {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // 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) {
 | 
			
		||||
        auto patch_dirs = load_dir->GetSubdirectories();
 | 
			
		||||
        std::sort(
 | 
			
		||||
@ -174,7 +176,8 @@ std::vector<u8> PatchManager::PatchNSO(const std::vector<u8>& nso, const std::st
 | 
			
		||||
    if (Settings::values.dump_nso) {
 | 
			
		||||
        LOG_INFO(Loader, "Dumping NSO for name={}, build_id={}, title_id={:016X}", name, build_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) {
 | 
			
		||||
            const auto nso_dir = GetOrCreateDirectoryRelative(dump_dir, "/nso");
 | 
			
		||||
            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);
 | 
			
		||||
 | 
			
		||||
    const auto load_dir = Service::FileSystem::GetModificationLoadRoot(title_id);
 | 
			
		||||
    const auto load_dir =
 | 
			
		||||
        Core::System::GetInstance().GetFileSystemController().GetModificationLoadRoot(title_id);
 | 
			
		||||
    if (load_dir == nullptr) {
 | 
			
		||||
        LOG_ERROR(Loader, "Cannot load mods for invalid title_id={:016X}", title_id);
 | 
			
		||||
        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);
 | 
			
		||||
 | 
			
		||||
    const auto load_dir = Service::FileSystem::GetModificationLoadRoot(title_id);
 | 
			
		||||
    const auto load_dir =
 | 
			
		||||
        Core::System::GetInstance().GetFileSystemController().GetModificationLoadRoot(title_id);
 | 
			
		||||
    if (load_dir == nullptr) {
 | 
			
		||||
        LOG_ERROR(Loader, "Cannot load mods for invalid title_id={:016X}", title_id);
 | 
			
		||||
        return false;
 | 
			
		||||
@ -268,7 +273,8 @@ static std::optional<CheatList> ReadCheatFileFromFolder(const Core::System& syst
 | 
			
		||||
 | 
			
		||||
std::vector<CheatList> PatchManager::CreateCheatList(const Core::System& system,
 | 
			
		||||
                                                     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) {
 | 
			
		||||
        LOG_ERROR(Loader, "Cannot load mods for invalid title_id={:016X}", title_id);
 | 
			
		||||
        return {};
 | 
			
		||||
@ -299,7 +305,8 @@ std::vector<CheatList> PatchManager::CreateCheatList(const Core::System& system,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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) ||
 | 
			
		||||
        load_dir == nullptr || load_dir->GetSize() <= 0) {
 | 
			
		||||
        return;
 | 
			
		||||
@ -440,7 +447,8 @@ std::map<std::string, std::string, std::less<>> PatchManager::GetPatchVersionNam
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // 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) {
 | 
			
		||||
        for (const auto& mod : mod_dir->GetSubdirectories()) {
 | 
			
		||||
            std::string types;
 | 
			
		||||
 | 
			
		||||
@ -3,6 +3,7 @@
 | 
			
		||||
// Refer to the license.txt file included.
 | 
			
		||||
 | 
			
		||||
#include <algorithm>
 | 
			
		||||
#include <random>
 | 
			
		||||
#include <regex>
 | 
			
		||||
#include <mbedtls/sha256.h>
 | 
			
		||||
#include "common/assert.h"
 | 
			
		||||
 | 
			
		||||
@ -7,6 +7,7 @@
 | 
			
		||||
#include "common/common_types.h"
 | 
			
		||||
#include "common/logging/log.h"
 | 
			
		||||
#include "core/core.h"
 | 
			
		||||
#include "core/file_sys/card_image.h"
 | 
			
		||||
#include "core/file_sys/content_archive.h"
 | 
			
		||||
#include "core/file_sys/nca_metadata.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);
 | 
			
		||||
        break;
 | 
			
		||||
    case StorageId::NandSystem:
 | 
			
		||||
        res = Service::FileSystem::GetSystemNANDContents()->GetEntry(title_id, type);
 | 
			
		||||
        res =
 | 
			
		||||
            Core::System::GetInstance().GetFileSystemController().GetSystemNANDContents()->GetEntry(
 | 
			
		||||
                title_id, type);
 | 
			
		||||
        break;
 | 
			
		||||
    case StorageId::NandUser:
 | 
			
		||||
        res = Service::FileSystem::GetUserNANDContents()->GetEntry(title_id, type);
 | 
			
		||||
        res = Core::System::GetInstance().GetFileSystemController().GetUserNANDContents()->GetEntry(
 | 
			
		||||
            title_id, type);
 | 
			
		||||
        break;
 | 
			
		||||
    case StorageId::SdCard:
 | 
			
		||||
        res = Service::FileSystem::GetSDMCContents()->GetEntry(title_id, type);
 | 
			
		||||
        res = Core::System::GetInstance().GetFileSystemController().GetSDMCContents()->GetEntry(
 | 
			
		||||
            title_id, type);
 | 
			
		||||
        break;
 | 
			
		||||
    default:
 | 
			
		||||
        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_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);
 | 
			
		||||
 | 
			
		||||
@ -7,6 +7,7 @@
 | 
			
		||||
#include "common/common_funcs.h"
 | 
			
		||||
#include "common/file_util.h"
 | 
			
		||||
#include "common/logging/log.h"
 | 
			
		||||
#include "core/core.h"
 | 
			
		||||
#include "core/file_sys/content_archive.h"
 | 
			
		||||
#include "core/file_sys/control_metadata.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
 | 
			
		||||
    if (romfs_iter != files.end() && *romfs_iter != nullptr) {
 | 
			
		||||
        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;
 | 
			
		||||
 | 
			
		||||
@ -6,6 +6,7 @@
 | 
			
		||||
 | 
			
		||||
#include "common/file_util.h"
 | 
			
		||||
#include "common/logging/log.h"
 | 
			
		||||
#include "core/core.h"
 | 
			
		||||
#include "core/file_sys/content_archive.h"
 | 
			
		||||
#include "core/file_sys/romfs_factory.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) {
 | 
			
		||||
        Service::FileSystem::RegisterRomFS(std::make_unique<FileSys::RomFSFactory>(*this));
 | 
			
		||||
        Core::System::GetInstance().GetFileSystemController().RegisterRomFS(
 | 
			
		||||
            std::make_unique<FileSys::RomFSFactory>(*this));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    is_loaded = true;
 | 
			
		||||
 | 
			
		||||
@ -10,6 +10,7 @@
 | 
			
		||||
#include "common/file_util.h"
 | 
			
		||||
#include "common/logging/log.h"
 | 
			
		||||
#include "common/swap.h"
 | 
			
		||||
#include "core/core.h"
 | 
			
		||||
#include "core/file_sys/control_metadata.h"
 | 
			
		||||
#include "core/file_sys/romfs_factory.h"
 | 
			
		||||
#include "core/file_sys/vfs_offset.h"
 | 
			
		||||
@ -214,7 +215,8 @@ AppLoader_NRO::LoadResult AppLoader_NRO::Load(Kernel::Process& process) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    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;
 | 
			
		||||
 | 
			
		||||
@ -5,6 +5,7 @@
 | 
			
		||||
#include <vector>
 | 
			
		||||
 | 
			
		||||
#include "common/common_types.h"
 | 
			
		||||
#include "core/core.h"
 | 
			
		||||
#include "core/file_sys/card_image.h"
 | 
			
		||||
#include "core/file_sys/content_archive.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;
 | 
			
		||||
    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;
 | 
			
		||||
 | 
			
		||||
@ -5,6 +5,7 @@
 | 
			
		||||
#include <vector>
 | 
			
		||||
 | 
			
		||||
#include "common/common_types.h"
 | 
			
		||||
#include "core/core.h"
 | 
			
		||||
#include "core/file_sys/card_image.h"
 | 
			
		||||
#include "core/file_sys/content_archive.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;
 | 
			
		||||
    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;
 | 
			
		||||
 | 
			
		||||
@ -221,7 +221,7 @@ GMainWindow::GMainWindow()
 | 
			
		||||
        std::make_unique<FileSys::ContentProviderUnion>());
 | 
			
		||||
    Core::System::GetInstance().RegisterContentProvider(
 | 
			
		||||
        FileSys::ContentProviderUnionSlot::FrontendManual, provider.get());
 | 
			
		||||
    Service::FileSystem::CreateFactories(*vfs);
 | 
			
		||||
    Core::System::GetInstance().GetFileSystemController().CreateFactories(*vfs);
 | 
			
		||||
 | 
			
		||||
    // Gen keys if necessary
 | 
			
		||||
    OnReinitializeKeys(ReinitializeKeyBehavior::NoWarning);
 | 
			
		||||
@ -1507,15 +1507,19 @@ void GMainWindow::OnMenuInstallToNAND() {
 | 
			
		||||
            failed();
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        const auto res =
 | 
			
		||||
            Service::FileSystem::GetUserNANDContents()->InstallEntry(*nsp, false, qt_raw_copy);
 | 
			
		||||
        const auto res = Core::System::GetInstance()
 | 
			
		||||
                             .GetFileSystemController()
 | 
			
		||||
                             .GetUserNANDContents()
 | 
			
		||||
                             ->InstallEntry(*nsp, false, qt_raw_copy);
 | 
			
		||||
        if (res == FileSys::InstallResult::Success) {
 | 
			
		||||
            success();
 | 
			
		||||
        } else {
 | 
			
		||||
            if (res == FileSys::InstallResult::ErrorAlreadyExists) {
 | 
			
		||||
                if (overwrite()) {
 | 
			
		||||
                    const auto res2 = Service::FileSystem::GetUserNANDContents()->InstallEntry(
 | 
			
		||||
                        *nsp, true, qt_raw_copy);
 | 
			
		||||
                    const auto res2 = Core::System::GetInstance()
 | 
			
		||||
                                          .GetFileSystemController()
 | 
			
		||||
                                          .GetUserNANDContents()
 | 
			
		||||
                                          ->InstallEntry(*nsp, true, qt_raw_copy);
 | 
			
		||||
                    if (res2 == FileSys::InstallResult::Success) {
 | 
			
		||||
                        success();
 | 
			
		||||
                    } else {
 | 
			
		||||
@ -1569,19 +1573,28 @@ void GMainWindow::OnMenuInstallToNAND() {
 | 
			
		||||
 | 
			
		||||
        FileSys::InstallResult res;
 | 
			
		||||
        if (index >= static_cast<size_t>(FileSys::TitleType::Application)) {
 | 
			
		||||
            res = Service::FileSystem::GetUserNANDContents()->InstallEntry(
 | 
			
		||||
                *nca, static_cast<FileSys::TitleType>(index), false, qt_raw_copy);
 | 
			
		||||
            res = Core::System::GetInstance()
 | 
			
		||||
                      .GetFileSystemController()
 | 
			
		||||
                      .GetUserNANDContents()
 | 
			
		||||
                      ->InstallEntry(*nca, static_cast<FileSys::TitleType>(index), false,
 | 
			
		||||
                                     qt_raw_copy);
 | 
			
		||||
        } else {
 | 
			
		||||
            res = Service::FileSystem::GetSystemNANDContents()->InstallEntry(
 | 
			
		||||
                *nca, static_cast<FileSys::TitleType>(index), false, qt_raw_copy);
 | 
			
		||||
            res = Core::System::GetInstance()
 | 
			
		||||
                      .GetFileSystemController()
 | 
			
		||||
                      .GetSystemNANDContents()
 | 
			
		||||
                      ->InstallEntry(*nca, static_cast<FileSys::TitleType>(index), false,
 | 
			
		||||
                                     qt_raw_copy);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (res == FileSys::InstallResult::Success) {
 | 
			
		||||
            success();
 | 
			
		||||
        } else if (res == FileSys::InstallResult::ErrorAlreadyExists) {
 | 
			
		||||
            if (overwrite()) {
 | 
			
		||||
                const auto res2 = Service::FileSystem::GetUserNANDContents()->InstallEntry(
 | 
			
		||||
                    *nca, static_cast<FileSys::TitleType>(index), true, qt_raw_copy);
 | 
			
		||||
                const auto res2 = Core::System::GetInstance()
 | 
			
		||||
                                      .GetFileSystemController()
 | 
			
		||||
                                      .GetUserNANDContents()
 | 
			
		||||
                                      ->InstallEntry(*nca, static_cast<FileSys::TitleType>(index),
 | 
			
		||||
                                                     true, qt_raw_copy);
 | 
			
		||||
                if (res2 == FileSys::InstallResult::Success) {
 | 
			
		||||
                    success();
 | 
			
		||||
                } else {
 | 
			
		||||
@ -1611,7 +1624,7 @@ void GMainWindow::OnMenuSelectEmulatedDirectory(EmulatedDirectoryTarget target)
 | 
			
		||||
        FileUtil::GetUserPath(target == EmulatedDirectoryTarget::SDMC ? FileUtil::UserPath::SDMCDir
 | 
			
		||||
                                                                      : FileUtil::UserPath::NANDDir,
 | 
			
		||||
                              dir_path.toStdString());
 | 
			
		||||
        Service::FileSystem::CreateFactories(*vfs);
 | 
			
		||||
        Core::System::GetInstance().GetFileSystemController().CreateFactories(*vfs);
 | 
			
		||||
        game_list->PopulateAsync(UISettings::values.game_dirs);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1996,7 +2009,7 @@ void GMainWindow::OnReinitializeKeys(ReinitializeKeyBehavior behavior) {
 | 
			
		||||
 | 
			
		||||
        const auto function = [this, &keys, &pdm] {
 | 
			
		||||
            keys.PopulateFromPartitionData(pdm);
 | 
			
		||||
            Service::FileSystem::CreateFactories(*vfs);
 | 
			
		||||
            Core::System::GetInstance().GetFileSystemController().CreateFactories(*vfs);
 | 
			
		||||
            keys.DeriveETicket(pdm);
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
@ -2041,7 +2054,7 @@ void GMainWindow::OnReinitializeKeys(ReinitializeKeyBehavior behavior) {
 | 
			
		||||
        prog.close();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Service::FileSystem::CreateFactories(*vfs);
 | 
			
		||||
    Core::System::GetInstance().GetFileSystemController().CreateFactories(*vfs);
 | 
			
		||||
 | 
			
		||||
    if (behavior == ReinitializeKeyBehavior::Warning) {
 | 
			
		||||
        game_list->PopulateAsync(UISettings::values.game_dirs);
 | 
			
		||||
 | 
			
		||||
@ -184,7 +184,7 @@ int main(int argc, char** argv) {
 | 
			
		||||
    Core::System& system{Core::System::GetInstance()};
 | 
			
		||||
    system.SetContentProvider(std::make_unique<FileSys::ContentProviderUnion>());
 | 
			
		||||
    system.SetFilesystem(std::make_shared<FileSys::RealVfsFilesystem>());
 | 
			
		||||
    Service::FileSystem::CreateFactories(*system.GetFilesystem());
 | 
			
		||||
    system.GetFileSystemController().CreateFactories(*system.GetFilesystem());
 | 
			
		||||
 | 
			
		||||
    SCOPE_EXIT({ system.Shutdown(); });
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user