diff options
Diffstat (limited to 'code/qcommon')
-rw-r--r-- | code/qcommon/common.c | 26 |
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 ); } |