// Read(u32 fd) -> (i32 ret, u32 bsd_errno, buffer<i8, 0x22, 0> message) public ResultCode Read(ServiceCtx context) { int fd = context.RequestData.ReadInt32(); (ulong receivePosition, ulong receiveLength) = context.Request.GetBufferType0x22(); WritableRegion receiveRegion = context.Memory.GetWritableRegion(receivePosition, (int)receiveLength); LinuxError errno = LinuxError.EBADF; IFileDescriptor file = _context.RetrieveFileDescriptor(fd); int result = -1; if (file != null) { errno = file.Read(out result, receiveRegion.Memory.Span); if (errno == LinuxError.SUCCESS) { SetResultErrno(file, result); receiveRegion.Dispose(); } } return(WriteBsdResult(context, result, errno)); }