// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. // This file reiimplements CoreFX source file 'src/Common/src/Interop/Unix/System.Native/Interop.Read.cs' using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using Microsoft.Win32.SafeHandles; using System; internal static partial class Interop { internal static partial class Sys { static Sys () { Interop.mono_pal_init (); } /// /// Reads a number of bytes from an open file descriptor into a specified buffer. /// /// The open file descriptor to try to read from /// The buffer to read info into /// The size of the buffer /// /// Returns the number of bytes read on success; otherwise, -1 is returned /// Note - on fail. the position of the stream may change depending on the platform; consult man 2 read for more info /// internal static unsafe int Read (SafeFileHandle fd, byte* buffer, int count) { int bytes_read = -1; bool release = false; try { fd.DangerousAddRef (ref release); do { bytes_read = Read (fd.DangerousGetHandle (), buffer, count); } while (bytes_read < 0 && Marshal.GetLastWin32Error () == (int) Interop.Error.EINTR); } finally { if (release) fd.DangerousRelease (); } return bytes_read; } [MethodImplAttribute(MethodImplOptions.InternalCall)] internal static extern unsafe int Read (IntPtr fd, byte* buffer, int count); } }