Nikolay Sivov : scrrun: Implement Reset() for folder collection.

Alexandre Julliard julliard at winehq.org
Fri Jan 3 11:23:15 CST 2014


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Fri Jan  3 16:35:31 2014 +0400

scrrun: Implement Reset() for folder collection.

---

 dlls/scrrun/filesystem.c       |   21 +++++++++++++++++++--
 dlls/scrrun/tests/filesystem.c |    4 ++++
 2 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/dlls/scrrun/filesystem.c b/dlls/scrrun/filesystem.c
index 5459b7e..fa53950 100644
--- a/dlls/scrrun/filesystem.c
+++ b/dlls/scrrun/filesystem.c
@@ -42,6 +42,8 @@ struct enumdata {
         struct
         {
             IFolderCollection *coll;
+            HANDLE find;
+            BSTR path;
         } foldercoll;
     } u;
 };
@@ -408,6 +410,8 @@ static ULONG WINAPI foldercoll_enumvariant_Release(IEnumVARIANT *iface)
     if (!ref)
     {
         IFolderCollection_Release(This->data.u.foldercoll.coll);
+        SysFreeString(This->data.u.foldercoll.path);
+        FindClose(This->data.u.foldercoll.find);
         heap_free(This);
     }
 
@@ -431,8 +435,13 @@ static HRESULT WINAPI foldercoll_enumvariant_Skip(IEnumVARIANT *iface, ULONG cel
 static HRESULT WINAPI foldercoll_enumvariant_Reset(IEnumVARIANT *iface)
 {
     struct enumvariant *This = impl_from_IEnumVARIANT(iface);
-    FIXME("(%p): stub\n", This);
-    return E_NOTIMPL;
+
+    TRACE("(%p)\n", This);
+
+    FindClose(This->data.u.foldercoll.find);
+    This->data.u.foldercoll.find = NULL;
+
+    return S_OK;
 }
 
 static HRESULT WINAPI foldercoll_enumvariant_Clone(IEnumVARIANT *iface, IEnumVARIANT **pclone)
@@ -463,6 +472,14 @@ static HRESULT create_foldercoll_enum(struct foldercollection *collection, IUnkn
 
     This->IEnumVARIANT_iface.lpVtbl = &foldercollenumvariantvtbl;
     This->ref = 1;
+    This->data.u.foldercoll.find = NULL;
+    This->data.u.foldercoll.path = SysAllocString(collection->path);
+    if (!This->data.u.foldercoll.path)
+    {
+        heap_free(This);
+        return E_OUTOFMEMORY;
+    }
+
     This->data.u.foldercoll.coll = &collection->IFolderCollection_iface;
     IFolderCollection_AddRef(This->data.u.foldercoll.coll);
 
diff --git a/dlls/scrrun/tests/filesystem.c b/dlls/scrrun/tests/filesystem.c
index b373df4..be5131c 100644
--- a/dlls/scrrun/tests/filesystem.c
+++ b/dlls/scrrun/tests/filesystem.c
@@ -866,6 +866,10 @@ if (hr == S_OK) {
     ok(clone != enumvar, "got %p, %p\n", enumvar, clone);
     IEnumVARIANT_Release(clone);
 }
+
+    hr = IEnumVARIANT_Reset(enumvar);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+
     IEnumVARIANT_Release(enumvar);
     IUnknown_Release(unk);
 




More information about the wine-cvs mailing list