From fcfe4e2a26ca02b242435edb91179c4a749b1ea8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Sat, 3 Mar 2018 18:25:51 +0100 Subject: [PATCH] IOS: Change GetFS() to return a FileSystem Now that we have a proper filesystem interface, it makes more sense to return it instead of the emulated IOS device (which isn't really usable for any purpose other than emulated IPC). --- Source/Core/Core/CMakeLists.txt | 1 + Source/Core/Core/Core.vcxproj | 1 + Source/Core/Core/Core.vcxproj.filters | 3 +++ Source/Core/Core/IOS/FS/FileSystem.cpp | 15 +++++++++++++++ Source/Core/Core/IOS/FS/FileSystem.h | 3 +++ Source/Core/Core/IOS/IOS.cpp | 9 +++++++-- Source/Core/Core/IOS/IOS.h | 9 +++++++-- 7 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 Source/Core/Core/IOS/FS/FileSystem.cpp diff --git a/Source/Core/Core/CMakeLists.txt b/Source/Core/Core/CMakeLists.txt index f22d5ed3c9..d3e0cd5b97 100644 --- a/Source/Core/Core/CMakeLists.txt +++ b/Source/Core/Core/CMakeLists.txt @@ -165,6 +165,7 @@ add_library(core IOS/ES/TitleInformation.cpp IOS/ES/TitleManagement.cpp IOS/ES/Views.cpp + IOS/FS/FileSystem.cpp IOS/FS/HostBackend/File.cpp IOS/FS/HostBackend/FS.cpp IOS/FS/FileIO.cpp diff --git a/Source/Core/Core/Core.vcxproj b/Source/Core/Core/Core.vcxproj index 847086a188..0abe26aa84 100644 --- a/Source/Core/Core/Core.vcxproj +++ b/Source/Core/Core/Core.vcxproj @@ -197,6 +197,7 @@ + diff --git a/Source/Core/Core/Core.vcxproj.filters b/Source/Core/Core/Core.vcxproj.filters index f997b6a741..cff27f6add 100644 --- a/Source/Core/Core/Core.vcxproj.filters +++ b/Source/Core/Core/Core.vcxproj.filters @@ -735,6 +735,9 @@ IOS\FS + + IOS\FS + IOS\FS diff --git a/Source/Core/Core/IOS/FS/FileSystem.cpp b/Source/Core/Core/IOS/FS/FileSystem.cpp new file mode 100644 index 0000000000..74cee8e9cd --- /dev/null +++ b/Source/Core/Core/IOS/FS/FileSystem.cpp @@ -0,0 +1,15 @@ +// Copyright 2018 Dolphin Emulator Project +// Licensed under GPLv2+ +// Refer to the license.txt file included. + +#include "Core/IOS/FS/FileSystem.h" + +#include "Core/IOS/FS/HostBackend/FS.h" + +namespace IOS::HLE::FS +{ +std::unique_ptr MakeFileSystem() +{ + return std::make_unique(); +} +} // namespace IOS::HLE::FS diff --git a/Source/Core/Core/IOS/FS/FileSystem.h b/Source/Core/Core/IOS/FS/FileSystem.h index 6607c9ab02..f56df41998 100644 --- a/Source/Core/Core/IOS/FS/FileSystem.h +++ b/Source/Core/Core/IOS/FS/FileSystem.h @@ -4,6 +4,7 @@ #pragma once +#include #include #include @@ -170,4 +171,6 @@ public: virtual Result GetDirectoryStats(const std::string& path) = 0; }; +std::unique_ptr MakeFileSystem(); + } // namespace IOS::HLE::FS diff --git a/Source/Core/Core/IOS/IOS.cpp b/Source/Core/Core/IOS/IOS.cpp index 4abd2312a5..bd704fc895 100644 --- a/Source/Core/Core/IOS/IOS.cpp +++ b/Source/Core/Core/IOS/IOS.cpp @@ -33,6 +33,7 @@ #include "Core/IOS/ES/ES.h" #include "Core/IOS/FS/FS.h" #include "Core/IOS/FS/FileIO.h" +#include "Core/IOS/FS/FileSystem.h" #include "Core/IOS/MIOS.h" #include "Core/IOS/Network/IP/Top.h" #include "Core/IOS/Network/KD/NetKDRequest.h" @@ -242,9 +243,9 @@ u32 Kernel::GetVersion() const return static_cast(m_title_id); } -std::shared_ptr Kernel::GetFS() +std::shared_ptr Kernel::GetFS() { - return std::static_pointer_cast(m_device_map.at("/dev/fs")); + return m_fs; } std::shared_ptr Kernel::GetES() @@ -368,6 +369,9 @@ void Kernel::AddDevice(std::unique_ptr device) void Kernel::AddCoreDevices() { + m_fs = FS::MakeFileSystem(); + ASSERT(m_fs); + std::lock_guard lock(m_device_map_mutex); AddDevice(std::make_unique(*this, "/dev/fs")); AddDevice(std::make_unique(*this, "/dev/es")); @@ -691,6 +695,7 @@ void Kernel::DoState(PointerWrap& p) p.Do(m_ppc_gid); m_iosc.DoState(p); + m_fs->DoState(p); if (m_title_id == Titles::MIOS) return; diff --git a/Source/Core/Core/IOS/IOS.h b/Source/Core/Core/IOS/IOS.h index 0f58359683..1d3e94b50b 100644 --- a/Source/Core/Core/IOS/IOS.h +++ b/Source/Core/Core/IOS/IOS.h @@ -23,11 +23,15 @@ namespace IOS { namespace HLE { +namespace FS +{ +class FileSystem; +} + namespace Device { class Device; class ES; -class FS; } struct Request; @@ -94,7 +98,7 @@ public: // These are *always* part of the IOS kernel and always available. // They are also the only available resource managers even before loading any module. - std::shared_ptr GetFS(); + std::shared_ptr GetFS(); std::shared_ptr GetES(); void SDIO_EventNotify(); @@ -146,6 +150,7 @@ protected: u64 m_last_reply_time = 0; IOSC m_iosc; + std::shared_ptr m_fs; }; // HLE for an IOS tied to emulation: base kernel which may have additional modules loaded.