From 8ca0fdff6a1c729efbeb9ec5ba84ca0bfd1e9560 Mon Sep 17 00:00:00 2001 From: Next Turn <45985406+NextTurn@users.noreply.github.com> Date: Mon, 24 Feb 2020 12:49:28 +0800 Subject: [PATCH] Update library name variations for uses with LoadLibrary (#32707) --- .../src/System/Runtime/Loader/LibraryNameVariation.Unix.cs | 2 +- .../src/System/Runtime/Loader/LibraryNameVariation.Windows.cs | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Runtime/Loader/LibraryNameVariation.Unix.cs b/src/libraries/System.Private.CoreLib/src/System/Runtime/Loader/LibraryNameVariation.Unix.cs index da0b900..322c751 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Runtime/Loader/LibraryNameVariation.Unix.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Runtime/Loader/LibraryNameVariation.Unix.cs @@ -16,7 +16,7 @@ namespace System.Runtime.Loader private const string LibraryNameSuffix = ".so"; #endif - internal static IEnumerable DetermineLibraryNameVariations(string libName, bool isRelativePath) + internal static IEnumerable DetermineLibraryNameVariations(string libName, bool isRelativePath, bool forSystemApi = false) { // This is a copy of the logic in DetermineLibNameVariations in dllimport.cpp in CoreCLR diff --git a/src/libraries/System.Private.CoreLib/src/System/Runtime/Loader/LibraryNameVariation.Windows.cs b/src/libraries/System.Private.CoreLib/src/System/Runtime/Loader/LibraryNameVariation.Windows.cs index 64b9e17..f1f226e 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Runtime/Loader/LibraryNameVariation.Windows.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Runtime/Loader/LibraryNameVariation.Windows.cs @@ -10,13 +10,15 @@ namespace System.Runtime.Loader { private const string LibraryNameSuffix = ".dll"; - internal static IEnumerable DetermineLibraryNameVariations(string libName, bool isRelativePath) + internal static IEnumerable DetermineLibraryNameVariations(string libName, bool isRelativePath, bool forSystemApi = false) { // This is a copy of the logic in DetermineLibNameVariations in dllimport.cpp in CoreCLR yield return new LibraryNameVariation(string.Empty, string.Empty); + // Follow LoadLibrary rules if forSystemApi is true if (isRelativePath && + (!forSystemApi || libName.Contains('.') && !libName.EndsWith('.')) && !libName.EndsWith(".dll", StringComparison.OrdinalIgnoreCase) && !libName.EndsWith(".exe", StringComparison.OrdinalIgnoreCase)) { -- 2.7.4