Simplifies implementation by defining a POSIX portability layer; adds the death test style flag to --help.

This commit is contained in:
zhanyong.wan
2009-03-26 19:03:47 +00:00
parent f3c6efd8d7
commit 3c7bbf5b46
12 changed files with 184 additions and 268 deletions

View File

@@ -48,7 +48,6 @@
#if GTEST_OS_WINDOWS
#include <windows.h>
#else
#include <unistd.h>
#include <sys/mman.h>
#include <sys/wait.h>
#endif // GTEST_OS_WINDOWS
@@ -205,15 +204,7 @@ void DeathTestAbort(const String& message) {
const InternalRunDeathTestFlag* const flag =
GetUnitTestImpl()->internal_run_death_test_flag();
if (flag != NULL) {
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable: 4996) // Suppresses deprecation warning
// about POSIX functions in MSVC.
#endif // _MSC_VER
FILE* parent = fdopen(flag->write_fd(), "w");
#ifdef _MSC_VER
#pragma warning(pop)
#endif // _MSC_VER
FILE* parent = posix::fdopen(flag->write_fd(), "w");
fputc(kDeathTestInternalError, parent);
fprintf(parent, "%s", message.c_str());
fflush(parent);
@@ -258,15 +249,7 @@ void DeathTestAbort(const String& message) {
// Returns the message describing the last system error in errno.
String GetLastErrnoDescription() {
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable: 4996) // Suppresses deprecation warning
// about POSIX functions in MSVC.
#endif // _MSC_VER
return String(errno == 0 ? "" : strerror(errno));
#ifdef _MSC_VER
#pragma warning(pop)
#endif // _MSC_VER
return String(errno == 0 ? "" : posix::strerror(errno));
}
// This is called from a death test parent process to read a failure
@@ -279,15 +262,7 @@ static void FailFromInternalError(int fd) {
int num_read;
do {
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable: 4996) // Suppresses deprecation warning
// about POSIX functions in MSVC.
#endif // _MSC_VER
while ((num_read = static_cast<int>(read(fd, buffer, 255))) > 0) {
#ifdef _MSC_VER
#pragma warning(pop)
#endif // _MSC_VER
while ((num_read = posix::read(fd, buffer, 255)) > 0) {
buffer[num_read] = '\0';
error << buffer;
}
@@ -397,11 +372,6 @@ class DeathTestImpl : public DeathTest {
// member, and closes read_fd_. Outputs diagnostics and terminates in
// case of unexpected codes.
void DeathTestImpl::ReadAndInterpretStatusByte() {
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable: 4996) // Suppresses deprecation warning
// about POSIX functions in MSVC.
#endif // _MSC_VER
char flag;
int bytes_read;
@@ -410,7 +380,7 @@ void DeathTestImpl::ReadAndInterpretStatusByte() {
// its success), so it's okay to call this in the parent before
// the child process has exited.
do {
bytes_read = static_cast<int>(read(read_fd(), &flag, 1));
bytes_read = posix::read(read_fd(), &flag, 1);
} while (bytes_read == -1 && errno == EINTR);
if (bytes_read == 0) {
@@ -437,11 +407,8 @@ void DeathTestImpl::ReadAndInterpretStatusByte() {
Message() << "Read from death test child process failed: "
<< GetLastErrnoDescription());
}
GTEST_DEATH_TEST_CHECK_SYSCALL_(close(read_fd()));
GTEST_DEATH_TEST_CHECK_SYSCALL_(posix::close(read_fd()));
set_read_fd(-1);
#ifdef _MSC_VER
#pragma warning(pop)
#endif // _MSC_VER
}
// Signals that the death test code which should have exited, didn't.
@@ -454,18 +421,8 @@ void DeathTestImpl::Abort(AbortReason reason) {
// to the pipe, then exit.
const char status_ch =
reason == TEST_DID_NOT_DIE ? kDeathTestLived : kDeathTestReturned;
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable: 4996) // Suppresses deprecation warning
// about POSIX functions.
#endif // _MSC_VER
GTEST_DEATH_TEST_CHECK_SYSCALL_(write(write_fd(), &status_ch, 1));
GTEST_DEATH_TEST_CHECK_SYSCALL_(close(write_fd()));
#ifdef _MSC_VER
#pragma warning(pop)
#endif // _MSC_VER
GTEST_DEATH_TEST_CHECK_SYSCALL_(posix::write(write_fd(), &status_ch, 1));
GTEST_DEATH_TEST_CHECK_SYSCALL_(posix::close(write_fd()));
_exit(1); // Exits w/o any normal exit hooks (we were supposed to crash)
}