[PATCH 2/2] ntdll: Set restart_scan on first call to NtQueryDirectoryFile.
Grazvydas Ignotas
notasas at gmail.com
Sat Jul 16 18:48:16 CDT 2011
Fixes Portal2 crash.
---
dlls/ntdll/directory.c | 2 ++
dlls/ntdll/tests/directory.c | 13 +++----------
2 files changed, 5 insertions(+), 10 deletions(-)
diff --git a/dlls/ntdll/directory.c b/dlls/ntdll/directory.c
index 42b3639..11fe8e1 100644
--- a/dlls/ntdll/directory.c
+++ b/dlls/ntdll/directory.c
@@ -2004,6 +2004,8 @@ NTSTATUS WINAPI NtQueryDirectoryFile( HANDLE handle, HANDLE event,
fstat( fd, &st );
curdir.dev = st.st_dev;
curdir.ino = st.st_ino;
+ if (lseek( fd, 0, SEEK_CUR ) == 0)
+ restart_scan = TRUE;
#ifdef VFAT_IOCTL_READDIR_BOTH
if ((read_directory_vfat( fd, io, buffer, length, single_entry,
mask, restart_scan, info_class )) != -1) goto done;
diff --git a/dlls/ntdll/tests/directory.c b/dlls/ntdll/tests/directory.c
index 56840b5..4794609 100644
--- a/dlls/ntdll/tests/directory.c
+++ b/dlls/ntdll/tests/directory.c
@@ -219,16 +219,9 @@ static void test_NtQueryDirectoryFile(void)
}
ok(numfiles < max_test_dir_size, "too many loops\n");
- for (i=0; testfiles[i].name; i++) {
- if (strcmp(testfiles[i].name, ".") == 0 || strcmp(testfiles[i].name, "..") == 0) {
- todo_wine
- ok(testfiles[i].nfound == 1, "Wrong number %d of %s files found\n",
- testfiles[i].nfound, testfiles[i].description);
- } else {
- ok(testfiles[i].nfound == 1, "Wrong number %d of %s files found\n",
- testfiles[i].nfound, testfiles[i].description);
- }
- }
+ for (i=0; testfiles[i].name; i++)
+ ok(testfiles[i].nfound == 1, "Wrong number %d of %s files found\n",
+ testfiles[i].nfound, testfiles[i].description);
pNtClose(dirh);
done:
--
1.7.0.4
More information about the wine-patches
mailing list