|
|
|
@ -142,7 +142,7 @@ size_t GetThreadCount() { |
|
|
|
|
} |
|
|
|
|
procfs_info process_info; |
|
|
|
|
const int status = |
|
|
|
|
devctl(fd, DCMD_PROC_INFO, &process_info, sizeof(process_info), NULL); |
|
|
|
|
devctl(fd, DCMD_PROC_INFO, &process_info, sizeof(process_info), nullptr); |
|
|
|
|
close(fd); |
|
|
|
|
if (status == EOK) { |
|
|
|
|
return static_cast<size_t>(process_info.num_threads); |
|
|
|
@ -156,7 +156,7 @@ size_t GetThreadCount() { |
|
|
|
|
size_t GetThreadCount() { |
|
|
|
|
struct procentry64 entry; |
|
|
|
|
pid_t pid = getpid(); |
|
|
|
|
int status = getprocs64(&entry, sizeof(entry), NULL, 0, &pid, 1); |
|
|
|
|
int status = getprocs64(&entry, sizeof(entry), nullptr, 0, &pid, 1); |
|
|
|
|
if (status == 1) { |
|
|
|
|
return entry.pi_thcount; |
|
|
|
|
} else { |
|
|
|
@ -234,15 +234,15 @@ void AutoHandle::Reset(HANDLE handle) { |
|
|
|
|
bool AutoHandle::IsCloseable() const { |
|
|
|
|
// Different Windows APIs may use either of these values to represent an
|
|
|
|
|
// invalid handle.
|
|
|
|
|
return handle_ != NULL && handle_ != INVALID_HANDLE_VALUE; |
|
|
|
|
return handle_ != nullptr && handle_ != INVALID_HANDLE_VALUE; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Notification::Notification() |
|
|
|
|
: event_(::CreateEvent(NULL, // Default security attributes.
|
|
|
|
|
TRUE, // Do not reset automatically.
|
|
|
|
|
FALSE, // Initially unset.
|
|
|
|
|
NULL)) { // Anonymous event.
|
|
|
|
|
GTEST_CHECK_(event_.Get() != NULL); |
|
|
|
|
: event_(::CreateEvent(nullptr, // Default security attributes.
|
|
|
|
|
TRUE, // Do not reset automatically.
|
|
|
|
|
FALSE, // Initially unset.
|
|
|
|
|
nullptr)) { // Anonymous event.
|
|
|
|
|
GTEST_CHECK_(event_.Get() != nullptr); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void Notification::Notify() { |
|
|
|
@ -271,7 +271,7 @@ Mutex::~Mutex() { |
|
|
|
|
if (type_ == kDynamic) { |
|
|
|
|
::DeleteCriticalSection(critical_section_); |
|
|
|
|
delete critical_section_; |
|
|
|
|
critical_section_ = NULL; |
|
|
|
|
critical_section_ = nullptr; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -390,15 +390,15 @@ class ThreadWithParamSupport : public ThreadWithParamBase { |
|
|
|
|
DWORD thread_id; |
|
|
|
|
// FIXME: Consider to use _beginthreadex instead.
|
|
|
|
|
HANDLE thread_handle = ::CreateThread( |
|
|
|
|
NULL, // Default security.
|
|
|
|
|
0, // Default stack size.
|
|
|
|
|
nullptr, // Default security.
|
|
|
|
|
0, // Default stack size.
|
|
|
|
|
&ThreadWithParamSupport::ThreadMain, |
|
|
|
|
param, // Parameter to ThreadMainStatic
|
|
|
|
|
0x0, // Default creation flags.
|
|
|
|
|
param, // Parameter to ThreadMainStatic
|
|
|
|
|
0x0, // Default creation flags.
|
|
|
|
|
&thread_id); // Need a valid pointer for the call to work under Win98.
|
|
|
|
|
GTEST_CHECK_(thread_handle != NULL) << "CreateThread failed with error " |
|
|
|
|
<< ::GetLastError() << "."; |
|
|
|
|
if (thread_handle == NULL) { |
|
|
|
|
GTEST_CHECK_(thread_handle != nullptr) |
|
|
|
|
<< "CreateThread failed with error " << ::GetLastError() << "."; |
|
|
|
|
if (thread_handle == nullptr) { |
|
|
|
|
delete param; |
|
|
|
|
} |
|
|
|
|
return thread_handle; |
|
|
|
@ -418,7 +418,7 @@ class ThreadWithParamSupport : public ThreadWithParamBase { |
|
|
|
|
static DWORD WINAPI ThreadMain(void* ptr) { |
|
|
|
|
// Transfers ownership.
|
|
|
|
|
scoped_ptr<ThreadMainParam> param(static_cast<ThreadMainParam*>(ptr)); |
|
|
|
|
if (param->thread_can_start_ != NULL) |
|
|
|
|
if (param->thread_can_start_ != nullptr) |
|
|
|
|
param->thread_can_start_->WaitForNotification(); |
|
|
|
|
param->runnable_->Run(); |
|
|
|
|
return 0; |
|
|
|
@ -556,18 +556,17 @@ class ThreadLocalRegistryImpl { |
|
|
|
|
HANDLE thread = ::OpenThread(SYNCHRONIZE | THREAD_QUERY_INFORMATION, |
|
|
|
|
FALSE, |
|
|
|
|
thread_id); |
|
|
|
|
GTEST_CHECK_(thread != NULL); |
|
|
|
|
GTEST_CHECK_(thread != nullptr); |
|
|
|
|
// We need to pass a valid thread ID pointer into CreateThread for it
|
|
|
|
|
// to work correctly under Win98.
|
|
|
|
|
DWORD watcher_thread_id; |
|
|
|
|
HANDLE watcher_thread = ::CreateThread( |
|
|
|
|
NULL, // Default security.
|
|
|
|
|
0, // Default stack size
|
|
|
|
|
nullptr, // Default security.
|
|
|
|
|
0, // Default stack size
|
|
|
|
|
&ThreadLocalRegistryImpl::WatcherThreadFunc, |
|
|
|
|
reinterpret_cast<LPVOID>(new ThreadIdAndHandle(thread_id, thread)), |
|
|
|
|
CREATE_SUSPENDED, |
|
|
|
|
&watcher_thread_id); |
|
|
|
|
GTEST_CHECK_(watcher_thread != NULL); |
|
|
|
|
CREATE_SUSPENDED, &watcher_thread_id); |
|
|
|
|
GTEST_CHECK_(watcher_thread != nullptr); |
|
|
|
|
// Give the watcher thread the same priority as ours to avoid being
|
|
|
|
|
// blocked by it.
|
|
|
|
|
::SetThreadPriority(watcher_thread, |
|
|
|
@ -687,7 +686,7 @@ void RE::Init(const char* regex) { |
|
|
|
|
// Returns true iff ch appears anywhere in str (excluding the
|
|
|
|
|
// terminating '\0' character).
|
|
|
|
|
bool IsInSet(char ch, const char* str) { |
|
|
|
|
return ch != '\0' && strchr(str, ch) != NULL; |
|
|
|
|
return ch != '\0' && strchr(str, ch) != nullptr; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Returns true iff ch belongs to the given classification. Unlike
|
|
|
|
@ -741,7 +740,7 @@ static std::string FormatRegexSyntaxError(const char* regex, int index) { |
|
|
|
|
// Generates non-fatal failures and returns false if regex is invalid;
|
|
|
|
|
// otherwise returns true.
|
|
|
|
|
bool ValidateRegex(const char* regex) { |
|
|
|
|
if (regex == NULL) { |
|
|
|
|
if (regex == nullptr) { |
|
|
|
|
// FIXME: fix the source file location in the
|
|
|
|
|
// assertion failures to match where the regex is used in user
|
|
|
|
|
// code.
|
|
|
|
@ -867,8 +866,7 @@ bool MatchRegexAtHead(const char* regex, const char* str) { |
|
|
|
|
// exponential with respect to the regex length + the string length,
|
|
|
|
|
// but usually it's must faster (often close to linear).
|
|
|
|
|
bool MatchRegexAnywhere(const char* regex, const char* str) { |
|
|
|
|
if (regex == NULL || str == NULL) |
|
|
|
|
return false; |
|
|
|
|
if (regex == nullptr || str == nullptr) return false; |
|
|
|
|
|
|
|
|
|
if (*regex == '^') |
|
|
|
|
return MatchRegexAtHead(regex + 1, str); |
|
|
|
@ -901,8 +899,8 @@ bool RE::PartialMatch(const char* str, const RE& re) { |
|
|
|
|
|
|
|
|
|
// Initializes an RE from its string representation.
|
|
|
|
|
void RE::Init(const char* regex) { |
|
|
|
|
pattern_ = full_pattern_ = NULL; |
|
|
|
|
if (regex != NULL) { |
|
|
|
|
pattern_ = full_pattern_ = nullptr; |
|
|
|
|
if (regex != nullptr) { |
|
|
|
|
pattern_ = posix::StrDup(regex); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -1259,8 +1257,8 @@ bool BoolFromGTestEnv(const char* flag, bool default_value) { |
|
|
|
|
#else |
|
|
|
|
const std::string env_var = FlagToEnvVar(flag); |
|
|
|
|
const char* const string_value = posix::GetEnv(env_var.c_str()); |
|
|
|
|
return string_value == NULL ? |
|
|
|
|
default_value : strcmp(string_value, "0") != 0; |
|
|
|
|
return string_value == nullptr ? default_value |
|
|
|
|
: strcmp(string_value, "0") != 0; |
|
|
|
|
#endif // defined(GTEST_GET_BOOL_FROM_ENV_)
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -1273,7 +1271,7 @@ Int32 Int32FromGTestEnv(const char* flag, Int32 default_value) { |
|
|
|
|
#else |
|
|
|
|
const std::string env_var = FlagToEnvVar(flag); |
|
|
|
|
const char* const string_value = posix::GetEnv(env_var.c_str()); |
|
|
|
|
if (string_value == NULL) { |
|
|
|
|
if (string_value == nullptr) { |
|
|
|
|
// The environment variable is not set.
|
|
|
|
|
return default_value; |
|
|
|
|
} |
|
|
|
@ -1316,7 +1314,7 @@ const char* StringFromGTestEnv(const char* flag, const char* default_value) { |
|
|
|
|
#else |
|
|
|
|
const std::string env_var = FlagToEnvVar(flag); |
|
|
|
|
const char* const value = posix::GetEnv(env_var.c_str()); |
|
|
|
|
return value == NULL ? default_value : value; |
|
|
|
|
return value == nullptr ? default_value : value; |
|
|
|
|
#endif // defined(GTEST_GET_STRING_FROM_ENV_)
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|