aboutsummaryrefslogtreecommitdiffstats
path: root/code
diff options
context:
space:
mode:
authorthilo <thilo@edf5b092-35ff-0310-97b2-ce42778d08ea>2009-10-12 16:03:18 +0000
committerthilo <thilo@edf5b092-35ff-0310-97b2-ce42778d08ea>2009-10-12 16:03:18 +0000
commit0a5fd2ce603120c2de02f6882bc7e9c993e2e14e (patch)
treed17b7bc18982b6b13fe43bd991a9b22aef7ff17f /code
parent6bdaefacb55003195a48cc5b5815807f77c016e9 (diff)
downloadioquake3-aero-0a5fd2ce603120c2de02f6882bc7e9c993e2e14e.tar.gz
ioquake3-aero-0a5fd2ce603120c2de02f6882bc7e9c993e2e14e.zip
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
Diffstat (limited to 'code')
-rw-r--r--code/client/cl_main.c37
-rw-r--r--code/qcommon/common.c66
2 files changed, 53 insertions, 50 deletions
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
@@ -1452,41 +1452,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 );