Module: wine Branch: master Commit: 3879d98de4593a07ef7e2586dc21920f88d40036 URL: http://source.winehq.org/git/wine.git/?a=commit;h=3879d98de4593a07ef7e2586dc...
Author: Michael Stefaniuc mstefani@redhat.de Date: Wed Feb 5 00:15:05 2014 +0100
shlwapi/tests: COM cleanup for the dummy IStream iface.
---
dlls/shlwapi/tests/clist.c | 93 ++++++++++++++++++++++++++------------------ 1 file changed, 56 insertions(+), 37 deletions(-)
diff --git a/dlls/shlwapi/tests/clist.c b/dlls/shlwapi/tests/clist.c index 65d3178..44ca0bb 100644 --- a/dlls/shlwapi/tests/clist.c +++ b/dlls/shlwapi/tests/clist.c @@ -17,6 +17,7 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
+#define COBJMACROS #include <stdarg.h>
#include "wine/test.h" @@ -50,9 +51,9 @@ static const SHLWAPI_CLIST SHLWAPI_CLIST_items[] = };
/* Dummy IStream object for testing calls */ -typedef struct +typedef struct dummystream { - void* lpVtbl; + IStream IStream_iface; LONG ref; int readcalls; BOOL failreadcall; @@ -69,28 +70,43 @@ typedef struct ULARGE_INTEGER pos; } _IDummyStream;
-static -HRESULT WINAPI QueryInterface(_IDummyStream *This,REFIID riid, LPVOID *ppvObj) +static inline struct dummystream *impl_from_IStream(IStream *iface) { - return S_OK; + return CONTAINING_RECORD(iface, struct dummystream, IStream_iface); }
-static ULONG WINAPI AddRef(_IDummyStream *This) +static HRESULT WINAPI QueryInterface(IStream *iface, REFIID riid, void **ret_iface) { - return InterlockedIncrement(&This->ref); + if (IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IStream, riid)) { + *ret_iface = iface; + IStream_AddRef(iface); + return S_OK; + } + trace("Unexpected REFIID %s\n", wine_dbgstr_guid(riid)); + *ret_iface = NULL; + return E_NOINTERFACE; }
-static ULONG WINAPI Release(_IDummyStream *This) +static ULONG WINAPI AddRef(IStream *iface) { - return InterlockedDecrement(&This->ref); + struct dummystream *This = impl_from_IStream(iface); + + return InterlockedIncrement(&This->ref); }
-static HRESULT WINAPI Read(_IDummyStream* This, LPVOID lpMem, ULONG ulSize, - PULONG lpRead) +static ULONG WINAPI Release(IStream *iface) { + struct dummystream *This = impl_from_IStream(iface); + + return InterlockedDecrement(&This->ref); +} + +static HRESULT WINAPI Read(IStream *iface, void *lpMem, ULONG ulSize, ULONG *lpRead) +{ + struct dummystream *This = impl_from_IStream(iface); HRESULT hRet = S_OK; - ++This->readcalls;
+ ++This->readcalls; if (This->failreadcall) { return STG_E_ACCESSDENIED; @@ -136,9 +152,9 @@ static HRESULT WINAPI Read(_IDummyStream* This, LPVOID lpMem, ULONG ulSize, return hRet; }
-static HRESULT WINAPI Write(_IDummyStream* This, LPVOID lpMem, ULONG ulSize, - PULONG lpWritten) +static HRESULT WINAPI Write(IStream *iface, const void *lpMem, ULONG ulSize, ULONG *lpWritten) { + struct dummystream *This = impl_from_IStream(iface); HRESULT hRet = S_OK;
++This->writecalls; @@ -155,9 +171,11 @@ static HRESULT WINAPI Write(_IDummyStream* This, LPVOID lpMem, ULONG ulSize, return hRet; }
-static HRESULT WINAPI Seek(_IDummyStream* This, LARGE_INTEGER dlibMove, - DWORD dwOrigin, ULARGE_INTEGER* plibNewPosition) +static HRESULT WINAPI Seek(IStream *iface, LARGE_INTEGER dlibMove, DWORD dwOrigin, + ULARGE_INTEGER *plibNewPosition) { + struct dummystream *This = impl_from_IStream(iface); + ++This->seekcalls; This->pos.QuadPart = dlibMove.QuadPart; if (plibNewPosition) @@ -165,9 +183,10 @@ static HRESULT WINAPI Seek(_IDummyStream* This, LARGE_INTEGER dlibMove, return S_OK; }
-static HRESULT WINAPI Stat(_IDummyStream* This, STATSTG* pstatstg, - DWORD grfStatFlag) +static HRESULT WINAPI Stat(IStream *iface, STATSTG *pstatstg, DWORD grfStatFlag) { + struct dummystream *This = impl_from_IStream(iface); + ++This->statcalls; if (This->failstatcall) return E_FAIL; @@ -177,7 +196,7 @@ static HRESULT WINAPI Stat(_IDummyStream* This, STATSTG* pstatstg, }
/* VTable */ -static void* iclvt[] = +static IStreamVtbl iclvt = { QueryInterface, AddRef, @@ -248,23 +267,23 @@ static BOOL InitFunctionPtrs(void) return TRUE; }
-static void InitDummyStream(_IDummyStream* iface) +static void InitDummyStream(struct dummystream *obj) { - iface->lpVtbl = (void*)iclvt; - iface->ref = 1; - iface->readcalls = 0; - iface->failreadcall = FALSE; - iface->failreadsize = FALSE; - iface->readbeyondend = FALSE; - iface->readreturnlarge = FALSE; - iface->writecalls = 0; - iface->failwritecall = FALSE; - iface->failwritesize = FALSE; - iface->seekcalls = 0; - iface->statcalls = 0; - iface->failstatcall = FALSE; - iface->item = SHLWAPI_CLIST_items; - iface->pos.QuadPart = 0; + obj->IStream_iface.lpVtbl = &iclvt; + obj->ref = 1; + obj->readcalls = 0; + obj->failreadcall = FALSE; + obj->failreadsize = FALSE; + obj->readbeyondend = FALSE; + obj->readreturnlarge = FALSE; + obj->writecalls = 0; + obj->failwritecall = FALSE; + obj->failwritesize = FALSE; + obj->seekcalls = 0; + obj->statcalls = 0; + obj->failstatcall = FALSE; + obj->item = SHLWAPI_CLIST_items; + obj->pos.QuadPart = 0; }
@@ -585,7 +604,7 @@ static void test_SHLWAPI_213(void)
InitDummyStream(&streamobj); ll.QuadPart = 5000l; - Seek(&streamobj, ll, 0, NULL); /* Seek to 5000l */ + Seek(&streamobj.IStream_iface, ll, 0, NULL); /* Seek to 5000l */
streamobj.seekcalls = 0; pSHLWAPI_213(&streamobj); /* Should rewind */ @@ -612,7 +631,7 @@ static void test_SHLWAPI_214(void)
InitDummyStream(&streamobj); ll.QuadPart = 5000l; - Seek(&streamobj, ll, 0, NULL); + Seek(&streamobj.IStream_iface, ll, 0, NULL); ul.QuadPart = 0; streamobj.seekcalls = 0; hRet = pSHLWAPI_214(&streamobj, &ul);