aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.HLE/Loaders/Processes/Extensions/LocalFileSystemExtensions.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.HLE/Loaders/Processes/Extensions/LocalFileSystemExtensions.cs')
-rw-r--r--src/Ryujinx.HLE/Loaders/Processes/Extensions/LocalFileSystemExtensions.cs39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/Ryujinx.HLE/Loaders/Processes/Extensions/LocalFileSystemExtensions.cs b/src/Ryujinx.HLE/Loaders/Processes/Extensions/LocalFileSystemExtensions.cs
new file mode 100644
index 00000000..28d90785
--- /dev/null
+++ b/src/Ryujinx.HLE/Loaders/Processes/Extensions/LocalFileSystemExtensions.cs
@@ -0,0 +1,39 @@
+using LibHac.Common;
+using LibHac.FsSystem;
+using LibHac.Loader;
+using LibHac.Ns;
+using Ryujinx.HLE.Loaders.Processes.Extensions;
+using ApplicationId = LibHac.Ncm.ApplicationId;
+
+namespace Ryujinx.HLE.Loaders.Processes
+{
+ static class LocalFileSystemExtensions
+ {
+ public static ProcessResult Load(this LocalFileSystem exeFs, Switch device, string romFsPath = "")
+ {
+ MetaLoader metaLoader = exeFs.GetNpdm();
+ var nacpData = new BlitStruct<ApplicationControlProperty>(1);
+ ulong programId = metaLoader.GetProgramId();
+
+ device.Configuration.VirtualFileSystem.ModLoader.CollectMods(
+ new[] { programId },
+ device.Configuration.VirtualFileSystem.ModLoader.GetModsBasePath(),
+ device.Configuration.VirtualFileSystem.ModLoader.GetSdModsBasePath());
+
+ if (programId != 0)
+ {
+ ProcessLoaderHelper.EnsureSaveData(device, new ApplicationId(programId), nacpData);
+ }
+
+ ProcessResult processResult = exeFs.Load(device, nacpData, metaLoader);
+
+ // Load RomFS.
+ if (!string.IsNullOrEmpty(romFsPath))
+ {
+ device.Configuration.VirtualFileSystem.LoadRomFs(processResult.ProcessId, romFsPath);
+ }
+
+ return processResult;
+ }
+ }
+}