diff options
-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); } + |