Fix environment variable handling for Linux, make setenv command added before parsing of configuration files. (https://bugzilla.icculus.org/show_bug.cgi?id=3626)

This commit is contained in:
Thilo Schulz 2009-10-12 16:03:18 +00:00
parent 387dc9d6ff
commit d86dd71327
2 changed files with 53 additions and 50 deletions

View file

@ -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 );