From c6e14bbd5d404d147504acdd74c3fd17d5ef1088 Mon Sep 17 00:00:00 2001 From: =?utf8?q?P=C3=A1draig=20Brady?= Date: Tue, 10 Jun 2014 23:31:39 +0100 Subject: [PATCH] select,poll: fix console handle check on windows 8 Similarly to commit a008d625 which fixed the obvious problem with isatty(), also apply the fix to the select() and poll() MS-Windows implementations. lib/poll.c (IsConsoleHandle): Change from testing the lower 2 bits of the handle to the more expensive but accurate syscall. lib/select.c: Likewise. --- ChangeLog | 7 +++++++ lib/poll.c | 8 +++++--- lib/select.c | 8 +++++--- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index d2a42feb6c..0e179b1367 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2014-06-10 Pádraig Brady + + select,poll: fix console handle check on windows 8 + lib/poll.c (IsConsoleHandle): Change from testing the lower + 2 bits of the handle to the more expensive but accurate syscall. + lib/select.c: Likewise. + 2014-06-10 Eli Zaretskii select: fix waiting on anonymous pipes on MS-Windows diff --git a/lib/poll.c b/lib/poll.c index e9e9eb9cea..a3e0ab7e7d 100644 --- a/lib/poll.c +++ b/lib/poll.c @@ -70,9 +70,11 @@ #ifdef WINDOWS_NATIVE -/* Optimized test whether a HANDLE refers to a console. - See . */ -#define IsConsoleHandle(h) (((intptr_t) (h) & 3) == 3) +static BOOL IsConsoleHandle (HANDLE h) +{ + DWORD mode; + return GetConsoleMode (h, &mode) != 0; +} static BOOL IsSocketHandle (HANDLE h) diff --git a/lib/select.c b/lib/select.c index a12f37288a..acb67a0e70 100644 --- a/lib/select.c +++ b/lib/select.c @@ -82,9 +82,11 @@ typedef DWORD (WINAPI *PNtQueryInformationFile) #define PIPE_BUF 512 #endif -/* Optimized test whether a HANDLE refers to a console. - See . */ -#define IsConsoleHandle(h) (((intptr_t) (h) & 3) == 3) +static BOOL IsConsoleHandle (HANDLE h) +{ + DWORD mode; + return GetConsoleMode (h, &mode) != 0; +} static BOOL IsSocketHandle (HANDLE h) -- 2.39.5