From 3921d12174c1998d9df7a08d036a7fef2d587a64 Mon Sep 17 00:00:00 2001 From: "Miss Islington (bot)" <31488909+miss-islington@users.noreply.github.com> Date: Fri, 23 Aug 2019 12:04:27 -0700 Subject: bpo-37549: os.dup() fails for standard streams on Windows 7 (GH-15389) (cherry picked from commit 5be666010e4df65dc4d831435cc92340ea369f94) Co-authored-by: Zackery Spytz --- Python/fileutils.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'Python') diff --git a/Python/fileutils.c b/Python/fileutils.c index 30ddd037e6..e79e732d1f 100644 --- a/Python/fileutils.c +++ b/Python/fileutils.c @@ -1134,11 +1134,18 @@ set_inheritable(int fd, int inheritable, int raise, int *atomic_flag_works) flags = HANDLE_FLAG_INHERIT; else flags = 0; - if (!SetHandleInformation(handle, HANDLE_FLAG_INHERIT, flags)) { + + /* This check can be removed once support for Windows 7 ends. */ +#define CONSOLE_PSEUDOHANDLE(handle) (((ULONG_PTR)(handle) & 0x3) == 0x3 && \ + GetFileType(handle) == FILE_TYPE_CHAR) + + if (!CONSOLE_PSEUDOHANDLE(handle) && + !SetHandleInformation(handle, HANDLE_FLAG_INHERIT, flags)) { if (raise) PyErr_SetFromWindowsErr(0); return -1; } +#undef CONSOLE_PSEUDOHANDLE return 0; #else -- cgit v1.2.1