mirror of
https://github.com/alliedmodders/metamod-source.git
synced 2025-12-06 18:08:31 +00:00
72 lines
1.9 KiB
C++
72 lines
1.9 KiB
C++
#include <iostream>
|
|
#include <string>
|
|
#include "loader.h"
|
|
#include "utility.h"
|
|
|
|
#if defined _WIN32
|
|
#define SERVER_LIB_NAME "server.dll"
|
|
#define ENGINE_LIB_NAME "engine.dll"
|
|
#elif defined __linux__
|
|
#define SERVER_LIB_NAME "server" LIB_SUFFIX
|
|
#define ENGINE_LIB_NAME "engine" LIB_SUFFIX
|
|
#endif
|
|
|
|
bool DetermineBackendS1(char *gameDir, int expectedBackend)
|
|
{
|
|
char errorBuffer[128];
|
|
void *serverLib = nullptr;
|
|
void *engineLib = nullptr;
|
|
QueryValveInterface serverQvi;
|
|
QueryValveInterface engineQvi;
|
|
|
|
std::cout << "Checking mm_DetermineBackendS1 with game directory " << gameDir << std::endl;
|
|
|
|
// load the game code
|
|
serverLib = mm_LoadLibrary(SERVER_LIB_NAME, errorBuffer, 128);
|
|
|
|
if (serverLib == nullptr)
|
|
{
|
|
std::cout << "Error: mm_LoadLibrary server library " << SERVER_LIB_NAME << " " << errorBuffer << std::endl;
|
|
return false;
|
|
}
|
|
|
|
serverQvi = (QueryValveInterface)mm_GetLibAddress(serverLib, "CreateInterface");
|
|
|
|
if (serverQvi == nullptr)
|
|
{
|
|
std::cout << "Error: Failed to find CreateInterface in server" << std::endl;
|
|
return false;
|
|
}
|
|
|
|
// load the engine code
|
|
engineLib = mm_LoadLibrary(ENGINE_LIB_NAME, errorBuffer, 128);
|
|
|
|
if (engineLib == nullptr)
|
|
{
|
|
std::cout << "Error: mm_LoadLibrary engine library " << ENGINE_LIB_NAME << " " << errorBuffer << std::endl;
|
|
return false;
|
|
}
|
|
|
|
engineQvi = (QueryValveInterface)mm_GetLibAddress(engineLib, "CreateInterface");
|
|
|
|
if (engineQvi == nullptr)
|
|
{
|
|
std::cout << "Error: Failed to find CreateInterface in engine" << std::endl;
|
|
return false;
|
|
}
|
|
|
|
MetamodBackend actualBackend = mm_DetermineBackendS1(engineQvi, serverQvi, gameDir);
|
|
|
|
mm_UnloadLibrary(engineLib);
|
|
mm_UnloadLibrary(serverLib);
|
|
|
|
if (actualBackend != expectedBackend)
|
|
{
|
|
std::cout << "Got MetamodBackend " << actualBackend << " instead of expected " << expectedBackend << std::endl;
|
|
return false;
|
|
}
|
|
|
|
std::cout << "Got MetamodBackend " << expectedBackend << " as expected " << std::endl;
|
|
return true;
|
|
}
|