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