From a717b7fc492c6bcbb0190eb0bd56443c1775b8b8 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Thu, 9 Jun 2022 14:44:04 +0300 Subject: [PATCH] game_launch: declare environ variable, by standard it must be declared by user program --- engine/common/launcher.c | 12 ++++++++---- game_launch/game.cpp | 3 ++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/engine/common/launcher.c b/engine/common/launcher.c index 85e71d6a..e3ed73a4 100644 --- a/engine/common/launcher.c +++ b/engine/common/launcher.c @@ -25,6 +25,9 @@ GNU General Public License for more details. #include #endif +#include + +extern char **environ; static char szGameDir[128]; // safe place to keep gamedir static int g_iArgc; static char **g_pszArgv; @@ -40,17 +43,18 @@ static char **g_pszArgv; void Launcher_ChangeGame( const char *progname ) { + char envstr[256]; + #if USE_EXECVE_FOR_CHANGE_GAME Host_Shutdown(); #if XASH_WIN32 _putenv_s( E_GAME, progname ); - _execve( szArgv[0], szArgv, environ ); + _execve( g_pszArgv[0], g_pszArgv, _environ ); #else - char envstr[256]; snprintf( envstr, sizeof( envstr ), E_GAME "=%s", progname ); putenv( envstr ); - execve( szArgv[0], szArgv, environ ); + execve( g_pszArgv[0], g_pszArgv, environ ); #endif #else @@ -100,7 +104,7 @@ int main( int argc, char** argv ) if( !game ) game = GAME_PATH; - Q_strncpy( szGameDir, gamedir, sizeof( szGameDir )); + Q_strncpy( szGameDir, game, sizeof( szGameDir )); #if XASH_EMSCRIPTEN #ifdef EMSCRIPTEN_LIB_FS diff --git a/game_launch/game.cpp b/game_launch/game.cpp index 78d53b84..1f50c956 100644 --- a/game_launch/game.cpp +++ b/game_launch/game.cpp @@ -56,6 +56,7 @@ typedef void (*pfnChangeGame)( const char *progname ); typedef int (*pfnInit)( int argc, char **argv, const char *progname, int bChangeGame, pfnChangeGame func ); typedef void (*pfnShutdown)( void ); +extern char **environ; static pfnInit Xash_Main; static pfnShutdown Xash_Shutdown = NULL; static char szGameDir[128]; // safe place to keep gamedir @@ -129,7 +130,7 @@ static void Sys_ChangeGame( const char *progname ) _putenv_s( E_GAME, progname ); Sys_UnloadEngine(); - _execve( szArgv[0], szArgv, environ ); + _execve( szArgv[0], szArgv, _environ ); #else char envstr[256]; snprintf( envstr, sizeof( envstr ), E_GAME "=%s", progname );