From: Michal Strehovský Date: Fri, 2 Mar 2018 09:28:43 +0000 (+0100) Subject: Work around MCG bug around `ref char` marshalling (dotnet/corert#5481) X-Git-Tag: accepted/tizen/unified/20190422.045933~2795 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=369ef400aad1a4a2adbe815d450608a02b6b9acb;p=platform%2Fupstream%2Fcoreclr.git Work around MCG bug around `ref char` marshalling (dotnet/corert#5481) The change in the P/invoke signature that came from CoreCLR triggers a bug in MCG on the TFS side. Signed-off-by: dotnet-bot --- diff --git a/src/mscorlib/shared/Interop/Windows/Kernel32/Interop.GetFullPathNameW.cs b/src/mscorlib/shared/Interop/Windows/Kernel32/Interop.GetFullPathNameW.cs index b4d4170..0603045 100644 --- a/src/mscorlib/shared/Interop/Windows/Kernel32/Interop.GetFullPathNameW.cs +++ b/src/mscorlib/shared/Interop/Windows/Kernel32/Interop.GetFullPathNameW.cs @@ -13,6 +13,17 @@ internal partial class Interop /// WARNING: This method does not implicitly handle long paths. Use GetFullPathName or PathHelper. /// [DllImport(Libraries.Kernel32, SetLastError = true, CharSet = CharSet.Unicode, BestFitMapping = false, ExactSpelling = true)] +#if PROJECTN + internal static extern unsafe uint GetFullPathNameW(string path, uint numBufferChars, char* buffer, IntPtr mustBeZero); + + // Works around https://devdiv.visualstudio.com/web/wi.aspx?pcguid=011b8bdf-6d56-4f87-be0d-0092136884d9&id=575202 + internal static unsafe uint GetFullPathNameW(string path, uint numBufferChars, ref char buffer, IntPtr mustBeZero) + { + fixed (char* pBuffer = &buffer) + return GetFullPathNameW(path, numBufferChars, pBuffer, mustBeZero); + } +#else internal static extern uint GetFullPathNameW(string path, uint numBufferChars, ref char buffer, IntPtr mustBeZero); +#endif } } diff --git a/src/mscorlib/shared/Interop/Windows/Kernel32/Interop.GetLongPathNameW.cs b/src/mscorlib/shared/Interop/Windows/Kernel32/Interop.GetLongPathNameW.cs index 81b4d09..09e98d0 100644 --- a/src/mscorlib/shared/Interop/Windows/Kernel32/Interop.GetLongPathNameW.cs +++ b/src/mscorlib/shared/Interop/Windows/Kernel32/Interop.GetLongPathNameW.cs @@ -13,6 +13,17 @@ internal partial class Interop /// WARNING: This method does not implicitly handle long paths. Use GetFullPath/PathHelper. /// [DllImport(Libraries.Kernel32, SetLastError = true, CharSet = CharSet.Unicode, BestFitMapping = false, ExactSpelling = true)] +#if PROJECTN + internal static extern unsafe uint GetLongPathNameW(ref char lpszShortPath, char* lpszLongPath, uint cchBuffer); + + // Works around https://devdiv.visualstudio.com/web/wi.aspx?pcguid=011b8bdf-6d56-4f87-be0d-0092136884d9&id=575202 + internal static unsafe uint GetLongPathNameW(ref char lpszShortPath, ref char lpszLongPath, uint cchBuffer) + { + fixed (char* plpszLongPath = &lpszLongPath) + return GetLongPathNameW(ref lpszShortPath, plpszLongPath, cchBuffer); + } +#else internal static extern uint GetLongPathNameW(ref char lpszShortPath, ref char lpszLongPath, uint cchBuffer); +#endif } }