* fhandler_disk_file.cc: Set 4th parameter of NtQueryDirectoryFile to

NULL throughout.
	(fhandler_disk_file::facl): Fix a condition so that fstat_by_handle
	is actually used.
	(fhandler_disk_file::readdir): Don't print debug message on a simple
	STATUS_NO_MORE_FILES status code.
This commit is contained in:
Corinna Vinschen 2008-12-18 18:54:25 +00:00
parent dc7dfa3a82
commit a4fc1198a4
2 changed files with 22 additions and 9 deletions

View File

@ -1,3 +1,12 @@
2008-12-18 Corinna Vinschen <corinna@vinschen.de>
* fhandler_disk_file.cc: Set 4th parameter of NtQueryDirectoryFile to
NULL throughout.
(fhandler_disk_file::facl): Fix a condition so that fstat_by_handle
is actually used.
(fhandler_disk_file::readdir): Don't print debug message on a simple
STATUS_NO_MORE_FILES status code.
2008-12-18 Corinna Vinschen <corinna@vinschen.de> 2008-12-18 Corinna Vinschen <corinna@vinschen.de>
* path.cc (symlin_info::check): Set 4th parameter of * path.cc (symlin_info::check): Set 4th parameter of

View File

@ -199,7 +199,7 @@ path_conv::ndisk_links (DWORD nNumberOfLinks)
PFILE_DIRECTORY_INFORMATION fdibuf = (PFILE_DIRECTORY_INFORMATION) PFILE_DIRECTORY_INFORMATION fdibuf = (PFILE_DIRECTORY_INFORMATION)
alloca (65536); alloca (65536);
__DIR_mounts *dir = new __DIR_mounts (normalized_path); __DIR_mounts *dir = new __DIR_mounts (normalized_path);
while (NT_SUCCESS (NtQueryDirectoryFile (fh, NULL, NULL, 0, &io, fdibuf, while (NT_SUCCESS (NtQueryDirectoryFile (fh, NULL, NULL, NULL, &io, fdibuf,
65536, FileDirectoryInformation, 65536, FileDirectoryInformation,
FALSE, NULL, first))) FALSE, NULL, first)))
{ {
@ -391,13 +391,14 @@ fhandler_base::fstat_by_name (struct __stat64 *buf)
goto too_bad; goto too_bad;
} }
if (wincap.has_fileid_dirinfo () && !pc.has_buggy_fileid_dirinfo () if (wincap.has_fileid_dirinfo () && !pc.has_buggy_fileid_dirinfo ()
&& NT_SUCCESS (status = NtQueryDirectoryFile (dir, NULL, NULL, 0, &io, && NT_SUCCESS (status = NtQueryDirectoryFile (dir, NULL, NULL, NULL, &io,
&fdi_buf.fdi, sizeof fdi_buf, &fdi_buf.fdi, sizeof fdi_buf,
FileIdBothDirectoryInformation, FileIdBothDirectoryInformation,
TRUE, &basename, TRUE))) TRUE, &basename, TRUE)))
FileId = fdi_buf.fdi.FileId; FileId = fdi_buf.fdi.FileId;
else if (NT_SUCCESS (status = NtQueryDirectoryFile (dir, NULL, NULL, 0, &io, else if (NT_SUCCESS (status = NtQueryDirectoryFile (dir, NULL, NULL, NULL,
&fdi_buf.fdi, sizeof fdi_buf, &io, &fdi_buf.fdi,
sizeof fdi_buf,
FileDirectoryInformation, FileDirectoryInformation,
TRUE, &basename, TRUE))) TRUE, &basename, TRUE)))
FileId.QuadPart = 0; /* get_ino is called in fstat_helper. */ FileId.QuadPart = 0; /* get_ino is called in fstat_helper. */
@ -920,7 +921,7 @@ cant_access_acl:
query_open (query_read_attributes); query_open (query_read_attributes);
oret = open (O_BINARY, 0); oret = open (O_BINARY, 0);
} }
if ((!oret && !fstat_by_handle (&st)) if ((oret && !fstat_by_handle (&st))
|| !fstat_by_name (&st)) || !fstat_by_name (&st))
{ {
aclbufp[0].a_type = USER_OBJ; aclbufp[0].a_type = USER_OBJ;
@ -1777,7 +1778,7 @@ fhandler_disk_file::readdir (DIR *dir, dirent *de)
{ {
if ((dir->__flags & dirent_get_d_ino)) if ((dir->__flags & dirent_get_d_ino))
{ {
status = NtQueryDirectoryFile (get_handle (), NULL, NULL, 0, &io, status = NtQueryDirectoryFile (get_handle (), NULL, NULL, NULL, &io,
d_cache (dir), DIR_BUF_SIZE, d_cache (dir), DIR_BUF_SIZE,
FileIdBothDirectoryInformation, FileIdBothDirectoryInformation,
FALSE, NULL, dir->__d_position == 0); FALSE, NULL, dir->__d_position == 0);
@ -1821,7 +1822,8 @@ fhandler_disk_file::readdir (DIR *dir, dirent *de)
if (d_cachepos (dir) == 0) if (d_cachepos (dir) == 0)
{ {
status = NtQueryDirectoryFile (get_handle (), NULL, NULL, status = NtQueryDirectoryFile (get_handle (), NULL, NULL,
0, &io, d_cache (dir), DIR_BUF_SIZE, NULL, &io, d_cache (dir),
DIR_BUF_SIZE,
FileDirectoryInformation, FileDirectoryInformation,
FALSE, NULL, cnt == 0); FALSE, NULL, cnt == 0);
if (!NT_SUCCESS (status)) if (!NT_SUCCESS (status))
@ -1838,7 +1840,7 @@ fhandler_disk_file::readdir (DIR *dir, dirent *de)
} }
} }
if (!(dir->__flags & dirent_get_d_ino)) if (!(dir->__flags & dirent_get_d_ino))
status = NtQueryDirectoryFile (get_handle (), NULL, NULL, 0, &io, status = NtQueryDirectoryFile (get_handle (), NULL, NULL, NULL, &io,
d_cache (dir), DIR_BUF_SIZE, d_cache (dir), DIR_BUF_SIZE,
(dir->__flags & dirent_nfs_d_ino) (dir->__flags & dirent_nfs_d_ino)
? FileNamesInformation ? FileNamesInformation
@ -1848,7 +1850,9 @@ fhandler_disk_file::readdir (DIR *dir, dirent *de)
go_ahead: go_ahead:
if (!NT_SUCCESS (status)) if (status == STATUS_NO_MORE_FILES)
/*nothing*/;
else if (!NT_SUCCESS (status))
debug_printf ("NtQueryDirectoryFile failed, status %p, win32 error %lu", debug_printf ("NtQueryDirectoryFile failed, status %p, win32 error %lu",
status, RtlNtStatusToDosError (status)); status, RtlNtStatusToDosError (status));
else else