diff options
| author | Léo Lam <leo@innovatetechnologi.es> | 2018-03-03 18:25:51 +0100 |
|---|---|---|
| committer | Léo Lam <leo@innovatetechnologi.es> | 2018-03-31 10:45:44 +0200 |
| commit | fcfe4e2a26ca02b242435edb91179c4a749b1ea8 (patch) | |
| tree | 1d4f489a170c1369be95b383aaef770636962f4c /Source | |
| parent | 1eec459e308bd41d492b515229e318dcaf121251 (diff) | |
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).
Diffstat (limited to 'Source')
| -rw-r--r-- | Source/Core/Core/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | Source/Core/Core/Core.vcxproj | 1 | ||||
| -rw-r--r-- | Source/Core/Core/Core.vcxproj.filters | 3 | ||||
| -rw-r--r-- | Source/Core/Core/IOS/FS/FileSystem.cpp | 15 | ||||
| -rw-r--r-- | Source/Core/Core/IOS/FS/FileSystem.h | 3 | ||||
| -rw-r--r-- | Source/Core/Core/IOS/IOS.cpp | 9 | ||||
| -rw-r--r-- | Source/Core/Core/IOS/IOS.h | 9 |
7 files changed, 37 insertions, 4 deletions
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 @@ <ClCompile Include="IOS\ES\Views.cpp" /> <ClCompile Include="IOS\FS\FileIO.cpp" /> <ClCompile Include="IOS\FS\FS.cpp" /> + <ClCompile Include="IOS\FS\FileSystem.cpp" /> <ClCompile Include="IOS\FS\HostBackend\FS.cpp" /> <ClCompile Include="IOS\FS\HostBackend\File.cpp" /> <ClCompile Include="IOS\Network\ICMPLin.cpp" /> 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 @@ <ClCompile Include="IOS\FS\FileIO.cpp"> <Filter>IOS\FS</Filter> </ClCompile> + <ClCompile Include="IOS\FS\FileSystem.cpp"> + <Filter>IOS\FS</Filter> + </ClCompile> <ClCompile Include="IOS\FS\HostBackend\FS.cpp"> <Filter>IOS\FS</Filter> </ClCompile> 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<FileSystem> MakeFileSystem() +{ + return std::make_unique<HostFileSystem>(); +} +} // 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 <memory> #include <string> #include <vector> @@ -170,4 +171,6 @@ public: virtual Result<DirectoryStats> GetDirectoryStats(const std::string& path) = 0; }; +std::unique_ptr<FileSystem> 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<u32>(m_title_id); } -std::shared_ptr<Device::FS> Kernel::GetFS() +std::shared_ptr<FS::FileSystem> Kernel::GetFS() { - return std::static_pointer_cast<Device::FS>(m_device_map.at("/dev/fs")); + return m_fs; } std::shared_ptr<Device::ES> Kernel::GetES() @@ -368,6 +369,9 @@ void Kernel::AddDevice(std::unique_ptr<Device::Device> device) void Kernel::AddCoreDevices() { + m_fs = FS::MakeFileSystem(); + ASSERT(m_fs); + std::lock_guard<std::mutex> lock(m_device_map_mutex); AddDevice(std::make_unique<Device::FS>(*this, "/dev/fs")); AddDevice(std::make_unique<Device::ES>(*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<Device::FS> GetFS(); + std::shared_ptr<FS::FileSystem> GetFS(); std::shared_ptr<Device::ES> GetES(); void SDIO_EventNotify(); @@ -146,6 +150,7 @@ protected: u64 m_last_reply_time = 0; IOSC m_iosc; + std::shared_ptr<FS::FileSystem> m_fs; }; // HLE for an IOS tied to emulation: base kernel which may have additional modules loaded. |
