diff --git a/code/unix/unix_main.c b/code/unix/unix_main.c index 5de32c84..a9a0c0e0 100644 --- a/code/unix/unix_main.c +++ b/code/unix/unix_main.c @@ -1053,125 +1053,6 @@ void* Sys_GetCGameAPI(void* parms) return GetCGameAPI(parms); } -/* -================= -Sys_LoadDll - -Used to load a development dll instead of a virtual machine -TTimo: -changed the load procedure to match VFS logic, and allow developer use -#1 look down current path -#2 look in fs_homepath -#3 look in fs_basepath -================= -*/ -extern char *FS_BuildOSPath( const char *base, const char *game, const char *qpath ); - -void *Sys_LoadDll( const char *name, char *fqpath , - int (**entryPoint)(int, ...), - int (*systemcalls)(int, ...) ) -{ - void *libHandle; - void (*dllEntry)( int (*syscallptr)(int, ...) ); - char curpath[MAX_OSPATH]; - char fname[MAX_OSPATH]; - char *basepath; - char *homepath; - char *pwdpath; - char *gamedir; - char *fn; - const char* err = NULL; - - *fqpath = 0; - - // bk001206 - let's have some paranoia - assert( name ); - - getcwd(curpath, sizeof(curpath)); -#if defined __i386__ - snprintf (fname, sizeof(fname), "%si386.so", name); -#elif defined __powerpc__ //rcg010207 - PPC support. - snprintf (fname, sizeof(fname), "%sppc.so", name); -#elif defined __axp__ - snprintf (fname, sizeof(fname), "%saxp.so", name); -#elif defined __mips__ - snprintf (fname, sizeof(fname), "%smips.so", name); -#elif defined __x86_64__ - snprintf(fname, sizeof(fname), "%sx86_64.so", name); -#elif defined __arm__ - snprintf(fname, sizeof(fname), "%sarm.so", name); -#elif defined __arm64__ - snprintf(fname, sizeof(fname), "%sarm64.so", name); -#error Unknown arch -#endif - -// bk001129 - was RTLD_LAZY -#define Q_RTLD RTLD_NOW - - pwdpath = Sys_Cwd(); - basepath = Cvar_VariableString( "fs_basepath" ); - homepath = Cvar_VariableString( "fs_homepath" ); - gamedir = Cvar_VariableString( "fs_game" ); - - // pwdpath - fn = FS_BuildOSPath( pwdpath, gamedir, fname ); - Com_Printf( "Sys_LoadDll(%s)... \n", fn ); - libHandle = dlopen( fn, Q_RTLD ); - - if ( !libHandle ) - { - Com_Printf( "Sys_LoadDll(%s) failed:\n\"%s\"\n", fn, dlerror() ); - // fs_homepath - fn = FS_BuildOSPath( homepath, gamedir, fname ); - Com_Printf( "Sys_LoadDll(%s)... \n", fn ); - libHandle = dlopen( fn, Q_RTLD ); - - if ( !libHandle ) - { - Com_Printf( "Sys_LoadDll(%s) failed:\n\"%s\"\n", fn, dlerror() ); - // fs_basepath - fn = FS_BuildOSPath( basepath, gamedir, fname ); - Com_Printf( "Sys_LoadDll(%s)... \n", fn ); - libHandle = dlopen( fn, Q_RTLD ); - - if ( !libHandle ) - { -#ifndef NDEBUG // bk001206 - in debug abort on failure - Com_Error ( ERR_FATAL, "Sys_LoadDll(%s) failed dlopen() completely!\n", name ); -#else - Com_Printf ( "Sys_LoadDll(%s) failed dlopen() completely!\n", name ); -#endif - return NULL; - } else - Com_Printf ( "Sys_LoadDll(%s): succeeded ...\n", fn ); - } else - Com_Printf ( "Sys_LoadDll(%s): succeeded ...\n", fn ); - } else - Com_Printf ( "Sys_LoadDll(%s): succeeded ...\n", fn ); - - dllEntry = dlsym( libHandle, "dllEntry" ); - *entryPoint = dlsym( libHandle, "vmMain" ); - if ( !*entryPoint || !dllEntry ) - { - err = dlerror(); -#ifndef NDEBUG // bk001206 - in debug abort on failure - Com_Error ( ERR_FATAL, "Sys_LoadDll(%s) failed dlsym(vmMain):\n\"%s\" !\n", name, err ); -#else - Com_Printf ( "Sys_LoadDll(%s) failed dlsym(vmMain):\n\"%s\" !\n", name, err ); -#endif - dlclose( libHandle ); - err = dlerror(); - if ( err != NULL ) - Com_Printf ( "Sys_LoadDll(%s) failed dlcose:\n\"%s\"\n", name, err ); - return NULL; - } - Com_Printf ( "Sys_LoadDll(%s) found **vmMain** at %p \n", name, *entryPoint ); // bk001212 - dllEntry( systemcalls ); - Com_Printf ( "Sys_LoadDll(%s) succeeded!\n", name ); - if ( libHandle ) Q_strncpyz ( fqpath , fn , MAX_QPATH ) ; // added 7/20/02 by T.Ray - return libHandle; -} - /* ========================================================================