Fix unportable code in pgbench.
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 17 Apr 2019 21:30:29 +0000 (17:30 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 17 Apr 2019 21:30:29 +0000 (17:30 -0400)
The buildfarm points out that UINT64_FORMAT might not work with sscanf;
it's calibrated for our printf implementation, which might not agree
with the platform-supplied sscanf.  Fall back to just accepting an
unsigned long, which is already more than the documentation promises.

Oversight in e6c3ba7fb; back-patch to v11, as that was.

src/bin/pgbench/pgbench.c

index e0ac131a0e285966b57cb7976a765c78de7c8ee9..a03ab281a5f104c2def5c222da22c9b686dc71f8 100644 (file)
@@ -5019,16 +5019,19 @@ set_random_seed(const char *seed)
        }
        else
        {
-               /* parse seed unsigned int value */
+               /* parse unsigned-int seed value */
+               unsigned long ulseed;
                char            garbage;
 
-               if (sscanf(seed, UINT64_FORMAT "%c", &iseed, &garbage) != 1)
+               /* Don't try to use UINT64_FORMAT here; it might not work for sscanf */
+               if (sscanf(seed, "%lu%c", &ulseed, &garbage) != 1)
                {
                        fprintf(stderr,
                                        "unrecognized random seed option \"%s\": expecting an unsigned integer, \"time\" or \"rand\"\n",
                                        seed);
                        return false;
                }
+               iseed = (uint64) ulseed;
        }
 
        if (seed != NULL)