# - 22643565 - llvm's Google test harness needs some attention
# For upstream - maytbe.
--- utils/unittest/googletest/src/gtest-port.cc 2013-11-18 16:57:56.000000000 -0800
+++ utils/unittest/googletest/src/gtest-port.cc 2016-02-01 11:34:55.170628325 -0800
@@ -51,6 +51,13 @@
# include <mach/vm_map.h>
#endif // GTEST_OS_MAC
+#if GTEST_OS_SOLARIS
+# include <strings.h>
+# include <sys/types.h>
+# include <dirent.h>
+# include <unistd.h>
+#endif
+
#include "gtest/gtest-spi.h"
#include "gtest/gtest-message.h"
#include "gtest/internal/gtest-internal.h"
@@ -101,9 +108,36 @@
#else
size_t GetThreadCount() {
+ size_t NumThreads = 1U;
+
+#if GTEST_OS_SOLARIS
+ char lwpdir[PATH_MAX+1];
+ (void) std::memset(lwpdir, 0, sizeof(lwpdir));
+ (void) std::sprintf(lwpdir, "/proc/%i/lwp/", static_cast<int>(getpid()));
+
+ struct dirent *DE;
+ DIR *D = ::opendir(lwpdir);
+ if (!D)
+ return NumThreads;
+
+ while ((DE = ::readdir(D)) != NULL) {
+ if (DE->d_name[0] == '.') {
+ if ((DE->d_name[1] == '\0') ||
+ ((DE->d_name[1] == '.') && (DE->d_name[2] == '\0')))
+ continue;
+ }
+
+ NumThreads =
+ static_cast<size_t>(std::max<int>(NumThreads, std::atoi(DE->d_name)));
+ }
+
+ ::rewinddir(D);
+ ::closedir(D);
+#endif
+
// There's no portable way to detect the number of threads, so we just
// return 0 to indicate that we cannot detect it.
- return 0;
+ return NumThreads;
}
#endif // GTEST_OS_MAC
--- utils/unittest/googletest/include/gtest/internal/gtest-port.h 2014-02-19 07:18:30.000000000 -0800
+++ utils/unittest/googletest/include/gtest/internal/gtest-port.h 2016-02-01 11:15:20.899289723 -0800
@@ -238,7 +238,7 @@
# endif // ANDROID
#elif defined __MVS__
# define GTEST_OS_ZOS 1
-#elif defined(__sun) && defined(__SVR4)
+#elif (defined(__sun) || defined(__sun__)) && defined(__SVR4)
# define GTEST_OS_SOLARIS 1
#elif defined(_AIX)
# define GTEST_OS_AIX 1