summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--winsup/cygwin/ChangeLog5
-rw-r--r--winsup/cygwin/fhandler_disk_file.cc14
2 files changed, 16 insertions, 3 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 2db737cdf..b0f990c8d 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,8 @@
+2004-03-23 Corinna Vinschen <corinna@vinschen.de>
+
+ * fhandler_disk_file.cc (fhandler_base::fstat_fs): Use created
+ handle regardless of nohandle state. Clean up afterwards.
+
2004-03-23 Gerd Spalink <Gerd.Spalink@t-online.de>
* autoload.cc: Load eight more functions for waveIn support.
diff --git a/winsup/cygwin/fhandler_disk_file.cc b/winsup/cygwin/fhandler_disk_file.cc
index fb707163e..8661445a1 100644
--- a/winsup/cygwin/fhandler_disk_file.cc
+++ b/winsup/cygwin/fhandler_disk_file.cc
@@ -201,13 +201,21 @@ fhandler_base::fstat_fs (struct __stat64 *buf)
oret = open_fs (open_flags, 0);
}
- if (!oret || get_nohandle ())
- res = fstat_by_name (buf);
- else
+ if (oret)
{
+ /* We now have a valid handle, regardless of the "nohandle" state.
+ Since fhandler_base::open only calls CloseHandle if !get_nohandle,
+ we have to set it to false before calling close_fs and restore
+ the state afterwards. */
res = fstat_by_handle (buf);
+ bool nohandle = get_nohandle ();
+ set_nohandle (false);
close_fs ();
+ set_nohandle (nohandle);
+ set_io_handle (NULL);
}
+ else
+ res = fstat_by_name (buf);
return res;
}