fixed up dynld_module, actually loads and sets pointers correct now (tested against libpcap)

This commit is contained in:
Joakim L. Gilje
2021-11-30 20:34:07 +01:00
parent 4cd5cb76d9
commit 82f6f6f5e8

View File

@@ -347,14 +347,23 @@ void plat_language_code_r(uint32_t lcid, char* outbuf, int len) {
void* dynld_module(const char *name, dllimp_t *table)
{
auto lib = std::unique_ptr<QLibrary>(new QLibrary(name));
QString libraryName = name;
QFileInfo fi(libraryName);
QStringList removeSuffixes = {"dll", "dylib", "so"};
if (removeSuffixes.contains(fi.suffix())) {
libraryName = fi.completeBaseName();
}
auto lib = std::unique_ptr<QLibrary>(new QLibrary(libraryName));
if (lib->load()) {
for (auto imp = table; imp->name != nullptr; imp++)
{
if ((imp->func = reinterpret_cast<void*>(lib->resolve(imp->name))) != nullptr)
{
auto ptr = lib->resolve(imp->name);
if (ptr == nullptr) {
return nullptr;
}
auto imp_ptr = reinterpret_cast<void**>(imp->func);
*imp_ptr = reinterpret_cast<void*>(ptr);
}
} else {
return nullptr;