@@ -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 */
46764676 unsigned int iseed ;
@@ -4685,10 +4685,14 @@ set_random_seed(const char *seed, const char *origin)
46854685 else if (strcmp (seed , "rand" ) == 0 )
46864686 {
46874687 /* use some "strong" random source */
4688+ #ifdef HAVE_STRONG_RANDOM
46884689 if (!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 }
46944698 else
@@ -4698,9 +4702,9 @@ set_random_seed(const char *seed, const char *origin)
46984702 if (sscanf (seed , "%u%c" , & iseed , & garbage ) != 1 )
46994703 {
47004704 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 ;
47044708 }
47054709 }
47064710
@@ -4709,6 +4713,7 @@ set_random_seed(const char *seed, const char *origin)
47094713 srandom (iseed );
47104714 /* no precision loss: 32 bit unsigned int cast to 64 bit int */
47114715 random_seed = iseed ;
4716+ return true;
47124717}
47134718
47144719
@@ -4823,7 +4828,11 @@ main(int argc, char **argv)
48234828 memset (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
48284837 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 )
48294838 {
@@ -5099,7 +5108,11 @@ main(int argc, char **argv)
50995108 break ;
51005109 case 9 : /* random-seed */
51015110 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+ }
51035116 break ;
51045117 default :
51055118 fprintf (stderr , _ ("Try \"%s --help\" for more information.\n" ), progname );
0 commit comments