libstdc++: Make "nonexistent" paths less predictable in filesystem tests
authorJonathan Wakely <jwakely@redhat.com>
Fri, 12 Feb 2021 15:13:02 +0000 (15:13 +0000)
committerJonathan Wakely <jwakely@redhat.com>
Fri, 12 Feb 2021 15:13:02 +0000 (15:13 +0000)
The helper function for creating new paths doesn't work well on Windows,
because the PID of a process started by Wine is very consistent and so
the same path gets created each time.

libstdc++-v3/ChangeLog:

* testsuite/util/testsuite_fs.h (nonexistent_path): Add
random number to the path.

libstdc++-v3/testsuite/util/testsuite_fs.h

index 4cda0eefeaf5d7b12548081ddeccb668cbb7c21c..e4d04dd7799e3fb8ba0c9d8199699020b7ba61b6 100644 (file)
@@ -34,8 +34,13 @@ namespace test_fs = std::experimental::filesystem;
 #include <fstream>
 #include <string>
 #include <cstdio>
-#include <stdlib.h>
-#include <unistd.h>
+
+#if defined(_GNU_SOURCE) || _XOPEN_SOURCE >= 500 || _POSIX_C_SOURCE >= 200112L
+#include <stdlib.h> // mkstemp
+#include <unistd.h> // unlink, close
+#else
+#include <random>   // std::random_device
+#endif
 
 namespace __gnu_test
 {
@@ -121,13 +126,13 @@ namespace __gnu_test
     if (file.length() > 64)
       file.resize(64);
     char buf[128];
-    static int counter;
+    static unsigned counter = std::random_device{}();
 #if _GLIBCXX_USE_C99_STDIO
     std::snprintf(buf, 128,
 #else
     std::sprintf(buf,
 #endif
-      "filesystem-test.%d.%lu-%s", counter++, (unsigned long) ::getpid(),
+      "filesystem-test.%u.%lu-%s", counter++, (unsigned long) ::getpid(),
       file.c_str());
     p = buf;
 #endif