From 69c33ed0be29de36e9fbd3188b55d0cd165d578a Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Sat, 12 Jun 2021 16:20:35 -0600 Subject: [PATCH] Switch from PInvoke nuget dependency to CsWin32 Fixes #615 --- .../ManagedGit/FileHelpers.cs | 16 +++++++++------- src/NerdBank.GitVersioning/NativeMethods.json | 3 +++ src/NerdBank.GitVersioning/NativeMethods.txt | 2 ++ .../NerdBank.GitVersioning.csproj | 2 +- .../Nerdbank.GitVersioning.nuspec | 2 -- 5 files changed, 15 insertions(+), 10 deletions(-) create mode 100644 src/NerdBank.GitVersioning/NativeMethods.json create mode 100644 src/NerdBank.GitVersioning/NativeMethods.txt diff --git a/src/NerdBank.GitVersioning/ManagedGit/FileHelpers.cs b/src/NerdBank.GitVersioning/ManagedGit/FileHelpers.cs index 623539a1..eb250db9 100644 --- a/src/NerdBank.GitVersioning/ManagedGit/FileHelpers.cs +++ b/src/NerdBank.GitVersioning/ManagedGit/FileHelpers.cs @@ -5,8 +5,7 @@ using System.IO; using System.Runtime.InteropServices; using Microsoft.Win32.SafeHandles; -using static PInvoke.Kernel32; -using FileShare = PInvoke.Kernel32.FileShare; +using Microsoft.Windows.Sdk; namespace Nerdbank.GitVersioning.ManagedGit { @@ -24,7 +23,7 @@ internal static bool TryOpen(string path, out FileStream? stream) { if (IsWindows) { - var handle = CreateFile(path, ACCESS_MASK.GenericRight.GENERIC_READ, FileShare.FILE_SHARE_READ, (SECURITY_ATTRIBUTES?)null, CreationDisposition.OPEN_EXISTING, CreateFileFlags.FILE_ATTRIBUTE_NORMAL, SafeObjectHandle.Null); + var handle = PInvoke.CreateFile(path, FILE_ACCESS_FLAGS.FILE_GENERIC_READ, FILE_SHARE_FLAGS.FILE_SHARE_READ, lpSecurityAttributes: null, FILE_CREATE_FLAGS.OPEN_EXISTING, FILE_FLAGS_AND_ATTRIBUTES.FILE_ATTRIBUTE_NORMAL, null); if (!handle.IsInvalid) { @@ -62,12 +61,15 @@ internal static unsafe bool TryOpen(ReadOnlySpan path, [NotNullWhen(true)] { if (IsWindows) { - var handle = CreateFile(path, ACCESS_MASK.GenericRight.GENERIC_READ, FileShare.FILE_SHARE_READ, null, CreationDisposition.OPEN_EXISTING, CreateFileFlags.FILE_ATTRIBUTE_NORMAL, SafeObjectHandle.Null); + HANDLE handle; + fixed (char* pPath = &path[0]) + { + handle = PInvoke.CreateFile(pPath, FILE_ACCESS_FLAGS.FILE_GENERIC_READ, FILE_SHARE_FLAGS.FILE_SHARE_READ, null, FILE_CREATE_FLAGS.OPEN_EXISTING, FILE_FLAGS_AND_ATTRIBUTES.FILE_ATTRIBUTE_NORMAL, default); + } - if (!handle.IsInvalid) + if (!handle.Equals(Constants.INVALID_HANDLE_VALUE)) { - var fileHandle = new SafeFileHandle(handle.DangerousGetHandle(), ownsHandle: true); - handle.SetHandleAsInvalid(); + var fileHandle = new SafeFileHandle(handle, ownsHandle: true); stream = new FileStream(fileHandle, System.IO.FileAccess.Read); return true; } diff --git a/src/NerdBank.GitVersioning/NativeMethods.json b/src/NerdBank.GitVersioning/NativeMethods.json new file mode 100644 index 00000000..69d2bcc5 --- /dev/null +++ b/src/NerdBank.GitVersioning/NativeMethods.json @@ -0,0 +1,3 @@ +{ + "$schema": "https://aka.ms/CsWin32.schema.json" +} \ No newline at end of file diff --git a/src/NerdBank.GitVersioning/NativeMethods.txt b/src/NerdBank.GitVersioning/NativeMethods.txt new file mode 100644 index 00000000..885be08e --- /dev/null +++ b/src/NerdBank.GitVersioning/NativeMethods.txt @@ -0,0 +1,2 @@ +CreateFile +INVALID_HANDLE_VALUE diff --git a/src/NerdBank.GitVersioning/NerdBank.GitVersioning.csproj b/src/NerdBank.GitVersioning/NerdBank.GitVersioning.csproj index afeb8233..b196afbc 100644 --- a/src/NerdBank.GitVersioning/NerdBank.GitVersioning.csproj +++ b/src/NerdBank.GitVersioning/NerdBank.GitVersioning.csproj @@ -12,12 +12,12 @@ + - diff --git a/src/Nerdbank.GitVersioning.Tasks/Nerdbank.GitVersioning.nuspec b/src/Nerdbank.GitVersioning.Tasks/Nerdbank.GitVersioning.nuspec index 30e035fc..48fc3455 100644 --- a/src/Nerdbank.GitVersioning.Tasks/Nerdbank.GitVersioning.nuspec +++ b/src/Nerdbank.GitVersioning.Tasks/Nerdbank.GitVersioning.nuspec @@ -23,7 +23,6 @@ IMPORTANT: The 3.x release may produce a different version height than prior maj - @@ -49,7 +48,6 @@ IMPORTANT: The 3.x release may produce a different version height than prior maj -