From 22d9e98422f9496e8de09022e36b274c41ff02f2 Mon Sep 17 00:00:00 2001 From: Alexandre Janniaux Date: Fri, 4 Jan 2013 16:02:21 +0100 Subject: [PATCH] Add posix DynLibImpl support. Former-commit-id: c80dcc31c0935916082d5f19a7cf2dbe15da7b2f --- src/Nazara/Core/Posix/DynLibImpl.cpp | 45 ++++++++++++++++++++++++++++ src/Nazara/Core/Posix/DynLibImpl.hpp | 31 +++++++++++++++++++ src/Nazara/Core/Posix/FileImpl.hpp | 5 ++++ src/Nazara/Core/Posix/MutexImpl.hpp | 2 +- 4 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 src/Nazara/Core/Posix/DynLibImpl.cpp create mode 100644 src/Nazara/Core/Posix/DynLibImpl.hpp diff --git a/src/Nazara/Core/Posix/DynLibImpl.cpp b/src/Nazara/Core/Posix/DynLibImpl.cpp new file mode 100644 index 000000000..6dc2182c8 --- /dev/null +++ b/src/Nazara/Core/Posix/DynLibImpl.cpp @@ -0,0 +1,45 @@ +// Copyright (C) 2012 Jérôme Leclercq +// This file is part of the "Nazara Engine - Core module" +// For conditions of distribution and use, see copyright notice in Config.hpp + +#include +#include +#include +#include +#include + +NzDynLibImpl::NzDynLibImpl(NzDynLib* parent) : +m_parent(parent) +{ +} + +NzDynLibFunc NzDynLibImpl::GetSymbol(const NzString& symbol) const +{ + NzDynLibFunc sym = reinterpret_cast(dlsym(m_handle, symbol.GetConstBuffer())); + if (!sym) + m_parent->SetLastError(NzGetLastSystemError()); // dlerror() ? + + return sym; +} + +bool NzDynLibImpl::Load(const NzString& libraryPath) +{ + NzString path = libraryPath; + if (!path.EndsWith(".so")) + path += ".so"; + + m_handle = dlopen(path.GetConstBuffer(),); + + if (m_handle) + return true; + else + { + m_parent->SetLastError(NzGetLastSystemError()); + return false; + } +} + +void NzDynLibImpl::Unload() +{ + dlclose(m_handle); +} diff --git a/src/Nazara/Core/Posix/DynLibImpl.hpp b/src/Nazara/Core/Posix/DynLibImpl.hpp new file mode 100644 index 000000000..8b2831ccf --- /dev/null +++ b/src/Nazara/Core/Posix/DynLibImpl.hpp @@ -0,0 +1,31 @@ +// Copyright (C) 2012 Jérôme Leclercq +// This file is part of the "Nazara Engine - Core module" +// For conditions of distribution and use, see copyright notice in Config.hpp + +#pragma once + +#ifndef NAZARA_DYNLIBIMPL_HPP +#define NAZARA_DYNLIBIMPL_HPP + +#include +#include +#include + +class NzString; + +class NzDynLibImpl : NzNonCopyable +{ + public: + NzDynLibImpl(NzDynLib* m_parent); + ~NzDynLibImpl() = default; + + NzDynLibFunc GetSymbol(const NzString& symbol) const; + bool Load(const NzString& libraryPath); + void Unload(); + + private: + void* m_handle; + NzDynLib* m_parent; +}; + +#endif // NAZARA_DYNLIBIMPL_HPP diff --git a/src/Nazara/Core/Posix/FileImpl.hpp b/src/Nazara/Core/Posix/FileImpl.hpp index d6ed7d378..7d2171cef 100644 --- a/src/Nazara/Core/Posix/FileImpl.hpp +++ b/src/Nazara/Core/Posix/FileImpl.hpp @@ -18,6 +18,11 @@ #include #include +/* + 04/01/2012 : alexandre.janniaux@gmail.com + Add posix file implementation. +*/ + class NzFile; class NzString; diff --git a/src/Nazara/Core/Posix/MutexImpl.hpp b/src/Nazara/Core/Posix/MutexImpl.hpp index a3cdad284..33c4c65e4 100644 --- a/src/Nazara/Core/Posix/MutexImpl.hpp +++ b/src/Nazara/Core/Posix/MutexImpl.hpp @@ -4,7 +4,7 @@ /* 04/01/2012 : alexandre.janniaux@gmail.com - Add pthread mutex implementation + Add pthread mutex implementation. */ #pragma once