ISaveDataInfoReader.cs 1.2 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 bufferPosition = context.Request.ReceiveBuff[0].Position;
  18. ulong bufferLen = context.Request.ReceiveBuff[0].Size;
  19. byte[] infoBuffer = new byte[bufferLen];
  20. Result result = _baseReader.Get.Read(out long readCount, new OutBuffer(infoBuffer));
  21. context.Memory.Write(bufferPosition, infoBuffer);
  22. context.ResponseData.Write(readCount);
  23. return (ResultCode)result.Value;
  24. }
  25. protected override void Dispose(bool isDisposing)
  26. {
  27. if (isDisposing)
  28. {
  29. _baseReader.Destroy();
  30. }
  31. }
  32. }
  33. }