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_() | 
