Patch by Simon McVittie to improve dynamic library loading (#4700)

This commit is contained in:
Thilo Schulz 2011-02-04 17:47:57 +00:00
parent d2f8b9f4bb
commit 7bb5906599
3 changed files with 38 additions and 39 deletions

View file

@ -405,34 +405,6 @@ void Sys_UnloadDll( void *dllHandle )
Sys_UnloadLibrary(dllHandle);
}
/*
=================
Sys_TryLibraryLoad
=================
*/
static void* Sys_TryLibraryLoad(const char* base, const char* gamedir, const char* fname, char* fqpath )
{
void* libHandle;
char* fn;
*fqpath = 0;
fn = FS_BuildOSPath( base, gamedir, fname );
Com_Printf( "Sys_LoadDll(%s)... \n", fn );
libHandle = Sys_LoadLibrary(fn);
if(!libHandle) {
Com_Printf( "Sys_LoadDll(%s) failed:\n\"%s\"\n", fn, Sys_LibraryError() );
return NULL;
}
Com_Printf ( "Sys_LoadDll(%s): succeeded ...\n", fn );
Q_strncpyz ( fqpath , fn , MAX_QPATH ) ;
return libHandle;
}
/*
=================
Sys_LoadDll
@ -449,26 +421,24 @@ void *Sys_LoadDll( const char *name, char *fqpath ,
void *libHandle;
void (*dllEntry)( intptr_t (*syscallptr)(intptr_t, ...) );
char fname[MAX_OSPATH];
char *basepath;
char *homepath;
char *gamedir;
char *netpath;
assert( name );
Q_snprintf (fname, sizeof(fname), "%s" ARCH_STRING DLL_EXT, name);
// TODO: use fs_searchpaths from files.c
basepath = Cvar_VariableString( "fs_basepath" );
homepath = Cvar_VariableString( "fs_homepath" );
gamedir = Cvar_VariableString( "fs_game" );
netpath = FS_FindDll(fname);
libHandle = Sys_TryLibraryLoad(homepath, gamedir, fname, fqpath);
if(!netpath) {
Com_Printf( "Sys_LoadDll(%s) could not find it\n", fname );
return NULL;
}
if(!libHandle && basepath)
libHandle = Sys_TryLibraryLoad(basepath, gamedir, fname, fqpath);
Com_Printf( "Loading DLL file: %s\n", netpath);
libHandle = Sys_LoadLibrary(netpath);
if(!libHandle) {
Com_Printf ( "Sys_LoadDll(%s) failed to load library\n", name );
Com_Printf( "Sys_LoadDll(%s) failed:\n\"%s\"\n", netpath, Sys_LibraryError() );
return NULL;
}