summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/fhandler.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/fhandler.cc')
-rw-r--r--winsup/cygwin/fhandler.cc15
1 files changed, 15 insertions, 0 deletions
diff --git a/winsup/cygwin/fhandler.cc b/winsup/cygwin/fhandler.cc
index 864a4e66e..f92e844c0 100644
--- a/winsup/cygwin/fhandler.cc
+++ b/winsup/cygwin/fhandler.cc
@@ -15,6 +15,7 @@ details. */
#include <sys/cygwin.h>
#include <sys/uio.h>
#include <sys/acl.h>
+#include <sys/statvfs.h>
#include <signal.h>
#include "cygerrno.h"
#include "perprocess.h"
@@ -486,6 +487,10 @@ fhandler_base::open (int flags, mode_t mode)
switch (query_open ())
{
case query_read_control:
+ access = READ_CONTROL;
+ create_options = FILE_OPEN_FOR_BACKUP_INTENT;
+ break;
+ case query_read_attributes:
access = READ_CONTROL | FILE_READ_ATTRIBUTES;
create_options = FILE_OPEN_FOR_BACKUP_INTENT;
break;
@@ -1144,6 +1149,16 @@ fhandler_base::fstat (struct __stat64 *buf)
return 0;
}
+int __stdcall
+fhandler_base::fstatvfs (struct statvfs *sfs)
+{
+ /* If we hit this base implementation, it's some device in /dev.
+ Just call statvfs on /dev for simplicity. */
+ path_conv pc ("/dev");
+ fhandler_disk_file fh (pc);
+ return fh.fstatvfs (sfs);
+}
+
void
fhandler_base::init (HANDLE f, DWORD a, mode_t bin)
{