/* <26abf> ../engine/filesystem_internal.cpp:320 */ void *FS_LoadLibrary(const char *dllName) { void *result = NULL; if (dllName) { FS_GetLocalCopy(dllName); #ifdef _WIN32 result = LoadLibraryA(dllName); #else result = dlopen(dllName, 2); #endif } return result; }
SystemWrapper::library_t *SystemWrapper::GetLibrary(char *name) { char fixedname[MAX_PATH]; Q_strlcpy(fixedname, name); COM_FixSlashes(fixedname); library_t *lib = (library_t *)m_Libraries.GetFirst(); while (lib) { if (Q_stricmp(lib->name, name) == 0) { return lib; } lib = (library_t *)m_Libraries.GetNext(); } lib = (library_t *)Mem_Malloc(sizeof(library_t)); if (!lib) { DPrintf("ERROR! System::GetLibrary: out of memory (%s).\n", name); return nullptr; } Q_snprintf(lib->name, sizeof(lib->name), "%s." LIBRARY_PREFIX, fixedname); FS_GetLocalCopy(lib->name); lib->handle = (CSysModule *)Sys_LoadModule(lib->name); if (!lib->handle) { DPrintf("ERROR! System::GetLibrary: coulnd't load library (%s).\n", lib->name); Mem_Free(lib); return nullptr; } lib->createInterfaceFn = (CreateInterfaceFn)Sys_GetFactory(lib->handle); if (!lib->createInterfaceFn) { DPrintf("ERROR! System::GetLibrary: coulnd't get object factory(%s).\n", lib->name); Mem_Free(lib); return nullptr; } m_Libraries.Add(lib); DPrintf("Loaded library %s.\n", lib->name); return lib; }