From 1ccddd04efe203f8023c7a309cf539620c71bca0 Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Fri, 26 Jul 2019 14:50:00 +0200 Subject: [PATCH] ENH: more stringent check before adding 'lib' prefix (OSspecific) - only prefix 'lib' for names without a path STYLE: add more OSspecific debug output for library loading --- src/OSspecific/MSwindows/MSwindows.C | 14 +++++++++++++- src/OSspecific/POSIX/POSIX.C | 20 +++++++++++++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/OSspecific/MSwindows/MSwindows.C b/src/OSspecific/MSwindows/MSwindows.C index 9ea78be680..3be89545c1 100644 --- a/src/OSspecific/MSwindows/MSwindows.C +++ b/src/OSspecific/MSwindows/MSwindows.C @@ -1197,11 +1197,23 @@ void* Foam::dlOpen(const fileName& libName, const bool check) void* handle = ::LoadLibrary(libso.c_str()); - if (!handle && !libso.startsWith("lib")) + if + ( + !handle + && libName.find('/') == std::string::npos + && !libso.startsWith("lib") + ) { // Try with 'lib' prefix libso = "lib" + libso; handle = ::LoadLibrary(libso.c_str()); + + if (MSwindows::debug) + { + std::cout + << "dlOpen(const fileName&)" + << " : dlopen of " << libso << std::endl; + } } if (handle) diff --git a/src/OSspecific/POSIX/POSIX.C b/src/OSspecific/POSIX/POSIX.C index 4b970b4a06..35568ced49 100644 --- a/src/OSspecific/POSIX/POSIX.C +++ b/src/OSspecific/POSIX/POSIX.C @@ -1670,11 +1670,22 @@ void* Foam::dlOpen(const fileName& libName, const bool check) { fileName libso; - if (!libName.startsWith("lib")) + if + ( + libName.find('/') == std::string::npos + && !libName.startsWith("lib") + ) { // Try with 'lib' prefix libso = "lib" + libName; handle = ::dlopen(libso.c_str(), ldflags); + + if (POSIX::debug) + { + std::cout + << "dlOpen(const fileName&)" + << " : dlopen of " << libso << std::endl; + } } else { @@ -1687,6 +1698,13 @@ void* Foam::dlOpen(const fileName& libName, const bool check) { libso = libso.lessExt().ext(EXT_SO); handle = ::dlopen(libso.c_str(), ldflags); + + if (POSIX::debug) + { + std::cout + << "dlOpen(const fileName&)" + << " : dlopen of " << libso << std::endl; + } } }