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/qcommon/common.c | 66 +++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 53 insertions(+), 13 deletions(-) (limited to 'code/qcommon') 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