summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/fhandler_disk_file.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/fhandler_disk_file.cc')
-rw-r--r--winsup/cygwin/fhandler_disk_file.cc7
1 files changed, 6 insertions, 1 deletions
diff --git a/winsup/cygwin/fhandler_disk_file.cc b/winsup/cygwin/fhandler_disk_file.cc
index ff14a053a..ca9f1fab3 100644
--- a/winsup/cygwin/fhandler_disk_file.cc
+++ b/winsup/cygwin/fhandler_disk_file.cc
@@ -148,11 +148,16 @@ fhandler_base::fstat_by_handle (struct __stat64 *buf)
BOOL res = GetFileInformationByHandle (get_handle (), &local);
debug_printf ("%d = GetFileInformationByHandle (%s, %d)",
res, get_win32_name (), get_handle ());
- /* GetFileInformationByHandle will fail if it's given stdio handle or pipe*/
+ /* GetFileInformationByHandle will fail if it's given stdio handle or pipe.
+ It also fails on 9x when trying to access directories on shares. */
if (!res)
{
memset (&local, 0, sizeof (local));
local.nFileSizeLow = GetFileSize (get_handle (), &local.nFileSizeHigh);
+ /* Even GetFileSize fails on 9x when trying to access directories
+ on shares. In this case reset filesize to 0. */
+ if (local.nFileSizeLow == 0xffffffff && GetLastError ())
+ local.nFileSizeLow = 0;
}
return fstat_helper (buf,