]> sourceware.org Git - newlib-cygwin.git/commitdiff
Cygwin: fhandler_disk_file::fstatvfs: refactor
authorKen Brown <kbrown@cornell.edu>
Fri, 24 Jan 2020 21:02:57 +0000 (16:02 -0500)
committerKen Brown <kbrown@cornell.edu>
Tue, 28 Jan 2020 19:05:13 +0000 (14:05 -0500)
Define a new method fhandler_base::fstatvfs_by_handle, extracted from
fhandler_disk_file::fstatvfs, which gets the statvfs information when
a handle is available.

This will be used in future commits for special files that have been
opened with O_PATH.

winsup/cygwin/fhandler.h
winsup/cygwin/fhandler_disk_file.cc

index 5d0c579f8d4cb5e0e38c6617435227645461a77c..80a78d14ce6c2b97cba2facc49b11038d6f7e934 100644 (file)
@@ -392,6 +392,7 @@ private:
   int __reg2 fstat_by_name (struct stat *buf);
 public:
   virtual int __reg2 fstatvfs (struct statvfs *buf);
+  int __reg2 fstatvfs_by_handle (HANDLE h, struct statvfs *buf);
   int __reg2 utimens_fs (const struct timespec *);
   virtual int __reg1 fchmod (mode_t mode);
   virtual int __reg2 fchown (uid_t uid, gid_t gid);
index d9213d7418e72eae076f625deff15f04850a50e8..19a1c5ac1270922b5220dd107ec7d0dd2cbc8b17 100644 (file)
@@ -600,9 +600,7 @@ int __reg2
 fhandler_disk_file::fstatvfs (struct statvfs *sfs)
 {
   int ret = -1, opened = 0;
-  NTSTATUS status;
   IO_STATUS_BLOCK io;
-  FILE_FS_FULL_SIZE_INFORMATION full_fsi;
   /* We must not use the stat handle here, even if it exists.  The handle
      has been opened with FILE_OPEN_REPARSE_POINT, thus, in case of a volume
      mount point, it points to the FS of the mount point, rather than to the
@@ -630,6 +628,22 @@ fhandler_disk_file::fstatvfs (struct statvfs *sfs)
        }
     }
 
+  ret = fstatvfs_by_handle (fh, sfs);
+out:
+  if (opened)
+    NtClose (fh);
+  syscall_printf ("%d = fstatvfs(%s, %p)", ret, get_name (), sfs);
+  return ret;
+}
+
+int __reg2
+fhandler_base::fstatvfs_by_handle (HANDLE fh, struct statvfs *sfs)
+{
+  int ret = -1;
+  NTSTATUS status;
+  IO_STATUS_BLOCK io;
+  FILE_FS_FULL_SIZE_INFORMATION full_fsi;
+
   sfs->f_files = ULONG_MAX;
   sfs->f_ffree = ULONG_MAX;
   sfs->f_favail = ULONG_MAX;
@@ -688,10 +702,6 @@ fhandler_disk_file::fstatvfs (struct statvfs *sfs)
     debug_printf ("%y = NtQueryVolumeInformationFile"
                  "(%S, FileFsFullSizeInformation)", 
                  status, pc.get_nt_native_path ());
-out:
-  if (opened)
-    NtClose (fh);
-  syscall_printf ("%d = fstatvfs(%s, %p)", ret, get_name (), sfs);
   return ret;
 }
 
This page took 0.038706 seconds and 5 git commands to generate.