aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Ryujinx.HLE/HOS/Services/Fs/IFileSystemProxy.cs21
1 files changed, 21 insertions, 0 deletions
diff --git a/Ryujinx.HLE/HOS/Services/Fs/IFileSystemProxy.cs b/Ryujinx.HLE/HOS/Services/Fs/IFileSystemProxy.cs
index c32750be..2ec45aa5 100644
--- a/Ryujinx.HLE/HOS/Services/Fs/IFileSystemProxy.cs
+++ b/Ryujinx.HLE/HOS/Services/Fs/IFileSystemProxy.cs
@@ -12,6 +12,7 @@ using LibHac.Tools.FsSystem.NcaUtils;
using Ryujinx.Common;
using Ryujinx.Common.Logging;
using Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy;
+using System;
using System.IO;
using static Ryujinx.HLE.Utilities.StringUtils;
@@ -787,6 +788,26 @@ namespace Ryujinx.HLE.HOS.Services.Fs
return ResultCode.Success;
}
+ [CommandHipc(205)]
+ // OpenDataStorageWithProgramIndex(u8 program_index) -> object<nn::fssrv::sf::IStorage>
+ public ResultCode OpenDataStorageWithProgramIndex(ServiceCtx context)
+ {
+ byte programIndex = context.RequestData.ReadByte();
+
+ if ((context.Device.Application.TitleId & 0xf) != programIndex)
+ {
+ throw new NotImplementedException($"Accessing storage from other programs is not supported (program index = {programIndex}).");
+ }
+
+ var storage = context.Device.FileSystem.RomFs.AsStorage(true);
+ using var sharedStorage = new SharedRef<LibHac.Fs.IStorage>(storage);
+ using var sfStorage = new SharedRef<IStorage>(new StorageInterfaceAdapter(ref sharedStorage.Ref()));
+
+ MakeObject(context, new FileSystemProxy.IStorage(ref sfStorage.Ref()));
+
+ return ResultCode.Success;
+ }
+
[CommandHipc(400)]
// OpenDataStorageByCurrentProcess() -> object<nn::fssrv::sf::IStorage> dataStorage
public ResultCode OpenDeviceOperator(ServiceCtx context)