[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