From 8e450d869b1c42a54ad6f2d3e61c25f1f4577ba6 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Fri, 3 Apr 2026 03:49:23 +0500 Subject: [PATCH] engine: common: add host.default_gamedir containing gamedir passed to us from game launcher --- engine/common/common.h | 5 ++++- engine/common/filesystem_engine.c | 6 +++--- engine/common/host.c | 5 +++-- engine/platform/ios/launchdialog.m | 5 +---- engine/platform/ios/lib_ios.c | 6 +++--- engine/platform/linux/sys_linux.c | 7 ++++++- engine/platform/platform.h | 6 +++--- engine/platform/sdl2/sys_sdl2.c | 9 ++++++--- filesystem/fscallback.h | 3 --- 9 files changed, 29 insertions(+), 23 deletions(-) diff --git a/engine/common/common.h b/engine/common/common.h index bfa1411f..146909c1 100644 --- a/engine/common/common.h +++ b/engine/common/common.h @@ -344,6 +344,9 @@ typedef struct host_parm_s string gamedll; string clientlib; string menulib; + + // default game directory, passed to us from game launcher + string default_gamedir; } host_parm_t; extern host_parm_t host; @@ -389,7 +392,7 @@ void Mem_Stats_f( void ); // // filesystem_engine.c // -void FS_Init( const char *basedir ); +void FS_Init( void ); void FS_Shutdown( void ); void *FS_GetNativeObject( const char *obj ); int FS_Close( file_t *file ); diff --git a/engine/common/filesystem_engine.c b/engine/common/filesystem_engine.c index d7dfc305..59e56d36 100644 --- a/engine/common/filesystem_engine.c +++ b/engine/common/filesystem_engine.c @@ -328,7 +328,7 @@ static qboolean FS_DetermineReadOnlyRootDirectory( char *out, size_t size ) FS_Init ================ */ -void FS_Init( const char *basedir ) +void FS_Init( void ) { string gamedir; char rodir[MAX_OSPATH], rootdir[MAX_OSPATH]; @@ -352,7 +352,7 @@ void FS_Init( const char *basedir ) if( env ) Q_strncpy( gamedir, env, sizeof( gamedir )); else - Q_strncpy( gamedir, basedir, sizeof( gamedir )); // gamedir == basedir + Q_strncpy( gamedir, host.default_gamedir, sizeof( gamedir )); // gamedir == basedir } FS_LoadProgs(); @@ -364,7 +364,7 @@ void FS_Init( const char *basedir ) // and this better be reworked at some point g_fsapi.SetCurrentDirectory( rootdir ); - if( !g_fsapi.InitStdio( true, rootdir, basedir, gamedir, rodir )) + if( !g_fsapi.InitStdio( true, rootdir, host.default_gamedir, gamedir, rodir )) { Sys_Error( "Can't init filesystem_stdio!\n" ); return; diff --git a/engine/common/host.c b/engine/common/host.c index 15c51494..a8712cf6 100644 --- a/engine/common/host.c +++ b/engine/common/host.c @@ -892,6 +892,7 @@ static void Host_InitCommon( int argc, char **argv, const char *progname, qboole host.config_executed = false; host.status = HOST_INIT; // initialzation started host.type = HOST_DEDICATED; // predict state + Q_strncpy( host.default_gamedir, basedir, sizeof( host.default_gamedir )); #ifndef XASH_DEDICATED if( !Sys_CheckParm( "-dedicated" )) @@ -964,8 +965,8 @@ static void Host_InitCommon( int argc, char **argv, const char *progname, qboole #if XASH_DEDICATED Platform_SetupSigtermHandling(); #endif - Platform_Init( Host_IsDedicated( ) || developer >= DEV_EXTENDED, basedir ); - FS_Init( basedir ); + Platform_Init( Host_IsDedicated( ) || developer >= DEV_EXTENDED ); + FS_Init(); // print current developer level to simplify processing users feedback if( developer > 0 ) diff --git a/engine/platform/ios/launchdialog.m b/engine/platform/ios/launchdialog.m index f666228a..879aaeb3 100644 --- a/engine/platform/ios/launchdialog.m +++ b/engine/platform/ios/launchdialog.m @@ -21,9 +21,6 @@ #include #include "dlfcn.h" -#ifndef XASH_GAMEDIR -#define XASH_GAMEDIR "valve" // !!! Replace with your default (base) game directory !!! -#endif #define XASHLIB "@rpath/libxash.dylib" @@ -331,4 +328,4 @@ int IOS_GetArgs( char ***out ) { *out = szArgv; return szArgc; -} \ No newline at end of file +} diff --git a/engine/platform/ios/lib_ios.c b/engine/platform/ios/lib_ios.c index 7fe03b48..dfe9af01 100644 --- a/engine/platform/ios/lib_ios.c +++ b/engine/platform/ios/lib_ios.c @@ -14,11 +14,11 @@ GNU General Public License for more details. */ #include #include +#include #include "crtlib.h" -#include "fscallback.h" #include "library.h" #include "platform/ios/lib_ios.h" -#include +#include "common.h" #define EXT_LENGTH 5 @@ -55,7 +55,7 @@ void *IOS_LoadLibrary( const char *dllname ) if( !postfix ) { - if ( Q_strcmp(FS_Gamedir(), "valve" ) ) + if ( Q_strcmp(FS_Gamedir(), host.default_gamedir ) ) { postfix = FS_Gamedir( ); } diff --git a/engine/platform/linux/sys_linux.c b/engine/platform/linux/sys_linux.c index 1788623e..8eb7dbc6 100644 --- a/engine/platform/linux/sys_linux.c +++ b/engine/platform/linux/sys_linux.c @@ -66,10 +66,15 @@ qboolean Platform_DebuggerPresent( void ) tracer_pid = (const byte*)Q_strstr( buf, TracerPid ); if( !tracer_pid ) return false; + //printf( "%s\n", tracer_pid ); - while( *tracer_pid < '0' || *tracer_pid > '9' ) + + while(( *tracer_pid < '0' ) || ( *tracer_pid > '9' )) + { if( *tracer_pid++ == '\n' ) return false; + } + //printf( "%s\n", tracer_pid ); return !!Q_atoi( (const char*)tracer_pid ); } diff --git a/engine/platform/platform.h b/engine/platform/platform.h index f8c049ce..942cc217 100644 --- a/engine/platform/platform.h +++ b/engine/platform/platform.h @@ -58,7 +58,7 @@ char *Posix_Input( void ); #endif #if XASH_SDL -void SDLash_Init( const char *basedir ); +void SDLash_Init( void ); void SDLash_Shutdown( void ); void SDLash_NanoSleep( int nsec ); #endif @@ -111,7 +111,7 @@ void Linux_SetTimer( float time ); int Linux_GetProcessID( void ); #endif -static inline void Platform_Init( qboolean con_showalways, const char *basedir ) +static inline void Platform_Init( qboolean con_showalways ) { #if XASH_POSIX // daemonize as early as possible, because we need to close our file descriptors @@ -119,7 +119,7 @@ static inline void Platform_Init( qboolean con_showalways, const char *basedir ) #endif #if XASH_SDL - SDLash_Init( basedir ); + SDLash_Init( ); #endif #if XASH_ANDROID diff --git a/engine/platform/sdl2/sys_sdl2.c b/engine/platform/sdl2/sys_sdl2.c index c40b0610..5371a35e 100644 --- a/engine/platform/sdl2/sys_sdl2.c +++ b/engine/platform/sdl2/sys_sdl2.c @@ -79,20 +79,23 @@ static void SDLCALL SDLash_LogOutputFunction( void *userdata, int category, SDL_ case SDL_LOG_PRIORITY_INFO: str = S_NOTE; break; + default: + str = ""; + break; } Con_Reportf( "%s" S_BLUE "SDL" S_DEFAULT ": [%s] %s\n", str, SDLash_CategoryToString( category ), message ); } -void SDLash_Init( const char *basedir ) +void SDLash_Init( void ) { -#if XASH_APPLE +#if XASH_IOS char *path = SDL_GetBasePath(); if( path != NULL ) { char buf[MAX_VA_STRING]; - Q_snprintf( buf, sizeof( buf ), "%s%s/extras.pk3", path, basedir ); + Q_snprintf( buf, sizeof( buf ), "%s%s/extras.pk3", path, host.default_gamedir ); setenv( "XASH3D_EXTRAS_PAK1", buf, true ); } #endif diff --git a/filesystem/fscallback.h b/filesystem/fscallback.h index d33d9e11..1810b02b 100644 --- a/filesystem/fscallback.h +++ b/filesystem/fscallback.h @@ -27,9 +27,6 @@ extern fs_globals_t *FI; #define FS_Gamedir() GI->gamefolder #define FS_Title() GI->title -#define FS_InitStdio (*g_fsapi.InitStdio) -#define FS_ShutdownStdio (*g_fsapi.ShutdownStdio) - // search path utils #define FS_Rescan (*g_fsapi.Rescan) #define FS_ClearSearchPath (*g_fsapi.ClearSearchPath)