@@ -4669,8 +4669,8 @@ printResults(TState *threads, StatsData *total, instr_time total_time,
46694669}
46704670
46714671/* 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 )
46744674{
46754675/* srandom expects an unsigned int */
46764676unsignedint iseed ;
@@ -4685,10 +4685,14 @@ set_random_seed(const char *seed, const char *origin)
46854685else if (strcmp (seed ,"rand" )== 0 )
46864686{
46874687/* use some "strong" random source */
4688+ #ifdef HAVE_STRONG_RANDOM
46884689if (!pg_strong_random (& iseed ,sizeof (iseed )))
4690+ #endif
46894691{
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;
46924696}
46934697}
46944698else
@@ -4698,9 +4702,9 @@ set_random_seed(const char *seed, const char *origin)
46984702if (sscanf (seed ,"%u%c" ,& iseed ,& garbage )!= 1 )
46994703{
47004704fprintf (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 ;
47044708}
47054709}
47064710
@@ -4709,6 +4713,7 @@ set_random_seed(const char *seed, const char *origin)
47094713srandom (iseed );
47104714/* no precision loss: 32 bit unsigned int cast to 64 bit int */
47114715random_seed = iseed ;
4716+ return true;
47124717}
47134718
47144719
@@ -4823,7 +4828,11 @@ main(int argc, char **argv)
48234828memset (state ,0 ,sizeof (CState ));
48244829
48254830/* 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+ }
48274836
48284837while ((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 )
48294838{
@@ -5099,7 +5108,11 @@ main(int argc, char **argv)
50995108break ;
51005109case 9 :/* random-seed */
51015110benchmarking_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+ }
51035116break ;
51045117default :
51055118fprintf (stderr ,_ ("Try \"%s --help\" for more information.\n" ),progname );