From: Peter Eisentraut Date: Sat, 29 Mar 2025 14:24:42 +0000 (+0100) Subject: pgbench: Make set_random_seed() 64-bit everywhere. X-Git-Tag: REL_18_BETA1~383 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=53a2a1564ae450a46a7c565756ab536b84150e36;p=thirdparty%2Fpostgresql.git pgbench: Make set_random_seed() 64-bit everywhere. Delete an intermediate variable, a redundant cast, a use of long and a use of long long. scanf() the seed directly into a uint64, now that we can do that with SCNu64 from . The previous coding was from pre-C99 times when %lld might not have been there, so it read into an unsigned long. Therefore behavior varied by OS, and --random-seed would accept either 32 or 64 bit seeds. Now it's the same everywhere. Author: Thomas Munro Discussion: https://postgr.es/m/b936d2fb-590d-49c3-a615-92c3a88c6c19%40eisentraut.org --- diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c index c17c728ebb4..497a936c141 100644 --- a/src/bin/pgbench/pgbench.c +++ b/src/bin/pgbench/pgbench.c @@ -6634,27 +6634,23 @@ set_random_seed(const char *seed) } else { - /* parse unsigned-int seed value */ - unsigned long ulseed; char garbage; - /* Don't try to use UINT64_FORMAT here; it might not work for sscanf */ - if (sscanf(seed, "%lu%c", &ulseed, &garbage) != 1) + if (sscanf(seed, "%" SCNu64 "%c", &iseed, &garbage) != 1) { pg_log_error("unrecognized random seed option \"%s\"", seed); pg_log_error_detail("Expecting an unsigned integer, \"time\" or \"rand\"."); return false; } - iseed = (uint64) ulseed; } if (seed != NULL) - pg_log_info("setting random seed to %llu", (unsigned long long) iseed); + pg_log_info("setting random seed to %" PRIu64, iseed); random_seed = iseed; /* Initialize base_random_sequence using seed */ - pg_prng_seed(&base_random_sequence, (uint64) iseed); + pg_prng_seed(&base_random_sequence, iseed); return true; }