From 0a5fd2ce603120c2de02f6882bc7e9c993e2e14e Mon Sep 17 00:00:00 2001 From: thilo Date: Mon, 12 Oct 2009 16:03:18 +0000 Subject: Fix environment variable handling for Linux, make setenv command added before parsing of configuration files. (https://bugzilla.icculus.org/show_bug.cgi?id=3626) git-svn-id: svn://svn.icculus.org/quake3/trunk@1659 edf5b092-35ff-0310-97b2-ce42778d08ea --- code/client/cl_main.c | 37 ----------------------------- code/qcommon/common.c | 66 +++++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 53 insertions(+), 50 deletions(-) (limited to 'code') diff --git a/code/client/cl_main.c b/code/client/cl_main.c index 5c24e66..f435be0 100644 --- a/code/client/cl_main.c +++ b/code/client/cl_main.c @@ -1450,41 +1450,6 @@ void CL_ForwardToServer_f( void ) { } } -/* -================== -CL_Setenv_f - -Mostly for controlling voodoo environment variables -================== -*/ -void CL_Setenv_f( void ) { - int argc = Cmd_Argc(); - - if ( argc > 2 ) { - char buffer[1024]; - int i; - - strcpy( buffer, Cmd_Argv(1) ); - strcat( buffer, "=" ); - - for ( i = 2; i < argc; i++ ) { - strcat( buffer, Cmd_Argv( i ) ); - strcat( buffer, " " ); - } - - putenv( buffer ); - } else if ( argc == 2 ) { - char *env = getenv( Cmd_Argv(1) ); - - if ( env ) { - Com_Printf( "%s=%s\n", Cmd_Argv(1), env ); - } else { - Com_Printf( "%s undefined\n", Cmd_Argv(1)); - } - } -} - - /* ================== CL_Disconnect_f @@ -3238,7 +3203,6 @@ void CL_Init( void ) { Cmd_AddCommand ("globalservers", CL_GlobalServers_f); Cmd_AddCommand ("rcon", CL_Rcon_f); Cmd_SetCommandCompletionFunc( "rcon", CL_CompleteRcon ); - Cmd_AddCommand ("setenv", CL_Setenv_f ); Cmd_AddCommand ("ping", CL_Ping_f ); Cmd_AddCommand ("serverstatus", CL_ServerStatus_f ); Cmd_AddCommand ("showip", CL_ShowIP_f ); @@ -3305,7 +3269,6 @@ void CL_Shutdown( void ) { Cmd_RemoveCommand ("localservers"); Cmd_RemoveCommand ("globalservers"); Cmd_RemoveCommand ("rcon"); - Cmd_RemoveCommand ("setenv"); Cmd_RemoveCommand ("ping"); Cmd_RemoveCommand ("serverstatus"); Cmd_RemoveCommand ("showip"); diff --git a/code/qcommon/common.c b/code/qcommon/common.c index f0a341b..aef7720 100644 --- a/code/qcommon/common.c +++ b/code/qcommon/common.c @@ -2362,6 +2362,43 @@ static void Com_Crash_f( void ) { * ( int * ) 0 = 0x12345678; } +/* +================== +Com_Setenv_f + +For controlling environment variables +================== +*/ +void Com_Setenv_f(void) +{ + int argc = Cmd_Argc(); + char *arg1 = Cmd_Argv(1); + + if(argc > 2) + { + char *arg2 = Cmd_ArgsFrom(2); + + #ifdef _MSC_VER + // windows already removes env variable if value is an empty string + _putenv_s(arg1, arg2); + #else + if(!*arg2) + unsetenv(arg1); + else + setenv(arg1, arg2, 1); + #endif + } + else if(argc == 2) + { + char *env = getenv(arg1); + + if(env) + Com_Printf("%s=%s\n", arg1, env); + else + Com_Printf("%s undefined\n", arg1); + } +} + #ifndef STANDALONE // TTimo: centralizing the cl_cdkey stuff after I discovered a buffer overflow problem with the dedicated server version @@ -2568,12 +2605,25 @@ void Com_Init( char *commandLine ) { Com_InitJournaling(); + // Add some commands here already so users can use them from config files + Cmd_AddCommand ("setenv", Com_Setenv_f); + if (com_developer && com_developer->integer) + { + Cmd_AddCommand ("error", Com_Error_f); + Cmd_AddCommand ("crash", Com_Crash_f); + Cmd_AddCommand ("freeze", Com_Freeze_f); + } + Cmd_AddCommand ("quit", Com_Quit_f); + Cmd_AddCommand ("changeVectors", MSG_ReportChangeVectors_f ); + Cmd_AddCommand ("writeconfig", Com_WriteConfig_f ); + Cmd_SetCommandCompletionFunc( "writeconfig", Cmd_CompleteCfgName ); + + // Make it execute the configuration files Cbuf_AddText ("exec default.cfg\n"); // skip the q3config.cfg if "safe" is on the command line - if ( !Com_SafeMode() ) { - Cbuf_AddText ("exec " Q3CONFIG_CFG "\n"); - } + if (!Com_SafeMode()) + Cbuf_AddText("exec " Q3CONFIG_CFG "\n"); Cbuf_AddText ("exec autoexec.cfg\n"); @@ -2632,16 +2682,6 @@ void Com_Init( char *commandLine ) { com_introPlayed = Cvar_Get( "com_introplayed", "0", CVAR_ARCHIVE); - if ( com_developer && com_developer->integer ) { - Cmd_AddCommand ("error", Com_Error_f); - Cmd_AddCommand ("crash", Com_Crash_f ); - Cmd_AddCommand ("freeze", Com_Freeze_f); - } - Cmd_AddCommand ("quit", Com_Quit_f); - Cmd_AddCommand ("changeVectors", MSG_ReportChangeVectors_f ); - Cmd_AddCommand ("writeconfig", Com_WriteConfig_f ); - Cmd_SetCommandCompletionFunc( "writeconfig", Cmd_CompleteCfgName ); - s = va("%s %s %s", Q3_VERSION, PLATFORM_STRING, __DATE__ ); com_version = Cvar_Get ("version", s, CVAR_ROM | CVAR_SERVERINFO ); -- cgit v1.2.3