aboutsummaryrefslogtreecommitdiff
path: root/src/os.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2019-08-21 12:29:42 -0400
committerGitHub <noreply@github.com>2019-08-21 12:29:42 -0400
commitec7d7a5b14540ea3b2bab9f11318630338467965 (patch)
tree857f6dea4affaa4858ef00ba543ab24e008c2efc /src/os.cpp
parent81c441f8855d4c58f0b2ff86d3d007cf0bf395d3 (diff)
parent59e2c87b4b89bf16321b499124d568ac5a19c300 (diff)
downloadzig-ec7d7a5b14540ea3b2bab9f11318630338467965.tar.gz
zig-ec7d7a5b14540ea3b2bab9f11318630338467965.zip
Merge pull request #2991 from emekoi/mingw-ci
mingw improvements
Diffstat (limited to 'src/os.cpp')
-rw-r--r--src/os.cpp30
1 files changed, 15 insertions, 15 deletions
diff --git a/src/os.cpp b/src/os.cpp
index 5fa70bd260..6c1a2581df 100644
--- a/src/os.cpp
+++ b/src/os.cpp
@@ -1125,29 +1125,27 @@ Error os_get_cwd(Buf *out_cwd) {
#endif
}
-#if defined(ZIG_OS_WINDOWS)
#define is_wprefix(s, prefix) \
(wcsncmp((s), (prefix), sizeof(prefix) / sizeof(WCHAR) - 1) == 0)
-static bool is_stderr_cyg_pty(void) {
- HANDLE stderr_handle = GetStdHandle(STD_ERROR_HANDLE);
- if (stderr_handle == INVALID_HANDLE_VALUE)
+bool ATTRIBUTE_MUST_USE os_is_cygwin_pty(int fd) {
+#if defined(ZIG_OS_WINDOWS)
+ HANDLE handle = (HANDLE)_get_osfhandle(fd);
+
+ // Cygwin/msys's pty is a pipe.
+ if (handle == INVALID_HANDLE_VALUE || GetFileType(handle) != FILE_TYPE_PIPE) {
return false;
+ }
int size = sizeof(FILE_NAME_INFO) + sizeof(WCHAR) * MAX_PATH;
- FILE_NAME_INFO *nameinfo;
WCHAR *p = NULL;
- // Cygwin/msys's pty is a pipe.
- if (GetFileType(stderr_handle) != FILE_TYPE_PIPE) {
- return 0;
- }
- nameinfo = (FILE_NAME_INFO *)allocate<char>(size);
+ FILE_NAME_INFO *nameinfo = (FILE_NAME_INFO *)allocate<char>(size);
if (nameinfo == NULL) {
- return 0;
+ return false;
}
// Check the name of the pipe:
// '\{cygwin,msys}-XXXXXXXXXXXXXXXX-ptyN-{from,to}-master'
- if (GetFileInformationByHandleEx(stderr_handle, FileNameInfo, nameinfo, size)) {
+ if (GetFileInformationByHandleEx(handle, FileNameInfo, nameinfo, size)) {
nameinfo->FileName[nameinfo->FileNameLength / sizeof(WCHAR)] = L'\0';
p = nameinfo->FileName;
if (is_wprefix(p, L"\\cygwin-")) { /* Cygwin */
@@ -1180,12 +1178,14 @@ static bool is_stderr_cyg_pty(void) {
}
free(nameinfo);
return (p != NULL);
-}
+#else
+ return false;
#endif
+}
bool os_stderr_tty(void) {
#if defined(ZIG_OS_WINDOWS)
- return _isatty(_fileno(stderr)) != 0 || is_stderr_cyg_pty();
+ return _isatty(fileno(stderr)) != 0 || os_is_cygwin_pty(fileno(stderr));
#elif defined(ZIG_OS_POSIX)
return isatty(STDERR_FILENO) != 0;
#else
@@ -1486,7 +1486,7 @@ WORD original_console_attributes = FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BL
void os_stderr_set_color(TermColor color) {
#if defined(ZIG_OS_WINDOWS)
- if (is_stderr_cyg_pty()) {
+ if (os_stderr_tty()) {
set_color_posix(color);
return;
}