Fix portability and translatability issues in commit 64f85894a.
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 31 Mar 2018 16:32:35 +0000 (12:32 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 31 Mar 2018 16:32:35 +0000 (12:32 -0400)
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/32390.1522464534@sss.pgh.pa.us

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

index 8529e7dc4750b58e4c8e28573af1288a58220d29..fd1856837a260ada69995aaa88617be7c0e4baff 100644 (file)
@@ -4669,8 +4669,8 @@ printResults(TState *threads, StatsData *total, instr_time total_time,
 }
 
 /* call srandom based on some seed. NULL triggers the default behavior. */
-static void
-set_random_seed(const char *seed, const char *origin)
+static bool
+set_random_seed(const char *seed)
 {
        /* srandom expects an unsigned int */
        unsigned int iseed;
@@ -4685,10 +4685,14 @@ set_random_seed(const char *seed, const char *origin)
        else if (strcmp(seed, "rand") == 0)
        {
                /* use some "strong" random source */
+#ifdef HAVE_STRONG_RANDOM
                if (!pg_strong_random(&iseed, sizeof(iseed)))
+#endif
                {
-                       fprintf(stderr, "cannot seed random from a strong source\n");
-                       exit(1);
+                       fprintf(stderr,
+                                       "cannot seed random from a strong source, none available: "
+                                       "use \"time\" or an unsigned integer value.\n");
+                       return false;
                }
        }
        else
@@ -4698,9 +4702,9 @@ set_random_seed(const char *seed, const char *origin)
                if (sscanf(seed, "%u%c", &iseed, &garbage) != 1)
                {
                        fprintf(stderr,
-                                       "error while scanning '%s' from %s, expecting an unsigned integer, 'time' or 'rand'\n",
-                                       seed, origin);
-                       exit(1);
+                                       "unrecognized random seed option \"%s\": expecting an unsigned integer, \"time\" or \"rand\"\n",
+                                       seed);
+                       return false;
                }
        }
 
@@ -4709,6 +4713,7 @@ set_random_seed(const char *seed, const char *origin)
        srandom(iseed);
        /* no precision loss: 32 bit unsigned int cast to 64 bit int */
        random_seed = iseed;
+       return true;
 }
 
 
@@ -4823,7 +4828,11 @@ main(int argc, char **argv)
        memset(state, 0, sizeof(CState));
 
        /* set random seed early, because it may be used while parsing scripts. */
-       set_random_seed(getenv("PGBENCH_RANDOM_SEED"), "PGBENCH_RANDOM_SEED environment variable");
+       if (!set_random_seed(getenv("PGBENCH_RANDOM_SEED")))
+       {
+               fprintf(stderr, "error while setting random seed from PGBENCH_RANDOM_SEED environment variable\n");
+               exit(1);
+       }
 
        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)
        {
@@ -5099,7 +5108,11 @@ main(int argc, char **argv)
                                break;
                        case 9:                         /* random-seed */
                                benchmarking_option_set = true;
-                               set_random_seed(optarg, "--random-seed option");
+                               if (!set_random_seed(optarg))
+                               {
+                                       fprintf(stderr, "error while setting random seed from --random-seed option\n");
+                                       exit(1);
+                               }
                                break;
                        default:
                                fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
index 682bc2280d6b25f3915a48099152b2441929adac..af21f046496922174e7046506a1e75d8293876ee 100644 (file)
@@ -111,7 +111,8 @@ my @options = (
                [qr{unrecognized initialization step},
                 qr{allowed steps are} ] ],
        [ 'bad random seed', '--random-seed=one',
-               [qr{error while scanning 'one' from --random-seed option, expecting an unsigned integer} ] ],
+               [qr{unrecognized random seed option "one": expecting an unsigned integer, "time" or "rand"},
+                qr{error while setting random seed from --random-seed option} ] ],
 
        # loging sub-options
        [   'sampling => log', '--sampling-rate=0.01',