diff options
author | gdkchan <gab.dark.100@gmail.com> | 2022-10-17 10:37:05 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-17 13:37:05 +0000 |
commit | 7c1d2bbb989f314e4a8316b33651b27e8a7024bc (patch) | |
tree | 2a9a472c44d29402c066dadbd3092f9a8c0fe64f | |
parent | beacf8c1c89d94a31d98c1b4ad74ee84f80945bc (diff) |
Implement OpenDataStorageWithProgramIndex partially (#3765)1.1.306
* Implement OpenDataStorageWithProgramIndex partially
* Was not supposed to change this
-rw-r--r-- | Ryujinx.HLE/HOS/Services/Fs/IFileSystemProxy.cs | 21 |
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) |