Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/mscorlib/System.Private.CoreLib.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -858,6 +858,12 @@
<MscorlibSources Include="$(CoreFxSourcesRoot)\Microsoft\Win32\SafeHandles\SafeFileHandle.Unix.cs" />
<MscorlibSources Include="$(CoreFxSourcesRoot)\System\IO\FileStream.Unix.cs" />
</ItemGroup>
<ItemGroup Condition="'$(TargetsUnix)' == 'true' and '$(TargetsOSX)' == 'true'">
<MscorlibSources Include="$(CoreFxSourcesRoot)\System\IO\FileStream.OSX.cs" />
</ItemGroup>
<ItemGroup Condition="'$(TargetsUnix)' == 'true' and '$(TargetsOSX)' != 'true'">
<MscorlibSources Include="$(CoreFxSourcesRoot)\System\IO\FileStream.Linux.cs" />
</ItemGroup>
<ItemGroup Condition="'$(TargetsUnix)' != 'true'">
<MscorlibSources Include="$(CoreFxSourcesRoot)\Microsoft\Win32\SafeHandles\SafeFileHandle.Windows.cs" />
<MscorlibSources Include="$(CoreFxSourcesRoot)\System\IO\FileStream.Win32.cs" />
Expand Down
30 changes: 30 additions & 0 deletions src/mscorlib/corefx/System/IO/FileStream.Linux.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// 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.

using Microsoft.Win32.SafeHandles;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;

namespace System.IO
{
public partial class FileStream : Stream
{
/// <summary>Prevents other processes from reading from or writing to the FileStream.</summary>
/// <param name="position">The beginning of the range to lock.</param>
/// <param name="length">The range to be locked.</param>
private void LockInternal(long position, long length)
{
CheckFileCall(Interop.Sys.LockFileRegion(_fileHandle, position, length, Interop.Sys.LockType.F_WRLCK));
}

/// <summary>Allows access by other processes to all or part of a file that was previously locked.</summary>
/// <param name="position">The beginning of the range to unlock.</param>
/// <param name="length">The range to be unlocked.</param>
private void UnlockInternal(long position, long length)
{
CheckFileCall(Interop.Sys.LockFileRegion(_fileHandle, position, length, Interop.Sys.LockType.F_UNLCK));
}
}
}
19 changes: 19 additions & 0 deletions src/mscorlib/corefx/System/IO/FileStream.OSX.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// 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.

namespace System.IO
{
public partial class FileStream : Stream
{
private void LockInternal(long position, long length)
{
throw new PlatformNotSupportedException(Environment.GetResourceString("PlatformNotSupported_OSXFileLocking"));
}

private void UnlockInternal(long position, long length)
{
throw new PlatformNotSupportedException(Environment.GetResourceString("PlatformNotSupported_OSXFileLocking"));
}
}
}
16 changes: 0 additions & 16 deletions src/mscorlib/corefx/System/IO/FileStream.Unix.cs
Original file line number Diff line number Diff line change
Expand Up @@ -796,22 +796,6 @@ public override void WriteByte(byte value) // avoids an array allocation in the
}
}

/// <summary>Prevents other processes from reading from or writing to the FileStream.</summary>
/// <param name="position">The beginning of the range to lock.</param>
/// <param name="length">The range to be locked.</param>
private void LockInternal(long position, long length)
{
CheckFileCall(Interop.Sys.LockFileRegion(_fileHandle, position, length, Interop.Sys.LockType.F_WRLCK));
}

/// <summary>Allows access by other processes to all or part of a file that was previously locked.</summary>
/// <param name="position">The beginning of the range to unlock.</param>
/// <param name="length">The range to be unlocked.</param>
private void UnlockInternal(long position, long length)
{
CheckFileCall(Interop.Sys.LockFileRegion(_fileHandle, position, length, Interop.Sys.LockType.F_UNLCK));
}

/// <summary>Sets the current position of this stream to the given value.</summary>
/// <param name="offset">The point relative to origin from which to begin seeking. </param>
/// <param name="origin">
Expand Down
2 changes: 2 additions & 0 deletions src/mscorlib/src/System.Private.CoreLib.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1719,6 +1719,8 @@ event_Barrier_PhaseFinished=Barrier finishing phase {1}.
; Unix threading
PlatformNotSupported_NamedSynchronizationPrimitives=The named version of this synchronization primitive is not supported on this platform.
PlatformNotSupported_NamedSyncObjectWaitAnyWaitAll=Wait operations on multiple wait handles including a named synchronization primitive are not supported on this platform.
; OSX File locking
PlatformNotSupported_OSXFileLocking=Locking/unlocking file regions is not supported on this platform. Use FileShare on the entire file instead.
#endif

;
Expand Down