ISaveDataInfoReader.cs 1.3 KB

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