using LibHac; using LibHac.Common; using LibHac.Sf; namespace Ryujinx.HLE.HOS.Services.Fs { class ISaveDataInfoReader : DisposableIpcService { private SharedRef _baseReader; public ISaveDataInfoReader(ref SharedRef baseReader) { _baseReader = SharedRef.CreateMove(ref baseReader); } [CommandCmif(0)] // ReadSaveDataInfo() -> (u64, buffer) public ResultCode ReadSaveDataInfo(ServiceCtx context) { ulong bufferAddress = context.Request.ReceiveBuff[0].Position; ulong bufferLen = context.Request.ReceiveBuff[0].Size; using (var region = context.Memory.GetWritableRegion(bufferAddress, (int)bufferLen, true)) { Result result = _baseReader.Get.Read(out long readCount, new OutBuffer(region.Memory.Span)); context.ResponseData.Write(readCount); return (ResultCode)result.Value; } } protected override void Dispose(bool isDisposing) { if (isDisposing) { _baseReader.Destroy(); } } } }