summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTamar Christina <tamar@zhox.com>2019-11-20 09:32:44 +0000
committerBen Gamari <ben@smart-cactus.org>2020-07-15 16:41:02 -0400
commit4b69004f3c9518f59a8f0b6f7f77aa92bea85adf (patch)
tree34bbef2d1b3b46c4c639e2c25f4283507d2b17a0
parent01423fd205809e884fd9b7b69286108ca06a0d98 (diff)
downloadhaskell-4b69004f3c9518f59a8f0b6f7f77aa92bea85adf.tar.gz
winio: fix FileSize unstat-able handles
-rw-r--r--libraries/base/cbits/IOutils.c14
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);
}
+