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);
|
int __reg2 fstat_by_name (struct stat *buf);
|
||||||
public:
|
public:
|
||||||
virtual int __reg2 fstatvfs (struct statvfs *buf);
|
virtual int __reg2 fstatvfs (struct statvfs *buf);
|
||||||
|
int __reg2 fstatvfs_by_handle (HANDLE h, struct statvfs *buf);
|
||||||
int __reg2 utimens_fs (const struct timespec *);
|
int __reg2 utimens_fs (const struct timespec *);
|
||||||
virtual int __reg1 fchmod (mode_t mode);
|
virtual int __reg1 fchmod (mode_t mode);
|
||||||
virtual int __reg2 fchown (uid_t uid, gid_t gid);
|
virtual int __reg2 fchown (uid_t uid, gid_t gid);
|
||||||
|
@ -600,9 +600,7 @@ int __reg2
|
|||||||
fhandler_disk_file::fstatvfs (struct statvfs *sfs)
|
fhandler_disk_file::fstatvfs (struct statvfs *sfs)
|
||||||
{
|
{
|
||||||
int ret = -1, opened = 0;
|
int ret = -1, opened = 0;
|
||||||
NTSTATUS status;
|
|
||||||
IO_STATUS_BLOCK io;
|
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
|
/* 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
|
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
|
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_files = ULONG_MAX;
|
||||||
sfs->f_ffree = ULONG_MAX;
|
sfs->f_ffree = ULONG_MAX;
|
||||||
sfs->f_favail = ULONG_MAX;
|
sfs->f_favail = ULONG_MAX;
|
||||||
@ -688,10 +702,6 @@ fhandler_disk_file::fstatvfs (struct statvfs *sfs)
|
|||||||
debug_printf ("%y = NtQueryVolumeInformationFile"
|
debug_printf ("%y = NtQueryVolumeInformationFile"
|
||||||
"(%S, FileFsFullSizeInformation)",
|
"(%S, FileFsFullSizeInformation)",
|
||||||
status, pc.get_nt_native_path ());
|
status, pc.get_nt_native_path ());
|
||||||
out:
|
|
||||||
if (opened)
|
|
||||||
NtClose (fh);
|
|
||||||
syscall_printf ("%d = fstatvfs(%s, %p)", ret, get_name (), sfs);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user