ISaveDataInfoReader.cs 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. using LibHac;
  2. using LibHac.Sf;
  3. namespace Ryujinx.HLE.HOS.Services.Fs
  4. {
  5. class ISaveDataInfoReader : DisposableIpcService
  6. {
  7. private ReferenceCountedDisposable<LibHac.FsSrv.Sf.ISaveDataInfoReader> _baseReader;
  8. public ISaveDataInfoReader(ReferenceCountedDisposable<LibHac.FsSrv.Sf.ISaveDataInfoReader> baseReader)
  9. {
  10. _baseReader = baseReader;
  11. }
  12. [CommandHipc(0)]
  13. // ReadSaveDataInfo() -> (u64, buffer<unknown, 6>)
  14. public ResultCode ReadSaveDataInfo(ServiceCtx context)
  15. {
  16. ulong bufferPosition = context.Request.ReceiveBuff[0].Position;
  17. ulong bufferLen = context.Request.ReceiveBuff[0].Size;
  18. byte[] infoBuffer = new byte[bufferLen];
  19. Result result = _baseReader.Target.Read(out long readCount, new OutBuffer(infoBuffer));
  20. context.Memory.Write(bufferPosition, infoBuffer);
  21. context.ResponseData.Write(readCount);
  22. return (ResultCode)result.Value;
  23. }
  24. protected override void Dispose(bool isDisposing)
  25. {
  26. if (isDisposing)
  27. {
  28. _baseReader?.Dispose();
  29. }
  30. }
  31. }
  32. }