diff --git a/test/gtest-extra.h b/test/gtest-extra.h index f5649b71..619b6f22 100644 --- a/test/gtest-extra.h +++ b/test/gtest-extra.h @@ -101,18 +101,21 @@ std::string FormatSystemErrorMessage(int error_code, fmt::StringRef message); #ifndef FMT_POSIX # ifdef _WIN32 // Fix warnings about deprecated symbols. -# define FMT_POSIX(name) _##name +# define FMT_POSIX(call) _##call # else -# define FMT_POSIX(name) name +# define FMT_POSIX(call) call # endif #endif -#ifndef FMT_POSIX_CALL +#ifdef FMT_SYSTEM +# define FMT_POSIX_CALL(call) FMT_SYSTEM(call) +#else +# define FMT_SYSTEM(call) call # ifdef _WIN32 // Fix warnings about deprecated symbols. -# define FMT_POSIX_CALL(name) ::_##name +# define FMT_POSIX_CALL(call) ::_##call # else -# define FMT_POSIX_CALL(name) ::name +# define FMT_POSIX_CALL(call) ::call # endif #endif diff --git a/test/posix-test.cc b/test/posix-test.cc index 3635d929..dd09160f 100644 --- a/test/posix-test.cc +++ b/test/posix-test.cc @@ -30,6 +30,10 @@ #include #include +#ifdef _WIN32 +# include +#endif + #include "gtest-extra.h" namespace { @@ -42,6 +46,7 @@ int fileno_count; int read_count; int write_count; int pipe_count; +int fclose_count; } #define EMULATE_EINTR(func, error_result) \ @@ -102,10 +107,22 @@ test::ssize_t test::write(int fildes, const void *buf, test::size_t nbyte) { return ::write(fildes, buf, nbyte); } +#ifndef _WIN32 int test::pipe(int fildes[2]) { EMULATE_EINTR(pipe, -1); return ::pipe(fildes); } +#else +int test::pipe(int *pfds, unsigned psize, int textmode) { + EMULATE_EINTR(pipe, -1); + return _pipe(fildes, 256, O_BINARY); +} +#endif + +int test::fclose(FILE *stream) { + EMULATE_EINTR(fclose, EOF); + return ::fclose(stream); +} #ifndef _WIN32 # define EXPECT_RETRY(statement, func, message) \ diff --git a/test/posix-test.h b/test/posix-test.h index 5ae30ecd..3afd7dc6 100644 --- a/test/posix-test.h +++ b/test/posix-test.h @@ -56,10 +56,16 @@ int fileno(FILE *stream); ssize_t read(int fildes, void *buf, size_t nbyte); ssize_t write(int fildes, const void *buf, size_t nbyte); +#ifndef _WIN32 int pipe(int fildes[2]); +#else +int pipe(int *pfds, unsigned psize, int textmode); +#endif + +int fclose(FILE *stream); } // namespace test -#define FMT_POSIX_CALL(call) test::call +#define FMT_SYSTEM(call) test::call #endif // FMT_POSIX_TEST_H