bpo-45919: Use WinAPI GetFileType() in is_valid_fd() (GH-30082)

This commit is contained in:
Dong-hee Na 2021-12-13 21:57:59 +09:00 committed by GitHub
parent e09705f58f
commit 191c431de7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -2182,23 +2182,21 @@ is_valid_fd(int fd)
#if defined(F_GETFD) && ( \
defined(__linux__) || \
defined(__APPLE__) || \
defined(MS_WINDOWS) || \
defined(__wasm__))
int res;
_Py_BEGIN_SUPPRESS_IPH
res = fcntl(fd, F_GETFD);
_Py_END_SUPPRESS_IPH
return res >= 0;
#elif defined(__linux__) || defined(MS_WINDOWS)
int fd2;
_Py_BEGIN_SUPPRESS_IPH
fd2 = dup(fd);
return fcntl(fd, F_GETFD) >= 0;
#elif defined(__linux__)
int fd2 = dup(fd);
if (fd2 >= 0) {
close(fd2);
}
_Py_END_SUPPRESS_IPH
return (fd2 >= 0);
#elif defined(MS_WINDOWS)
HANDLE hfile;
_Py_BEGIN_SUPPRESS_IPH
hfile = (HANDLE)_get_osfhandle(fd);
_Py_END_SUPPRESS_IPH
return (hfile != INVALID_HANDLE_VALUE
&& GetFileType(hfile) != FILE_TYPE_UNKNOWN);
#else
struct stat st;
return (fstat(fd, &st) == 0);