diff options
author | Tamar Christina <tamar@zhox.com> | 2019-11-20 09:32:44 +0000 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2020-07-15 16:41:02 -0400 |
commit | 4b69004f3c9518f59a8f0b6f7f77aa92bea85adf (patch) | |
tree | 34bbef2d1b3b46c4c639e2c25f4283507d2b17a0 /libraries/base/cbits/IOutils.c | |
parent | 01423fd205809e884fd9b7b69286108ca06a0d98 (diff) | |
download | haskell-4b69004f3c9518f59a8f0b6f7f77aa92bea85adf.tar.gz |
winio: fix FileSize unstat-able handles
Diffstat (limited to 'libraries/base/cbits/IOutils.c')
-rw-r--r-- | libraries/base/cbits/IOutils.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/libraries/base/cbits/IOutils.c b/libraries/base/cbits/IOutils.c index 5b154e6616..8d3ae35588 100644 --- a/libraries/base/cbits/IOutils.c +++ b/libraries/base/cbits/IOutils.c @@ -370,6 +370,19 @@ int64_t __get_file_pointer (HANDLE hFile) int64_t __get_file_size (HANDLE hFile) { + /* Broken handle can't do stat. */ + if (hFile == INVALID_HANDLE_VALUE) + return false; + + switch (GetFileType (hFile)) + { + case FILE_TYPE_CHAR: + case FILE_TYPE_DISK: + break; + default: + return -1; + } + LARGE_INTEGER ret; if (!GetFileSizeEx(hFile, &ret)) return -1; @@ -468,3 +481,4 @@ bool __set_console_buffer_size (HANDLE hFile, int64_t size) return SetConsoleScreenBufferSize (hFile, sz); } + |