aboutsummaryrefslogtreecommitdiffstats
path: root/code/qcommon
diff options
context:
space:
mode:
Diffstat (limited to 'code/qcommon')
-rw-r--r--code/qcommon/common.c26
1 files changed, 22 insertions, 4 deletions
diff --git a/code/qcommon/common.c b/code/qcommon/common.c
index e8a95a5..0f28072 100644
--- a/code/qcommon/common.c
+++ b/code/qcommon/common.c
@@ -2502,6 +2502,22 @@ static void Com_DetectAltivec(void)
/*
=================
+Com_InitRand
+Seed the random number generator, if possible with an OS supplied random seed.
+=================
+*/
+static void Com_InitRand(void)
+{
+ unsigned int seed;
+
+ if(Sys_Random(&seed, sizeof(seed)))
+ srand(seed);
+ else
+ srand(time(NULL));
+}
+
+/*
+=================
Com_Init
=================
*/
@@ -2519,8 +2535,11 @@ void Com_Init( char *commandLine ) {
Com_Memset( &eventQueue[ 0 ], 0, MAX_QUEUED_EVENTS * sizeof( sysEvent_t ) );
Com_Memset( &sys_packetReceived[ 0 ], 0, MAX_MSGLEN * sizeof( byte ) );
- // do this before anything else decides to push events
- Com_InitPushEvent();
+ // initialize the weak pseudo-random number generator for use later.
+ Com_InitRand();
+
+ // do this before anything else decides to push events
+ Com_InitPushEvent();
Com_InitSmallZoneMemory();
Cvar_Init ();
@@ -3322,8 +3341,7 @@ void Com_RandomBytes( byte *string, int len )
return;
Com_Printf( "Com_RandomBytes: using weak randomization\n" );
- srand( time( 0 ) );
for( i = 0; i < len; i++ )
- string[i] = (unsigned char)( rand() % 255 );
+ string[i] = (unsigned char)( random() % 255 );
}