mirror of
https://gitlab.kitware.com/cmake/cmake.git
synced 2026-09-25 04:09:36 +03:00
KWSys 2026-08-07 (1c806117)
Code extracted from:
https://gitlab.kitware.com/utils/kwsys.git
at commit 1c8061173731a42a3c1d03abcf261891b493de28 (master).
Upstream Shortlog
-----------------
Matthew Woehlke (3):
d1a5a40e DynamicLoader: Homogenize platform checks
49197699 DynamicLoader: Fix use of `0` as null pointer
81ccb00a DynamicLoader: Add (and use) invalid library constant
This commit is contained in:
committed by
Brad King
parent
3d95494391
commit
8931545843
+16
-16
@@ -30,16 +30,16 @@
|
|||||||
// Each part of the ifdef contains a complete implementation for
|
// Each part of the ifdef contains a complete implementation for
|
||||||
// the static methods of DynamicLoader.
|
// the static methods of DynamicLoader.
|
||||||
|
|
||||||
#define CHECK_OPEN_FLAGS(var, supported, ret) \
|
#define CHECK_OPEN_FLAGS(var, supported) \
|
||||||
do { \
|
do { \
|
||||||
/* Check for unknown flags. */ \
|
/* Check for unknown flags. */ \
|
||||||
if ((var & AllOpenFlags) != var) { \
|
if ((var & AllOpenFlags) != var) { \
|
||||||
return ret; \
|
return InvalidLibrary; \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
/* Check for unsupported flags. */ \
|
/* Check for unsupported flags. */ \
|
||||||
if ((var & (supported)) != var) { \
|
if ((var & (supported)) != var) { \
|
||||||
return ret; \
|
return InvalidLibrary; \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
@@ -61,7 +61,7 @@ namespace KWSYS_NAMESPACE {
|
|||||||
DynamicLoader::LibraryHandle DynamicLoader::OpenLibrary(
|
DynamicLoader::LibraryHandle DynamicLoader::OpenLibrary(
|
||||||
std::string const& libname, int flags)
|
std::string const& libname, int flags)
|
||||||
{
|
{
|
||||||
return 0;
|
return InvalidLibrary;
|
||||||
}
|
}
|
||||||
|
|
||||||
int DynamicLoader::CloseLibrary(DynamicLoader::LibraryHandle lib)
|
int DynamicLoader::CloseLibrary(DynamicLoader::LibraryHandle lib)
|
||||||
@@ -76,7 +76,7 @@ int DynamicLoader::CloseLibrary(DynamicLoader::LibraryHandle lib)
|
|||||||
DynamicLoader::SymbolPointer DynamicLoader::GetSymbolAddress(
|
DynamicLoader::SymbolPointer DynamicLoader::GetSymbolAddress(
|
||||||
DynamicLoader::LibraryHandle lib, std::string const& sym)
|
DynamicLoader::LibraryHandle lib, std::string const& sym)
|
||||||
{
|
{
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
char const* DynamicLoader::LastError()
|
char const* DynamicLoader::LastError()
|
||||||
@@ -96,7 +96,7 @@ namespace KWSYS_NAMESPACE {
|
|||||||
DynamicLoader::LibraryHandle DynamicLoader::OpenLibrary(
|
DynamicLoader::LibraryHandle DynamicLoader::OpenLibrary(
|
||||||
std::string const& libname, int flags)
|
std::string const& libname, int flags)
|
||||||
{
|
{
|
||||||
CHECK_OPEN_FLAGS(flags, 0, 0);
|
CHECK_OPEN_FLAGS(flags, 0);
|
||||||
|
|
||||||
return shl_load(libname.c_str(), BIND_DEFERRED | DYNAMIC_PATH, 0L);
|
return shl_load(libname.c_str(), BIND_DEFERRED | DYNAMIC_PATH, 0L);
|
||||||
}
|
}
|
||||||
@@ -121,7 +121,7 @@ DynamicLoader::SymbolPointer DynamicLoader::GetSymbolAddress(
|
|||||||
* TYPE_UNDEFINED Look for any symbol.
|
* TYPE_UNDEFINED Look for any symbol.
|
||||||
*/
|
*/
|
||||||
status = shl_findsym(&lib, sym.c_str(), TYPE_UNDEFINED, &addr);
|
status = shl_findsym(&lib, sym.c_str(), TYPE_UNDEFINED, &addr);
|
||||||
void* result = (status < 0) ? (void*)0 : addr;
|
void* result = (status < 0) ? nullptr : addr;
|
||||||
|
|
||||||
// Hack to cast pointer-to-data to pointer-to-function.
|
// Hack to cast pointer-to-data to pointer-to-function.
|
||||||
return *reinterpret_cast<DynamicLoader::SymbolPointer*>(&result);
|
return *reinterpret_cast<DynamicLoader::SymbolPointer*>(&result);
|
||||||
@@ -161,7 +161,7 @@ namespace KWSYS_NAMESPACE {
|
|||||||
DynamicLoader::LibraryHandle DynamicLoader::OpenLibrary(
|
DynamicLoader::LibraryHandle DynamicLoader::OpenLibrary(
|
||||||
std::string const& libname, int flags)
|
std::string const& libname, int flags)
|
||||||
{
|
{
|
||||||
CHECK_OPEN_FLAGS(flags, 0, 0);
|
CHECK_OPEN_FLAGS(flags, 0);
|
||||||
|
|
||||||
NSObjectFileImageReturnCode rc;
|
NSObjectFileImageReturnCode rc;
|
||||||
NSObjectFileImage image = 0;
|
NSObjectFileImage image = 0;
|
||||||
@@ -169,7 +169,7 @@ DynamicLoader::LibraryHandle DynamicLoader::OpenLibrary(
|
|||||||
rc = NSCreateObjectFileImageFromFile(libname.c_str(), &image);
|
rc = NSCreateObjectFileImageFromFile(libname.c_str(), &image);
|
||||||
// rc == NSObjectFileImageInappropriateFile when trying to load a dylib file
|
// rc == NSObjectFileImageInappropriateFile when trying to load a dylib file
|
||||||
if (rc != NSObjectFileImageSuccess) {
|
if (rc != NSObjectFileImageSuccess) {
|
||||||
return 0;
|
return InvalidLibrary;
|
||||||
}
|
}
|
||||||
NSModule handle = NSLinkModule(image, libname.c_str(),
|
NSModule handle = NSLinkModule(image, libname.c_str(),
|
||||||
NSLINKMODULE_OPTION_BINDNOW |
|
NSLINKMODULE_OPTION_BINDNOW |
|
||||||
@@ -192,7 +192,7 @@ int DynamicLoader::CloseLibrary(DynamicLoader::LibraryHandle lib)
|
|||||||
DynamicLoader::SymbolPointer DynamicLoader::GetSymbolAddress(
|
DynamicLoader::SymbolPointer DynamicLoader::GetSymbolAddress(
|
||||||
DynamicLoader::LibraryHandle lib, std::string const& sym)
|
DynamicLoader::LibraryHandle lib, std::string const& sym)
|
||||||
{
|
{
|
||||||
void* result = 0;
|
void* result = nullptr;
|
||||||
// Need to prepend symbols with '_' on Apple-gcc compilers
|
// Need to prepend symbols with '_' on Apple-gcc compilers
|
||||||
std::string rsym = '_' + sym;
|
std::string rsym = '_' + sym;
|
||||||
|
|
||||||
@@ -207,7 +207,7 @@ DynamicLoader::SymbolPointer DynamicLoader::GetSymbolAddress(
|
|||||||
|
|
||||||
char const* DynamicLoader::LastError()
|
char const* DynamicLoader::LastError()
|
||||||
{
|
{
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace KWSYS_NAMESPACE
|
} // namespace KWSYS_NAMESPACE
|
||||||
@@ -223,7 +223,7 @@ namespace KWSYS_NAMESPACE {
|
|||||||
DynamicLoader::LibraryHandle DynamicLoader::OpenLibrary(
|
DynamicLoader::LibraryHandle DynamicLoader::OpenLibrary(
|
||||||
std::string const& libname, int flags)
|
std::string const& libname, int flags)
|
||||||
{
|
{
|
||||||
CHECK_OPEN_FLAGS(flags, SearchBesideLibrary, nullptr);
|
CHECK_OPEN_FLAGS(flags, SearchBesideLibrary);
|
||||||
|
|
||||||
DWORD llFlags = 0;
|
DWORD llFlags = 0;
|
||||||
if (flags & SearchBesideLibrary) {
|
if (flags & SearchBesideLibrary) {
|
||||||
@@ -310,14 +310,14 @@ static image_id last_dynamic_err = B_OK;
|
|||||||
DynamicLoader::LibraryHandle DynamicLoader::OpenLibrary(
|
DynamicLoader::LibraryHandle DynamicLoader::OpenLibrary(
|
||||||
std::string const& libname, int flags)
|
std::string const& libname, int flags)
|
||||||
{
|
{
|
||||||
CHECK_OPEN_FLAGS(flags, 0, 0);
|
CHECK_OPEN_FLAGS(flags, 0);
|
||||||
|
|
||||||
// image_id's are integers, errors are negative. Add one just in case we
|
// image_id's are integers, errors are negative. Add one just in case we
|
||||||
// get a valid image_id of zero (is that even possible?).
|
// get a valid image_id of zero (is that even possible?).
|
||||||
image_id rc = load_add_on(libname.c_str());
|
image_id rc = load_add_on(libname.c_str());
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
last_dynamic_err = rc;
|
last_dynamic_err = rc;
|
||||||
return 0;
|
return InvalidLibrary;
|
||||||
}
|
}
|
||||||
|
|
||||||
return rc + 1;
|
return rc + 1;
|
||||||
@@ -390,7 +390,7 @@ namespace KWSYS_NAMESPACE {
|
|||||||
DynamicLoader::LibraryHandle DynamicLoader::OpenLibrary(
|
DynamicLoader::LibraryHandle DynamicLoader::OpenLibrary(
|
||||||
std::string const& libname, int flags)
|
std::string const& libname, int flags)
|
||||||
{
|
{
|
||||||
CHECK_OPEN_FLAGS(flags, 0, nullptr);
|
CHECK_OPEN_FLAGS(flags, 0);
|
||||||
|
|
||||||
char* name = (char*)calloc(1, libname.size() + 1);
|
char* name = (char*)calloc(1, libname.size() + 1);
|
||||||
dld_init(program_invocation_name);
|
dld_init(program_invocation_name);
|
||||||
@@ -436,7 +436,7 @@ namespace KWSYS_NAMESPACE {
|
|||||||
DynamicLoader::LibraryHandle DynamicLoader::OpenLibrary(
|
DynamicLoader::LibraryHandle DynamicLoader::OpenLibrary(
|
||||||
std::string const& libname, int flags)
|
std::string const& libname, int flags)
|
||||||
{
|
{
|
||||||
CHECK_OPEN_FLAGS(flags, RTLDGlobal, nullptr);
|
CHECK_OPEN_FLAGS(flags, RTLDGlobal);
|
||||||
|
|
||||||
int llFlags = RTLD_LAZY;
|
int llFlags = RTLD_LAZY;
|
||||||
if (flags & RTLDGlobal) {
|
if (flags & RTLDGlobal) {
|
||||||
|
|||||||
@@ -49,18 +49,19 @@ public:
|
|||||||
// They are different on several different OS's
|
// They are different on several different OS's
|
||||||
#if defined(__hpux)
|
#if defined(__hpux)
|
||||||
typedef shl_t LibraryHandle;
|
typedef shl_t LibraryHandle;
|
||||||
|
static constexpr LibraryHandle InvalidLibrary = 0;
|
||||||
#elif defined(_WIN32) && !defined(__CYGWIN__)
|
#elif defined(_WIN32) && !defined(__CYGWIN__)
|
||||||
typedef HMODULE LibraryHandle;
|
typedef HMODULE LibraryHandle;
|
||||||
#elif defined(__APPLE__)
|
static constexpr LibraryHandle InvalidLibrary = nullptr;
|
||||||
# if MAC_OS_X_VERSION_MAX_ALLOWED < 1030
|
#elif defined(__APPLE__) && (MAC_OS_X_VERSION_MAX_ALLOWED < 1030)
|
||||||
typedef NSModule LibraryHandle;
|
typedef NSModule LibraryHandle;
|
||||||
# else
|
static constexpr LibraryHandle InvalidLibrary = 0;
|
||||||
typedef void* LibraryHandle;
|
|
||||||
# endif
|
|
||||||
#elif defined(__BEOS__)
|
#elif defined(__BEOS__)
|
||||||
typedef image_id LibraryHandle;
|
typedef image_id LibraryHandle;
|
||||||
|
static constexpr LibraryHandle InvalidLibrary = 0;
|
||||||
#else // POSIX
|
#else // POSIX
|
||||||
typedef void* LibraryHandle;
|
typedef void* LibraryHandle;
|
||||||
|
static constexpr LibraryHandle InvalidLibrary = nullptr;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Return type from DynamicLoader::GetSymbolAddress.
|
// Return type from DynamicLoader::GetSymbolAddress.
|
||||||
|
|||||||
Reference in New Issue
Block a user