diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2016-05-17 18:03:08 +0200 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2016-05-17 18:06:13 +0200 |
commit | 7cfa147736b37c2c098e684d40b906496be6b673 (patch) | |
tree | d1655a7ba36ce3a4482bb7abc325fa295e4eb571 | |
parent | 7a014a9494bcc52a8df53e333d51650d7dfcad0f (diff) |
api/plugins: use QLibrary. remove the dlopen(3) code path
Given the symbol visibility rules as verified with nm(1), QLibrary is
sufficient. We don't need the RTLD_DEEPBIND "load hint" for Linux either
as per the same visibility rules.
This is untested on Apple but should be soon.
-rw-r--r-- | opentrack/plugin-support.hpp | 59 |
1 files changed, 0 insertions, 59 deletions
diff --git a/opentrack/plugin-support.hpp b/opentrack/plugin-support.hpp index fbea787b..b5dd03fe 100644 --- a/opentrack/plugin-support.hpp +++ b/opentrack/plugin-support.hpp @@ -28,10 +28,6 @@ #include <QList> #include <QStringList> -#ifndef _WIN32 -# include <dlfcn.h> -#endif - #if defined(__APPLE__) # define OPENTRACK_SONAME "dylib" #elif defined(_WIN32) @@ -67,7 +63,6 @@ struct dylib { if (filename.size() == 0) return; -#if defined(_WIN32) QString fullPath = QCoreApplication::applicationDirPath() + "/" + this->filename; handle = new QLibrary(fullPath); @@ -98,51 +93,6 @@ struct dylib { Meta = (OPENTRACK_METADATA_FUNPTR) handle->resolve("GetMetadata"); if (_foo::die(handle, !Meta)) return; -#else - QByteArray latin1 = QFile::encodeName(filename); - handle = dlopen(latin1.constData(), -# if defined(__APPLE__) - RTLD_LOCAL|RTLD_FIRST|RTLD_NOW -# else - RTLD_LOCAL|RTLD_NOW // XXX RTLD_DEEPBIND on Linux? -# endif - ); - - struct _foo { - static bool err(void*& handle) - { - const char* err = dlerror(); - if (err) - { - fprintf(stderr, "Error, ignoring: %s\n", err); - fflush(stderr); - if (handle) - dlclose(handle); - handle = nullptr; - return true; - } - return false; - } - }; - - if (handle) - { - if (_foo::err(handle)) - return; - Dialog = (OPENTRACK_CTOR_FUNPTR) dlsym(handle, "GetDialog"); - if (_foo::err(handle)) - return; - Constructor = (OPENTRACK_CTOR_FUNPTR) dlsym(handle, "GetConstructor"); - if (_foo::err(handle)) - return; - Meta = (OPENTRACK_METADATA_FUNPTR) dlsym(handle, "GetMetadata"); - if (_foo::err(handle)) - return; - } else { - (void) _foo::err(handle); - return; - } -#endif auto m = mem<Metadata>(Meta()); @@ -151,13 +101,8 @@ struct dylib { } ~dylib() { -#if defined(_WIN32) if (handle) delete handle; -#else - if (handle) - (void) dlclose(handle); -#endif } static QList<mem<dylib>> enum_libraries() @@ -213,11 +158,7 @@ struct dylib { OPENTRACK_CTOR_FUNPTR Constructor; OPENTRACK_METADATA_FUNPTR Meta; private: -#if defined(_WIN32) QLibrary* handle; -#else - void* handle; -#endif static bool get_metadata(mem<dylib> lib, QString& name, QIcon& icon) { |