Cygwin: fhandler_disk_file::fstatvfs: refactor
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.
This commit is contained in:
parent
74e6e88143
commit
68b7a457f7
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue