* fhandler_disk_file.cc (fhandler_base::fstat_by_handle): Fetch number
of links and inode number only if path has good inodes. (fhandler_base::fstat_by_name): Fetch inode number only if path has good inodes.
This commit is contained in:
parent
f859880a5b
commit
421ff3ff77
|
@ -1,3 +1,10 @@
|
|||
2010-09-15 Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* fhandler_disk_file.cc (fhandler_base::fstat_by_handle): Fetch number
|
||||
of links and inode number only if path has good inodes.
|
||||
(fhandler_base::fstat_by_name): Fetch inode number only if path has
|
||||
good inodes.
|
||||
|
||||
2010-09-14 Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* path.cc (symlink_info::check): Make sure AllocationSize and EndOfFile
|
||||
|
|
|
@ -356,25 +356,30 @@ fhandler_base::fstat_by_handle (struct __stat64 *buf)
|
|||
NTSTATUS status = 0;
|
||||
IO_STATUS_BLOCK io;
|
||||
|
||||
status = NtQueryInformationFile (h, &io, &fsi, sizeof fsi,
|
||||
FileStandardInformation);
|
||||
if (!NT_SUCCESS (status))
|
||||
if (!pc.hasgood_inode ())
|
||||
fsi.NumberOfLinks = 1;
|
||||
else
|
||||
{
|
||||
debug_printf ("%p = NtQueryInformationFile(%S, FileStandardInformation)",
|
||||
status, pc.get_nt_native_path ());
|
||||
return -1;
|
||||
}
|
||||
if (!ino && pc.hasgood_inode ())
|
||||
{
|
||||
status = NtQueryInformationFile (h, &io, &fii, sizeof fii,
|
||||
FileInternalInformation);
|
||||
status = NtQueryInformationFile (h, &io, &fsi, sizeof fsi,
|
||||
FileStandardInformation);
|
||||
if (!NT_SUCCESS (status))
|
||||
{
|
||||
debug_printf ("%p = NtQueryInformationFile(%S, FileInternalInformation)",
|
||||
debug_printf ("%p = NtQueryInformationFile(%S, FileStandardInformation)",
|
||||
status, pc.get_nt_native_path ());
|
||||
return -1;
|
||||
}
|
||||
ino = fii.FileId.QuadPart;
|
||||
if (!ino)
|
||||
{
|
||||
status = NtQueryInformationFile (h, &io, &fii, sizeof fii,
|
||||
FileInternalInformation);
|
||||
if (!NT_SUCCESS (status))
|
||||
{
|
||||
debug_printf ("%p = NtQueryInformationFile(%S, FileInternalInformation)",
|
||||
status, pc.get_nt_native_path ());
|
||||
return -1;
|
||||
}
|
||||
ino = fii.FileId.QuadPart;
|
||||
}
|
||||
}
|
||||
return fstat_helper (buf, fsi.NumberOfLinks);
|
||||
}
|
||||
|
@ -393,7 +398,8 @@ fhandler_base::fstat_by_name (struct __stat64 *buf)
|
|||
WCHAR buf[NAME_MAX + 1];
|
||||
} fdi_buf;
|
||||
|
||||
if (!ino && wincap.has_fileid_dirinfo () && !pc.has_buggy_fileid_dirinfo ())
|
||||
if (!ino && pc.hasgood_inode ()
|
||||
&& wincap.has_fileid_dirinfo () && !pc.has_buggy_fileid_dirinfo ())
|
||||
{
|
||||
RtlSplitUnicodePath (pc.get_nt_native_path (), &dirname, &basename);
|
||||
InitializeObjectAttributes (&attr, &dirname, pc.objcaseinsensitive (),
|
||||
|
|
Loading…
Reference in New Issue