aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IDirectory.cs
diff options
context:
space:
mode:
authorAlex Barney <thealexbarney@gmail.com>2021-08-12 14:56:24 -0700
committerGitHub <noreply@github.com>2021-08-12 23:56:24 +0200
commitdadc0e59daa89c4dd7f0c3356f302481a4e75e6d (patch)
treee39b6cd5198fef1fb2fe3461072b0961fd63502d /Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IDirectory.cs
parent3977d1f72b8f091443018b68277044a840931054 (diff)
Update to LibHac 0.13.1 (#2475)
* Update to LibHac 0.13.1 * Recreate directories for indexed saves if they're missing on emulator start
Diffstat (limited to 'Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IDirectory.cs')
-rw-r--r--Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IDirectory.cs29
1 files changed, 17 insertions, 12 deletions
diff --git a/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IDirectory.cs b/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IDirectory.cs
index 565ddc4c..99e545b1 100644
--- a/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IDirectory.cs
+++ b/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IDirectory.cs
@@ -1,15 +1,13 @@
using LibHac;
-using LibHac.Fs;
-using System;
-using System.Runtime.InteropServices;
+using LibHac.Sf;
namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy
{
- class IDirectory : IpcService
+ class IDirectory : DisposableIpcService
{
- private LibHac.Fs.Fsa.IDirectory _baseDirectory;
+ private ReferenceCountedDisposable<LibHac.FsSrv.Sf.IDirectory> _baseDirectory;
- public IDirectory(LibHac.Fs.Fsa.IDirectory directory)
+ public IDirectory(ReferenceCountedDisposable<LibHac.FsSrv.Sf.IDirectory> directory)
{
_baseDirectory = directory;
}
@@ -19,14 +17,13 @@ namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy
public ResultCode Read(ServiceCtx context)
{
ulong bufferPosition = context.Request.ReceiveBuff[0].Position;
- ulong bufferLen = context.Request.ReceiveBuff[0].Size;
+ ulong bufferLen = context.Request.ReceiveBuff[0].Size;
- byte[] entriesBytes = new byte[bufferLen];
- Span<DirectoryEntry> entries = MemoryMarshal.Cast<byte, DirectoryEntry>(entriesBytes);
+ byte[] entryBuffer = new byte[bufferLen];
- Result result = _baseDirectory.Read(out long entriesRead, entries);
+ Result result = _baseDirectory.Target.Read(out long entriesRead, new OutBuffer(entryBuffer));
- context.Memory.Write(bufferPosition, entriesBytes);
+ context.Memory.Write(bufferPosition, entryBuffer);
context.ResponseData.Write(entriesRead);
return (ResultCode)result.Value;
@@ -36,11 +33,19 @@ namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy
// GetEntryCount() -> u64
public ResultCode GetEntryCount(ServiceCtx context)
{
- Result result = _baseDirectory.GetEntryCount(out long entryCount);
+ Result result = _baseDirectory.Target.GetEntryCount(out long entryCount);
context.ResponseData.Write(entryCount);
return (ResultCode)result.Value;
}
+
+ protected override void Dispose(bool isDisposing)
+ {
+ if (isDisposing)
+ {
+ _baseDirectory?.Dispose();
+ }
+ }
}
}