ecpbram: refactor seeding logic.
diff --git a/libtrellis/tools/ecpbram.cpp b/libtrellis/tools/ecpbram.cpp
index a1bc205..bffb889 100644
--- a/libtrellis/tools/ecpbram.cpp
+++ b/libtrellis/tools/ecpbram.cpp
@@ -124,11 +124,6 @@
int main(int argc, char **argv)
{
bool verbose = false;
-#ifdef _WIN32
- uint32_t seed_nr = GetCurrentProcessId();
-#else
- uint32_t seed_nr = getpid();
-#endif
namespace po = boost::program_options;
std::string database_folder = get_database_path();;
@@ -197,14 +192,24 @@
return 1;
}
+ // If -s is provided: seed with the given value.
+ // If -s is not provided: seed with the PID and current time, which are unlikely
+ // to repeat simultaneously.
+ uint32_t seed_nr;
if (vm.count("seed")) {
seed_nr = vm.at("seed").as<int>();
if (verbose)
fprintf(stderr, "Seed: %d\n", seed_nr);
+ } else {
+#ifdef _WIN32
+ seed_nr = GetCurrentProcessId();
+#else
+ seed_nr = getpid();
+#endif
}
- x = uint64_t(seed_nr) << 32;
+ x = uint64_t(seed_nr) << 32;
x ^= uint64_t(seed_nr) << 20;
x ^= uint64_t(seed_nr);