diff options
author | vslashg <gfalcon@google.com> | 2020-03-20 20:15:24 -0400 |
---|---|---|
committer | vslashg <gfalcon@google.com> | 2020-03-20 20:15:24 -0400 |
commit | dbe804f986210eab13de21629a8eb1e3be62c9bb (patch) | |
tree | 10bb7479ce7fe798bf8ad7dfe2e716a73bf191cf | |
parent | 482ac6ee63429af2aa9c44f4e6427873fb68fb1f (diff) | |
parent | a1b0173df92bbbad69254f929e341f8dbf1cc708 (diff) | |
download | googletest-dbe804f986210eab13de21629a8eb1e3be62c9bb.tar.gz googletest-dbe804f986210eab13de21629a8eb1e3be62c9bb.tar.bz2 googletest-dbe804f986210eab13de21629a8eb1e3be62c9bb.zip |
Merge pull request #2746 from Romain-Geissler-1A:master
PiperOrigin-RevId: 302045808
-rw-r--r-- | googletest/include/gtest/internal/gtest-port.h | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/googletest/include/gtest/internal/gtest-port.h b/googletest/include/gtest/internal/gtest-port.h index 60ff4716..21fcf822 100644 --- a/googletest/include/gtest/internal/gtest-port.h +++ b/googletest/include/gtest/internal/gtest-port.h @@ -252,6 +252,8 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> + +#include <cerrno> #include <cstdint> #include <limits> #include <type_traits> @@ -1960,16 +1962,16 @@ namespace posix { typedef struct _stat StatStruct; # ifdef __BORLANDC__ -inline int IsATTY(int fd) { return isatty(fd); } +inline int DoIsATTY(int fd) { return isatty(fd); } inline int StrCaseCmp(const char* s1, const char* s2) { return stricmp(s1, s2); } inline char* StrDup(const char* src) { return strdup(src); } # else // !__BORLANDC__ # if GTEST_OS_WINDOWS_MOBILE -inline int IsATTY(int /* fd */) { return 0; } +inline int DoIsATTY(int /* fd */) { return 0; } # else -inline int IsATTY(int fd) { return _isatty(fd); } +inline int DoIsATTY(int fd) { return _isatty(fd); } # endif // GTEST_OS_WINDOWS_MOBILE inline int StrCaseCmp(const char* s1, const char* s2) { return _stricmp(s1, s2); @@ -1994,7 +1996,7 @@ inline bool IsDir(const StatStruct& st) { typedef struct stat StatStruct; inline int FileNo(FILE* file) { return fileno(file); } -inline int IsATTY(int fd) { return isatty(fd); } +inline int DoIsATTY(int fd) { return isatty(fd); } inline int Stat(const char* path, StatStruct* buf) { // stat function not implemented on ESP8266 return 0; @@ -2011,7 +2013,7 @@ inline bool IsDir(const StatStruct& st) { return S_ISDIR(st.st_mode); } typedef struct stat StatStruct; inline int FileNo(FILE* file) { return fileno(file); } -inline int IsATTY(int fd) { return isatty(fd); } +inline int DoIsATTY(int fd) { return isatty(fd); } inline int Stat(const char* path, StatStruct* buf) { return stat(path, buf); } inline int StrCaseCmp(const char* s1, const char* s2) { return strcasecmp(s1, s2); @@ -2022,6 +2024,17 @@ inline bool IsDir(const StatStruct& st) { return S_ISDIR(st.st_mode); } #endif // GTEST_OS_WINDOWS +inline int IsATTY(int fd) { + // DoIsATTY might change errno (for example ENOTTY in case you redirect stdout + // to a file on Linux), which is unexpected, so save the previous value, and + // restore it after the call. + int savedErrno = errno; + int isAttyValue = DoIsATTY(fd); + errno = savedErrno; + + return isAttyValue; +} + // Functions deprecated by MSVC 8.0. GTEST_DISABLE_MSC_DEPRECATED_PUSH_() |