Skip to content

Commit 5635c7a

Browse files
committed
Fix portability and translatability issues in commit 64f8589.
Compilation failed for lack of an #ifdef on builds without pg_strong_random(). Also fix relevant error messages to meet project style guidelines. Fabien Coelho, further adjusted by me Discussion: https://postgr.es/m/[email protected]
1 parent b0c90c8 commit 5635c7a

File tree

2 files changed

+24
-10
lines changed

2 files changed

+24
-10
lines changed

src/bin/pgbench/pgbench.c

+22-9
Original file line numberDiff line numberDiff line change
@@ -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);

src/bin/pgbench/t/002_pgbench_no_server.pl

+2-1
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,8 @@ sub pgbench_scripts
111111
[qr{unrecognized initialization step},
112112
qr{allowed steps are} ] ],
113113
[ 'bad random seed', '--random-seed=one',
114-
[qr{error while scanning 'one' from --random-seed option, expecting an unsigned integer} ] ],
114+
[qr{unrecognized random seed option "one": expecting an unsigned integer, "time" or "rand"},
115+
qr{error while setting random seed from --random-seed option} ] ],
115116

116117
# loging sub-options
117118
[ 'sampling => log', '--sampling-rate=0.01',

0 commit comments

Comments
 (0)