summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Eisentraut2025-03-29 14:24:42 +0000
committerPeter Eisentraut2025-03-29 14:24:42 +0000
commit53a2a1564ae450a46a7c565756ab536b84150e36 (patch)
treebd05e75b15c1f6cd11718457f09760fee7dff7f5
parentd70b17636ddf1ea2c71d1c7bc477372b36ccb66b (diff)
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 <inttypes.h>. 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 <[email protected]> Discussion: https://postgr.es/m/b936d2fb-590d-49c3-a615-92c3a88c6c19%40eisentraut.org
-rw-r--r--src/bin/pgbench/pgbench.c10
1 files changed, 3 insertions, 7 deletions
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;
}