Nikolay Sivov : scrrun: Fix Skip() for file collection.

Alexandre Julliard julliard at winehq.org
Mon Mar 10 14:38:29 CDT 2014


Module: wine
Branch: master
Commit: fac1c0d25b8852767dbbf53b9b5ce3997ad0c604
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=fac1c0d25b8852767dbbf53b9b5ce3997ad0c604

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Mon Mar 10 13:23:33 2014 +0400

scrrun: Fix Skip() for file collection.

---

 dlls/scrrun/filesystem.c       |   15 ++++++++++++++-
 dlls/scrrun/tests/filesystem.c |    3 ---
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/dlls/scrrun/filesystem.c b/dlls/scrrun/filesystem.c
index 5b6d6cb..ccdb9ee 100644
--- a/dlls/scrrun/filesystem.c
+++ b/dlls/scrrun/filesystem.c
@@ -1001,9 +1001,22 @@ static HRESULT WINAPI filecoll_enumvariant_Skip(IEnumVARIANT *iface, ULONG celt)
 
     TRACE("(%p)->(%d)\n", This, celt);
 
-    while (FindNextFileW(handle, &data) && celt)
+    if (!celt) return S_OK;
+
+    if (!handle)
+    {
+        handle = start_enumeration(This->data.u.filecoll.coll->path, &data, TRUE);
+        if (!handle) return S_FALSE;
+        This->data.u.filecoll.find = handle;
+    }
+    else if (!FindNextFileW(handle, &data))
+        return S_FALSE;
+
+    do
+    {
         if (is_file_data(&data))
             --celt;
+    } while (celt && FindNextFileW(handle, &data));
 
     return celt ? S_FALSE : S_OK;
 }
diff --git a/dlls/scrrun/tests/filesystem.c b/dlls/scrrun/tests/filesystem.c
index 0588509..426cf83 100644
--- a/dlls/scrrun/tests/filesystem.c
+++ b/dlls/scrrun/tests/filesystem.c
@@ -1106,7 +1106,6 @@ todo_wine
     hr = IEnumVARIANT_Reset(enumvar);
     ok(hr == S_OK, "got 0x%08x\n", hr);
     hr = IEnumVARIANT_Skip(enumvar, 2);
-todo_wine
     ok(hr == S_OK, "got 0x%08x\n", hr);
     hr = IEnumVARIANT_Skip(enumvar, 0);
     ok(hr == S_OK, "got 0x%08x\n", hr);
@@ -1119,9 +1118,7 @@ todo_wine
     ok(fetched == 0, "got %d\n", fetched);
     fetched = -1;
     hr = IEnumVARIANT_Next(enumvar, 2, var2, &fetched);
-todo_wine
     ok(hr == S_FALSE, "got 0x%08x\n", hr);
-todo_wine
     ok(fetched == 1, "got %d\n", fetched);
     ok(V_VT(&var2[0]) == VT_DISPATCH, "got type %d\n", V_VT(&var2[0]));
     VariantClear(&var2[0]);




More information about the wine-cvs mailing list