From 64eeebb967e74507b8edb2270b73b1a57295f2f3 Mon Sep 17 00:00:00 2001 From: couriersud Date: Sat, 23 Apr 2016 14:20:48 +0200 Subject: [PATCH] Add missing files. --- src/lib/netlist/plib/pdynlib.cpp | 91 ++++++++++++++++++++++++++++++++ src/lib/netlist/plib/pdynlib.h | 41 ++++++++++++++ 2 files changed, 132 insertions(+) create mode 100644 src/lib/netlist/plib/pdynlib.cpp create mode 100644 src/lib/netlist/plib/pdynlib.h diff --git a/src/lib/netlist/plib/pdynlib.cpp b/src/lib/netlist/plib/pdynlib.cpp new file mode 100644 index 00000000000..71b0dc2bfcc --- /dev/null +++ b/src/lib/netlist/plib/pdynlib.cpp @@ -0,0 +1,91 @@ +// license:GPL-2.0+ +// copyright-holders:Couriersud +/* + * pdynlib.c + * + */ + +#include "pdynlib.h" +#ifdef _WIN32 +#include "windows.h" +#else +#include +#endif + +pdynlib::pdynlib(const pstring libname) +: m_isLoaded(false), m_lib(nullptr) +{ +#ifdef _WIN32 + //fprintf(stderr, "win: loading <%s>\n", libname.cstr()); + if (libname != "") + m_lib = LoadLibrary(libname.cstr()); + else + m_lib = GetModuleHandle(nullptr); + if (m_lib != nullptr) + m_isLoaded = true; + //else + // fprintf(stderr, "win: library <%s> not found!\n", libname.cstr()); +#else + //printf("loading <%s>\n", libname.cstr()); + if (libname != "") + m_lib = dlopen(libname.cstr(), RTLD_LAZY); + else + m_lib = dlopen(nullptr, RTLD_LAZY); + if (m_lib != nullptr) + m_isLoaded = true; + //else + // printf("library <%s> not found!\n", libname.cstr()); +#endif + } + +pdynlib::pdynlib(const pstring path, const pstring libname) +: m_isLoaded(false), m_lib(nullptr) +{ + printf("win: loading <%s>\n", libname.cstr()); +#ifdef _WIN32 + if (libname != "") + m_lib = LoadLibrary(libname.cstr()); + else + m_lib = GetModuleHandle(nullptr); + if (m_lib != nullptr) + m_isLoaded = true; + else + printf("win: library <%s> not found!\n", libname.cstr()); +#else + printf("loading <%s>\n", libname.cstr()); + if (libname != "") + m_lib = dlopen(libname.cstr(), RTLD_LAZY); + else + m_lib = dlopen(nullptr, RTLD_LAZY); + if (m_lib != nullptr) + m_isLoaded = true; + else + printf("library <%s> not found!\n", libname.cstr()); +#endif +} + +pdynlib::~pdynlib() +{ + if (m_lib != nullptr) + { +#ifdef _WIN32 +#else + dlclose(m_lib); +#endif + } +} + +bool pdynlib::isLoaded() const +{ + return m_isLoaded; +} + +void *pdynlib::getsym_p(const pstring name) +{ +#ifdef _WIN32 + return (void *) GetProcAddress((HMODULE) m_lib, name.cstr()); +#else + return dlsym(m_lib, name.cstr()); +#endif +} + diff --git a/src/lib/netlist/plib/pdynlib.h b/src/lib/netlist/plib/pdynlib.h new file mode 100644 index 00000000000..ef545315aaa --- /dev/null +++ b/src/lib/netlist/plib/pdynlib.h @@ -0,0 +1,41 @@ +// license:GPL-2.0+ +// copyright-holders:Couriersud +/* + * pstring.h + */ + +#ifndef _PDYNLIB_H_ +#define _PDYNLIB_H_ + +#include +#include + +#include "pconfig.h" +#include "pstring.h" + +// ---------------------------------------------------------------------------------------- +// pdynlib: dynamic loading of libraries ... +// ---------------------------------------------------------------------------------------- + +class pdynlib +{ +public: + pdynlib(const pstring libname); + pdynlib(const pstring path, const pstring libname); + ~pdynlib(); + + bool isLoaded() const; + + template + T *getsym(const pstring name) + { + return reinterpret_cast(getsym_p(name)); + } +private: + void *getsym_p(const pstring name); + + bool m_isLoaded; + void *m_lib; +}; + +#endif /* _PSTRING_H_ */