Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/core/StarDynamicLib_unix.cpp
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2023-06-20 14:33:09 +1000
committerKae <80987908+Novaenia@users.noreply.github.com>2023-06-20 14:33:09 +1000
commit6352e8e3196f78388b6c771073f9e03eaa612673 (patch)
treee23772f79a7fbc41bc9108951e9e136857484bf4 /source/core/StarDynamicLib_unix.cpp
parent6741a057e5639280d85d0f88ba26f000baa58f61 (diff)
everything everywhere
all at once
Diffstat (limited to 'source/core/StarDynamicLib_unix.cpp')
-rw-r--r--source/core/StarDynamicLib_unix.cpp46
1 files changed, 46 insertions, 0 deletions
diff --git a/source/core/StarDynamicLib_unix.cpp b/source/core/StarDynamicLib_unix.cpp
new file mode 100644
index 0000000..dd81d1f
--- /dev/null
+++ b/source/core/StarDynamicLib_unix.cpp
@@ -0,0 +1,46 @@
+#include "StarDynamicLib.hpp"
+
+#include <dlfcn.h>
+#include <pthread.h>
+#include <sys/time.h>
+#include <errno.h>
+
+namespace Star {
+
+struct PrivateDynLib : public DynamicLib {
+ PrivateDynLib(void* handle)
+ : m_handle(handle) {}
+
+ ~PrivateDynLib() {
+ dlclose(m_handle);
+ }
+
+ void* funcPtr(const char* name) {
+ return dlsym(m_handle, name);
+ }
+
+ void* m_handle;
+};
+
+String DynamicLib::libraryExtension() {
+#ifdef STAR_SYSTEM_MACOS
+ return ".dylib";
+#else
+ return ".so";
+#endif
+}
+
+DynamicLibUPtr DynamicLib::loadLibrary(String const& libraryName) {
+ void* handle = dlopen(libraryName.utf8Ptr(), RTLD_NOW);
+ if (handle == NULL)
+ return {};
+ return make_unique<PrivateDynLib>(handle);
+}
+
+DynamicLibUPtr DynamicLib::currentExecutable() {
+ void* handle = dlopen(NULL, 0);
+ starAssert(handle);
+ return make_unique<PrivateDynLib>(handle);
+}
+
+}