diff --git a/core/LibrarySys.cpp b/core/LibrarySys.cpp index 0f4868043b..6c568f9037 100644 --- a/core/LibrarySys.cpp +++ b/core/LibrarySys.cpp @@ -1,5 +1,5 @@ /** - * vim: set ts=4 : + * vim: set ts=4 sw=4 tw=99 noet : * ============================================================================= * SourceMod * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. @@ -39,22 +39,9 @@ LibrarySystem g_LibSys; -CLibrary::~CLibrary() +CLibrary::CLibrary(ke::Ref lib) + : lib_(lib) { - if (m_lib) - { -#if defined PLATFORM_WINDOWS - FreeLibrary(m_lib); -#elif defined PLATFORM_POSIX - dlclose(m_lib); -#endif - m_lib = NULL; - } -} - -CLibrary::CLibrary(LibraryHandle me) -{ - m_lib = me; } void CLibrary::CloseLibrary() @@ -64,11 +51,7 @@ void CLibrary::CloseLibrary() void *CLibrary::GetSymbolAddress(const char *symname) { -#if defined PLATFORM_WINDOWS - return GetProcAddress(m_lib, symname); -#elif defined PLATFORM_POSIX - return dlsym(m_lib, symname); -#endif + return lib_->lookup(symname); } @@ -307,18 +290,6 @@ void LibrarySystem::GetPlatformErrorEx(int code, char *error, size_t maxlength) } } -void LibrarySystem::GetLoaderError(char *buffer, size_t maxlength) -{ -#if defined PLATFORM_WINDOWS - GetPlatformError(buffer, maxlength); -#elif defined PLATFORM_POSIX - if (buffer != NULL && maxlength) - { - strncopy(buffer, dlerror(), maxlength); - } -#endif -} - void LibrarySystem::CloseDirectory(IDirectory *dir) { delete dir; @@ -326,19 +297,9 @@ void LibrarySystem::CloseDirectory(IDirectory *dir) ILibrary *LibrarySystem::OpenLibrary(const char *path, char *error, size_t maxlength) { - LibraryHandle lib; -#if defined PLATFORM_WINDOWS - lib = LoadLibraryA(path); -#elif defined PLATFORM_POSIX - lib = dlopen(path, RTLD_NOW); -#endif - - if (lib == NULL) - { - GetLoaderError(error, maxlength); - return NULL; - } - + ke::Ref lib = ke::SharedLib::Open(path, error, maxlength); + if (!lib) + return nullptr; return new CLibrary(lib); } diff --git a/core/LibrarySys.h b/core/LibrarySys.h index 3eebd1c79b..bdb487746e 100644 --- a/core/LibrarySys.h +++ b/core/LibrarySys.h @@ -1,5 +1,5 @@ /** - * vim: set ts=4 : + * vim: set ts=4 sw=4 tw=99 noet : * ============================================================================= * SourceMod * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. @@ -33,16 +33,11 @@ #define _INCLUDE_SOURCEMOD_SYSTEM_LIBRARY_H_ #include +#include #include "sm_platform.h" using namespace SourceMod; -#if defined PLATFORM_WINDOWS -typedef HMODULE LibraryHandle; -#elif defined PLATFORM_POSIX -typedef void * LibraryHandle; -#endif - class CDirectory : public IDirectory { public: @@ -71,13 +66,12 @@ class CDirectory : public IDirectory class CLibrary : public ILibrary { public: - CLibrary(LibraryHandle me); - ~CLibrary(); + CLibrary(ke::Ref lib); public: - void CloseLibrary(); - void *GetSymbolAddress(const char *symname); + void CloseLibrary() override; + void *GetSymbolAddress(const char *symname) override; private: - LibraryHandle m_lib; + ke::Ref lib_; }; class LibrarySystem : public ILibrarySys @@ -96,7 +90,6 @@ class LibrarySystem : public ILibrarySys bool CreateFolder(const char *path); size_t GetFileFromPath(char *buffer, size_t maxlength, const char *path); bool FileTime(const char *path, FileTimeType type, time_t *pTime); - void GetLoaderError(char *buffer, size_t maxlength); }; extern LibrarySystem g_LibSys;