Replace internal ILibrary use with ke::SharedLib.

This commit is contained in:
David Anderson 2015-08-27 14:09:42 -04:00
parent 5ecd906905
commit ec01ca72a0
3 changed files with 25 additions and 28 deletions

View File

@ -38,7 +38,7 @@
#include <IGameConfigs.h> #include <IGameConfigs.h>
#include <compat_wrappers.h> #include <compat_wrappers.h>
#include <Logger.h> #include <Logger.h>
#include "LibrarySys.h" #include <amtl/os/am-shared-library.h>
#include "logic_bridge.h" #include "logic_bridge.h"
#include <tier0/mem.h> #include <tier0/mem.h>
@ -239,32 +239,30 @@ void CHalfLife2::InitCommandLine()
#if SOURCE_ENGINE != SE_DARKMESSIAH #if SOURCE_ENGINE != SE_DARKMESSIAH
if (!is_original_engine) if (!is_original_engine)
{ {
ke::AutoPtr<ILibrary> lib(g_LibSys.OpenLibrary(TIER0_NAME, error, sizeof(error))); ke::Ref<ke::SharedLib> lib = ke::SharedLib::Open(TIER0_NAME, error, sizeof(error));
if (lib == NULL) if (!lib) {
{
logger->LogError("Could not load %s: %s", TIER0_NAME, error); logger->LogError("Could not load %s: %s", TIER0_NAME, error);
return; return;
} }
m_pGetCommandLine = lib->GetSymbolAddress("CommandLine_Tier0"); m_pGetCommandLine = lib->get<decltype(m_pGetCommandLine)>("CommandLine_Tier0");
/* '_Tier0' dropped on Alien Swarm version */ /* '_Tier0' dropped on Alien Swarm version */
if (m_pGetCommandLine == NULL) if (m_pGetCommandLine == NULL)
{ {
m_pGetCommandLine = lib->GetSymbolAddress("CommandLine"); m_pGetCommandLine = lib->get<decltype(m_pGetCommandLine)>("CommandLine");
} }
} }
else else
#endif #endif
{ {
ke::AutoPtr<ILibrary> lib(g_LibSys.OpenLibrary(VSTDLIB_NAME, error, sizeof(error))); ke::Ref<ke::SharedLib> lib = ke::SharedLib::Open(VSTDLIB_NAME, error, sizeof(error));
if (lib == NULL) if (!lib) {
{
logger->LogError("Could not load %s: %s", VSTDLIB_NAME, error); logger->LogError("Could not load %s: %s", VSTDLIB_NAME, error);
return; return;
} }
m_pGetCommandLine = lib->GetSymbolAddress("CommandLine"); m_pGetCommandLine = lib->get<decltype(m_pGetCommandLine)>("CommandLine");
} }
if (m_pGetCommandLine == NULL) if (m_pGetCommandLine == NULL)

View File

@ -58,6 +58,7 @@
#else #else
#include "convar_sm.h" #include "convar_sm.h"
#endif #endif
#include <amtl/os/am-shared-library.h>
#if defined _WIN32 #if defined _WIN32
#define MATCHMAKINGDS_SUFFIX "" #define MATCHMAKINGDS_SUFFIX ""
@ -74,7 +75,7 @@
#define MATCHMAKINGDS_EXT "so" #define MATCHMAKINGDS_EXT "so"
#endif #endif
static ILibrary *g_pLogic = NULL; static ke::Ref<ke::SharedLib> g_Logic;
static LogicInitFunction logic_init_fn; static LogicInitFunction logic_init_fn;
IThreader *g_pThreader; IThreader *g_pThreader;
@ -650,15 +651,14 @@ void InitLogicBridge()
core_bridge.serverFactory = (void *)g_SMAPI->GetServerFactory(false); core_bridge.serverFactory = (void *)g_SMAPI->GetServerFactory(false);
core_bridge.listeners = SMGlobalClass::head; core_bridge.listeners = SMGlobalClass::head;
ILibrary *mmlib;
char path[PLATFORM_MAX_PATH]; char path[PLATFORM_MAX_PATH];
g_LibSys.PathFormat(path, sizeof(path), "%s/bin/matchmaking_ds%s.%s", g_SMAPI->GetBaseDir(), MATCHMAKINGDS_SUFFIX, MATCHMAKINGDS_EXT); g_LibSys.PathFormat(path, sizeof(path), "%s/bin/matchmaking_ds%s.%s", g_SMAPI->GetBaseDir(), MATCHMAKINGDS_SUFFIX, MATCHMAKINGDS_EXT);
if ((mmlib = g_LibSys.OpenLibrary(path, NULL, 0))) if (ke::Ref<ke::SharedLib> mmlib = ke::SharedLib::Open(path, NULL, 0))
{ {
core_bridge.matchmakingDSFactory = mmlib->GetSymbolAddress("CreateInterface"); core_bridge.matchmakingDSFactory =
mmlib->CloseLibrary(); mmlib->get<decltype(core_bridge.matchmakingDSFactory)>("CreateInterface");
} }
logic_init_fn(&core_bridge, &logicore); logic_init_fn(&core_bridge, &logicore);
@ -695,9 +695,8 @@ bool StartLogicBridge(char *error, size_t maxlength)
g_SourceMod.GetSourceModPath()); g_SourceMod.GetSourceModPath());
char myerror[255]; char myerror[255];
g_pLogic = g_LibSys.OpenLibrary(file, myerror, sizeof(myerror)); g_Logic = ke::SharedLib::Open(file, myerror, sizeof(myerror));
if (!g_Logic)
if (!g_pLogic)
{ {
if (error && maxlength) if (error && maxlength)
{ {
@ -706,10 +705,10 @@ bool StartLogicBridge(char *error, size_t maxlength)
return false; return false;
} }
LogicLoadFunction llf = (LogicLoadFunction)g_pLogic->GetSymbolAddress("logic_load"); LogicLoadFunction llf = g_Logic->get<decltype(llf)>("logic_load");
if (llf == NULL) if (llf == NULL)
{ {
g_pLogic->CloseLibrary(); g_Logic = nullptr;
if (error && maxlength) if (error && maxlength)
{ {
UTIL_Format(error, maxlength, "could not find logic_load function"); UTIL_Format(error, maxlength, "could not find logic_load function");
@ -717,7 +716,7 @@ bool StartLogicBridge(char *error, size_t maxlength)
return false; return false;
} }
GetITextParsers getitxt = (GetITextParsers)g_pLogic->GetSymbolAddress("get_textparsers"); GetITextParsers getitxt = g_Logic->get<decltype(getitxt)>("get_textparsers");
textparsers = getitxt(); textparsers = getitxt();
logic_init_fn = llf(SM_LOGIC_MAGIC); logic_init_fn = llf(SM_LOGIC_MAGIC);
@ -727,6 +726,6 @@ bool StartLogicBridge(char *error, size_t maxlength)
void ShutdownLogicBridge() void ShutdownLogicBridge()
{ {
g_pLogic->CloseLibrary(); g_Logic = nullptr;
} }

View File

@ -42,6 +42,7 @@
#include <IGameConfigs.h> #include <IGameConfigs.h>
#include "frame_hooks.h" #include "frame_hooks.h"
#include "logic_bridge.h" #include "logic_bridge.h"
#include <amtl/os/am-shared-library.h>
SH_DECL_HOOK6(IServerGameDLL, LevelInit, SH_NOATTRIB, false, bool, const char *, const char *, const char *, const char *, bool, bool); SH_DECL_HOOK6(IServerGameDLL, LevelInit, SH_NOATTRIB, false, bool, const char *, const char *, const char *, const char *, bool, bool);
SH_DECL_HOOK0_void(IServerGameDLL, LevelShutdown, SH_NOATTRIB, false); SH_DECL_HOOK0_void(IServerGameDLL, LevelShutdown, SH_NOATTRIB, false);
@ -50,7 +51,7 @@ SH_DECL_HOOK1_void(IVEngineServer, ServerCommand, SH_NOATTRIB, false, const char
SourceModBase g_SourceMod; SourceModBase g_SourceMod;
ILibrary *g_pJIT = NULL; ke::Ref<ke::SharedLib> g_JIT;
SourceHook::String g_BaseDir; SourceHook::String g_BaseDir;
ISourcePawnEngine *g_pSourcePawn = NULL; ISourcePawnEngine *g_pSourcePawn = NULL;
ISourcePawnEngine2 *g_pSourcePawn2 = NULL; ISourcePawnEngine2 *g_pSourcePawn2 = NULL;
@ -79,8 +80,7 @@ void ShutdownJIT()
g_pSourcePawn = NULL; g_pSourcePawn = NULL;
} }
g_pJIT->CloseLibrary(); g_JIT = nullptr;
g_pJIT = NULL;
} }
SourceModBase::SourceModBase() SourceModBase::SourceModBase()
@ -183,8 +183,8 @@ bool SourceModBase::InitializeSourceMod(char *error, size_t maxlength, bool late
PLATFORM_LIB_EXT PLATFORM_LIB_EXT
); );
g_pJIT = g_LibSys.OpenLibrary(file, myerror, sizeof(myerror)); g_JIT = ke::SharedLib::Open(file, myerror, sizeof(myerror));
if (!g_pJIT) if (!g_JIT)
{ {
if (error && maxlength) if (error && maxlength)
{ {
@ -196,7 +196,7 @@ bool SourceModBase::InitializeSourceMod(char *error, size_t maxlength, bool late
} }
GetSourcePawnFactoryFn factoryFn = GetSourcePawnFactoryFn factoryFn =
(GetSourcePawnFactoryFn)g_pJIT->GetSymbolAddress("GetSourcePawnFactory"); g_JIT->get<decltype(factoryFn)>("GetSourcePawnFactory");
if (!factoryFn) { if (!factoryFn) {
if (error && maxlength) if (error && maxlength)