From 54920f13df35d3dd1fdf1e4421161e1fc8070fda Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sun, 7 Jul 2019 02:47:45 +0300 Subject: [PATCH] engine: rename library naming function, as it returns a full path and not just library name --- engine/client/cl_game.c | 6 ++-- engine/client/cl_gameui.c | 8 +++-- engine/client/cl_main.c | 2 +- engine/common/lib_common.c | 62 +++++++++++++++----------------------- engine/common/library.h | 2 +- engine/server/sv_init.c | 4 +-- 6 files changed, 37 insertions(+), 47 deletions(-) diff --git a/engine/client/cl_game.c b/engine/client/cl_game.c index bbff79b7..330ebe0c 100644 --- a/engine/client/cl_game.c +++ b/engine/client/cl_game.c @@ -3957,16 +3957,16 @@ qboolean CL_LoadProgs( const char *name ) #if XASH_WIN32 if( ( clgame.client_dll_uses_sdl = COM_CheckLibraryDirectDependency( name, OS_LIB_PREFIX "SDL2." OS_LIB_EXT, false ) ) ) { - Con_Printf( S_NOTE "client.dll uses SDL2 for mouse input\n" ); + Con_Printf( S_NOTE "%s uses SDL2 for mouse input\n", name ); } else { - Con_Printf( S_NOTE "client.dll uses Windows API for mouse input\n" ); + Con_Printf( S_NOTE "%s uses Windows API for mouse input\n", name ); } #else // this doesn't mean other platforms uses SDL2 in any case // it just helps input code to stay platform-independent - clgame.client_dll_uses_sdl = true; + clgame.client_dll_uses_sdl = true; #endif clgame.hInstance = COM_LoadLibrary( name, false, false ); diff --git a/engine/client/cl_gameui.c b/engine/client/cl_gameui.c index 88fb182e..0cb0a3c2 100644 --- a/engine/client/cl_gameui.c +++ b/engine/client/cl_gameui.c @@ -901,7 +901,7 @@ int pfnCheckGameDll( void ) if( svgame.hInstance ) return true; - COM_GetCommonLibraryName( LIBRARY_SERVER, dllpath, sizeof( dllpath )); + COM_GetCommonLibraryPath( LIBRARY_SERVER, dllpath, sizeof( dllpath )); if(( hInst = COM_LoadLibrary( dllpath, true, false )) != NULL ) { @@ -1086,16 +1086,18 @@ qboolean UI_LoadProgs( void ) // setup globals gameui.globals = &gpGlobals; - COM_GetCommonLibraryName( LIBRARY_GAMEUI, dllpath, sizeof( dllpath )); + COM_GetCommonLibraryPath( LIBRARY_GAMEUI, dllpath, sizeof( dllpath )); if(!( gameui.hInstance = COM_LoadLibrary( dllpath, false, false ))) { + string path = OS_LIB_PREFIX "menu." OS_LIB_EXT; + FS_AllowDirectPaths( true ); // no use to load it from engine directory, as library loader // that implements internal gamelibs already knows how to load it #ifndef XASH_INTERNAL_GAMELIBS - if(!( gameui.hInstance = COM_LoadLibrary( OS_LIB_PREFIX "menu." OS_LIB_EXT, false, false ))) + if(!( gameui.hInstance = COM_LoadLibrary( path, false, true ))) #endif { FS_AllowDirectPaths( false ); diff --git a/engine/client/cl_main.c b/engine/client/cl_main.c index 4811a967..1b5899a6 100644 --- a/engine/client/cl_main.c +++ b/engine/client/cl_main.c @@ -2983,7 +2983,7 @@ void CL_Init( void ) // IN_TouchInit(); Con_LoadHistory(); - COM_GetCommonLibraryName( LIBRARY_CLIENT, libpath, sizeof( libpath )); + COM_GetCommonLibraryPath( LIBRARY_CLIENT, libpath, sizeof( libpath )); if( !CL_LoadProgs( libpath ) ) Host_Error( "can't initialize %s: %s\n", libpath, COM_GetLibraryError() ); diff --git a/engine/common/lib_common.c b/engine/common/lib_common.c index 263347e0..810f93eb 100644 --- a/engine/common/lib_common.c +++ b/engine/common/lib_common.c @@ -61,56 +61,49 @@ const char *COM_OffsetNameForFunction( void *function ) ============================================================================= */ +static void COM_GenerateCommonLibraryName( const char *name, const char *ext, char *out, size_t size ) +{ +#if ( XASH_WIN32 || XASH_LINUX || XASH_APPLE ) && XASH_X86 + Q_snprintf( out, size, "%s.%s", name, ext ); +#elif ( XASH_WIN32 || XASH_LINUX || XASH_APPLE ) + Q_snprintf( out, size, "%s_%s.%s", name, Q_buildarch(), ext ); +#else + Q_snprintf( out, size, "%s_%s_%s.%s", name, Q_buildos(), Q_buildarch(), ext ); +#endif +} + /* ============== -COM_GenerateClientLibraryName +COM_GenerateClientLibraryPath Generates platform-unique and compatible name for client libraries ============== */ -static void COM_GenerateClientLibraryName( const char *name, char *out, size_t size ) +static void COM_GenerateClientLibraryPath( const char *name, char *out, size_t size ) { #ifdef XASH_INTERNAL_GAMELIBS // assuming library loader knows where to get libraries - Q_strncpy( out, name, size ); - -#elif ( XASH_WIN32 || XASH_LINUX || XASH_APPLE ) && XASH_X86 - - Q_snprintf( out, size, "%s/%s." OS_LIB_EXT, - GI->dll_path, - name ); - -#elif ( XASH_WIN32 || XASH_LINUX || XASH_APPLE ) - - Q_snprintf( out, size, "%s/%s_%s." OS_LIB_EXT, - GI->dll_path, - name, - Q_buildarch() ); - #else + string dllpath; - Q_snprintf( out, size, "%s/%s_%s_%s." OS_LIB_EXT, - GI->dll_path, - name, - Q_buildos(), - Q_buildarch() ); + // we don't have any library prefixes, so we can safely append dll_path here + Q_snprintf( dllpath, sizeof( dllpath ), "%s/%s", GI->dll_path, name ); + COM_GenerateCommonLibraryName( dllpath, OS_LIB_EXT, out, size ); #endif } /* ============== -COM_GenerateClientLibraryName +COM_GenerateServerLibraryPath Generates platform-unique and compatible name for server library ============== */ -static void COM_GenerateServerLibraryName( char *out, size_t size ) +static void COM_GenerateServerLibraryPath( char *out, size_t size ) { #ifdef XASH_INTERNAL_GAMELIBS // assuming library loader knows where to get libraries - Q_strncpy( out, "server", size ); - #elif ( XASH_WIN32 || XASH_LINUX || XASH_APPLE ) && XASH_X86 #if XASH_WIN32 @@ -136,29 +129,24 @@ static void COM_GenerateServerLibraryName( char *out, size_t size ) ext = COM_FileExtension( dllpath ); COM_StripExtension( dllpath ); -#if ( XASH_WIN32 || XASH_LINUX || XASH_APPLE ) - Q_snprintf( out, size, "%s_%s.%s", dllpath, Q_buildarch(), ext ); -#else - Q_snprintf( out, size, "%s_%s_%s.%s", dllpath, Q_buildos(), Q_buildarch(), ext ); -#endif - + COM_GenerateCommonLibraryName( dllpath, ext, out, size ); #endif } /* ============== -COM_GetCommonLibraryName +COM_GetCommonLibraryPath Generates platform-unique and compatible name for server library ============== */ -void COM_GetCommonLibraryName( ECommonLibraryType eLibType, char *out, size_t size ) +void COM_GetCommonLibraryPath( ECommonLibraryType eLibType, char *out, size_t size ) { switch( eLibType ) { case LIBRARY_GAMEUI: - COM_GenerateClientLibraryName( "menu", out, size ); + COM_GenerateClientLibraryPath( "menu", out, size ); break; case LIBRARY_CLIENT: if( SI.clientlib[0] ) @@ -167,7 +155,7 @@ void COM_GetCommonLibraryName( ECommonLibraryType eLibType, char *out, size_t si } else { - COM_GenerateClientLibraryName( "client", out, size ); + COM_GenerateClientLibraryPath( "client", out, size ); } break; case LIBRARY_SERVER: @@ -177,7 +165,7 @@ void COM_GetCommonLibraryName( ECommonLibraryType eLibType, char *out, size_t si } else { - COM_GenerateServerLibraryName( out, size ); + COM_GenerateServerLibraryPath( out, size ); } break; default: diff --git a/engine/common/library.h b/engine/common/library.h index 86effcc9..6d7afdbb 100644 --- a/engine/common/library.h +++ b/engine/common/library.h @@ -56,6 +56,6 @@ typedef enum LIBRARY_GAMEUI } ECommonLibraryType; -void COM_GetCommonLibraryName( ECommonLibraryType eLibType, char *out, size_t size ); +void COM_GetCommonLibraryPath( ECommonLibraryType eLibType, char *out, size_t size ); #endif//LIBRARY_H diff --git a/engine/server/sv_init.c b/engine/server/sv_init.c index 5215f9b2..6e5278ef 100644 --- a/engine/server/sv_init.c +++ b/engine/server/sv_init.c @@ -673,7 +673,7 @@ qboolean SV_InitGame( void ) // first initialize? COM_ResetLibraryError(); - COM_GetCommonLibraryName( LIBRARY_SERVER, dllpath, sizeof( dllpath )); + COM_GetCommonLibraryPath( LIBRARY_SERVER, dllpath, sizeof( dllpath )); if( !SV_LoadProgs( dllpath )) { @@ -1000,7 +1000,7 @@ void SV_InitGameProgs( void ) if( svgame.hInstance ) return; // already loaded - COM_GetCommonLibraryName( LIBRARY_SERVER, dllpath, sizeof( dllpath )); + COM_GetCommonLibraryPath( LIBRARY_SERVER, dllpath, sizeof( dllpath )); // just try to initialize SV_LoadProgs( dllpath );