summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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);
}
+