DynLib: Posix fixes
This commit is contained in:
parent
364122f582
commit
8ace61ce7d
|
|
@ -10,12 +10,18 @@
|
||||||
|
|
||||||
namespace Nz
|
namespace Nz
|
||||||
{
|
{
|
||||||
DynLibImpl::DynLibImpl(DynLib* parent)
|
DynLibImpl::DynLibImpl(DynLib*) :
|
||||||
|
m_handle(nullptr)
|
||||||
{
|
{
|
||||||
NazaraUnused(parent);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DynLibFunc DynLibImpl::GetSymbol(const String& symbol, String* errorMessage) const
|
DynLibImpl::~DynLibImpl()
|
||||||
|
{
|
||||||
|
if (m_handle)
|
||||||
|
dlclose(m_handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
DynLibFunc DynLibImpl::GetSymbol(const char* symbol, std::string* errorMessage) const
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
Il n'est pas standard de cast un pointeur d'objet vers un pointeur de fonction.
|
Il n'est pas standard de cast un pointeur d'objet vers un pointeur de fonction.
|
||||||
|
|
@ -31,19 +37,17 @@ namespace Nz
|
||||||
|
|
||||||
dlerror(); // Clear error flag
|
dlerror(); // Clear error flag
|
||||||
|
|
||||||
converter.pointer = dlsym(m_handle, symbol.GetConstBuffer());
|
converter.pointer = dlsym(m_handle, symbol);
|
||||||
if (!converter.pointer)
|
if (!converter.pointer)
|
||||||
*errorMessage = dlerror();
|
*errorMessage = dlerror();
|
||||||
|
|
||||||
return converter.func;
|
return converter.func;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DynLibImpl::Load(const String& libraryPath, String* errorMessage)
|
bool DynLibImpl::Load(const std::filesystem::path& libraryPath, std::string* errorMessage)
|
||||||
{
|
{
|
||||||
String path = libraryPath;
|
std::filesystem::path path = libraryPath;
|
||||||
|
if (path.extension() != ".so")
|
||||||
size_t pos = path.FindLast(".so");
|
|
||||||
if (pos == String::npos || (path.GetLength() > pos+3 && path[pos+3] != '.'))
|
|
||||||
path += ".so";
|
path += ".so";
|
||||||
|
|
||||||
dlerror(); // Clear error flag
|
dlerror(); // Clear error flag
|
||||||
|
|
@ -57,9 +61,4 @@ namespace Nz
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DynLibImpl::Unload()
|
|
||||||
{
|
|
||||||
dlclose(m_handle);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,8 @@
|
||||||
#define NAZARA_DYNLIBIMPL_HPP
|
#define NAZARA_DYNLIBIMPL_HPP
|
||||||
|
|
||||||
#include <Nazara/Core/DynLib.hpp>
|
#include <Nazara/Core/DynLib.hpp>
|
||||||
|
#include <filesystem>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
namespace Nz
|
namespace Nz
|
||||||
{
|
{
|
||||||
|
|
@ -19,9 +21,8 @@ namespace Nz
|
||||||
DynLibImpl(DynLib* m_parent);
|
DynLibImpl(DynLib* m_parent);
|
||||||
~DynLibImpl() = default;
|
~DynLibImpl() = default;
|
||||||
|
|
||||||
DynLibFunc GetSymbol(const String& symbol, String* errorMessage) const;
|
DynLibFunc GetSymbol(const char* symbol, std::string* errorMessage) const;
|
||||||
bool Load(const String& libraryPath, String* errorMessage);
|
bool Load(const std::filesystem::path& libraryPath, std::string* errorMessage);
|
||||||
void Unload();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void* m_handle;
|
void* m_handle;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue