@@ -4669,8 +4669,8 @@ printResults(TState *threads, StatsData *total, instr_time total_time,
4669
4669
}
4670
4670
4671
4671
/* call srandom based on some seed. NULL triggers the default behavior. */
4672
- static void
4673
- set_random_seed (const char * seed , const char * origin )
4672
+ static bool
4673
+ set_random_seed (const char * seed )
4674
4674
{
4675
4675
/* srandom expects an unsigned int */
4676
4676
unsigned int iseed ;
@@ -4685,10 +4685,14 @@ set_random_seed(const char *seed, const char *origin)
4685
4685
else if (strcmp (seed , "rand" ) == 0 )
4686
4686
{
4687
4687
/* use some "strong" random source */
4688
+ #ifdef HAVE_STRONG_RANDOM
4688
4689
if (!pg_strong_random (& iseed , sizeof (iseed )))
4690
+ #endif
4689
4691
{
4690
- fprintf (stderr , "cannot seed random from a strong source\n" );
4691
- exit (1 );
4692
+ fprintf (stderr ,
4693
+ "cannot seed random from a strong source, none available: "
4694
+ "use \"time\" or an unsigned integer value.\n" );
4695
+ return false;
4692
4696
}
4693
4697
}
4694
4698
else
@@ -4698,9 +4702,9 @@ set_random_seed(const char *seed, const char *origin)
4698
4702
if (sscanf (seed , "%u%c" , & iseed , & garbage ) != 1 )
4699
4703
{
4700
4704
fprintf (stderr ,
4701
- "error while scanning '%s' from %s, expecting an unsigned integer, ' time' or ' rand' \n" ,
4702
- seed , origin );
4703
- exit ( 1 ) ;
4705
+ "unrecognized random seed option \"%s\": expecting an unsigned integer, \" time\" or \" rand\" \n" ,
4706
+ seed );
4707
+ return false ;
4704
4708
}
4705
4709
}
4706
4710
@@ -4709,6 +4713,7 @@ set_random_seed(const char *seed, const char *origin)
4709
4713
srandom (iseed );
4710
4714
/* no precision loss: 32 bit unsigned int cast to 64 bit int */
4711
4715
random_seed = iseed ;
4716
+ return true;
4712
4717
}
4713
4718
4714
4719
@@ -4823,7 +4828,11 @@ main(int argc, char **argv)
4823
4828
memset (state , 0 , sizeof (CState ));
4824
4829
4825
4830
/* set random seed early, because it may be used while parsing scripts. */
4826
- set_random_seed (getenv ("PGBENCH_RANDOM_SEED" ), "PGBENCH_RANDOM_SEED environment variable" );
4831
+ if (!set_random_seed (getenv ("PGBENCH_RANDOM_SEED" )))
4832
+ {
4833
+ fprintf (stderr , "error while setting random seed from PGBENCH_RANDOM_SEED environment variable\n" );
4834
+ exit (1 );
4835
+ }
4827
4836
4828
4837
while ((c = getopt_long (argc , argv , "iI:h:nvp:dqb:SNc:j:Crs:t:T:U:lf:D:F:M:P:R:L:" , long_options , & optindex )) != -1 )
4829
4838
{
@@ -5099,7 +5108,11 @@ main(int argc, char **argv)
5099
5108
break ;
5100
5109
case 9 : /* random-seed */
5101
5110
benchmarking_option_set = true;
5102
- set_random_seed (optarg , "--random-seed option" );
5111
+ if (!set_random_seed (optarg ))
5112
+ {
5113
+ fprintf (stderr , "error while setting random seed from --random-seed option\n" );
5114
+ exit (1 );
5115
+ }
5103
5116
break ;
5104
5117
default :
5105
5118
fprintf (stderr , _ ("Try \"%s --help\" for more information.\n" ), progname );
0 commit comments