mirror of
https://github.com/matrix-construct/construct
synced 2024-11-29 02:02:38 +01:00
ircd::mods::ldso: Add loaded check using the dlfcn method.
This commit is contained in:
parent
dc1778bce7
commit
a4f18fcd00
2 changed files with 38 additions and 1 deletions
|
@ -54,4 +54,7 @@ namespace ircd::mods::ldso
|
|||
// Query link
|
||||
string_view string(const struct link_map &, const size_t &idx);
|
||||
bool for_each_needed(const struct link_map &, const string_closure &);
|
||||
|
||||
// dlfcn suite
|
||||
bool loaded(const string_view &name);
|
||||
}
|
||||
|
|
|
@ -18,7 +18,41 @@
|
|||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// mods/ldso.h
|
||||
// dlfcn suite
|
||||
//
|
||||
#if defined(HAVE_DLFCN_H)
|
||||
|
||||
bool
|
||||
ircd::mods::ldso::loaded(const string_view &name_)
|
||||
try
|
||||
{
|
||||
static const int flags
|
||||
{
|
||||
RTLD_NOLOAD | RTLD_LAZY
|
||||
};
|
||||
|
||||
const char *const name
|
||||
{
|
||||
data(strlcpy(fs::name_scratch, name_))
|
||||
};
|
||||
|
||||
const custom_ptr<void> ptr
|
||||
{
|
||||
::dlopen(name, flags), ::dlclose
|
||||
};
|
||||
|
||||
return ptr.get() != nullptr;
|
||||
}
|
||||
catch(...)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif // HAVE_DLFCN_H
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// link_map suite
|
||||
//
|
||||
#if defined(HAVE_LINK_H)
|
||||
|
||||
|
|
Loading…
Reference in a new issue