From aec0eb87de7d71ab4d3160f3b2b0fb1250937243 Mon Sep 17 00:00:00 2001 From: Roy Shea Date: Thu, 21 Aug 2008 08:54:01 -0700 Subject: [PATCH] mstask: Task PersistFile AddRef, QueryInterface, and Release. --- dlls/mstask/task.c | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/dlls/mstask/task.c b/dlls/mstask/task.c index f1f542638bd..5cef29fb111 100644 --- a/dlls/mstask/task.c +++ b/dlls/mstask/task.c @@ -21,6 +21,11 @@ WINE_DEFAULT_DEBUG_CHANNEL(mstask); +static inline TaskImpl *impl_from_IPersistFile( IPersistFile *iface ) +{ + return (TaskImpl*) ((char*)(iface) - FIELD_OFFSET(TaskImpl, persistVtbl)); +} + static void TaskDestructor(TaskImpl *This) { TRACE("%p\n", This); @@ -47,6 +52,12 @@ static HRESULT WINAPI MSTASK_ITask_QueryInterface( ITask_AddRef(iface); return S_OK; } + else if (IsEqualGUID(riid, &IID_IPersistFile)) + { + *ppvObject = &This->persistVtbl; + ITask_AddRef(iface); + return S_OK; + } WARN("Unknown interface: %s\n", debugstr_guid(riid)); *ppvObject = NULL; @@ -473,22 +484,31 @@ static HRESULT WINAPI MSTASK_IPersistFile_QueryInterface( REFIID riid, void **ppvObject) { - FIXME("(%p, %s, %p): stub\n", iface, debugstr_guid(riid), ppvObject); - return E_NOTIMPL; + TaskImpl *This = impl_from_IPersistFile(iface); + TRACE("(%p, %s, %p)\n", iface, debugstr_guid(riid), ppvObject); + return ITask_QueryInterface((ITask *) This, riid, ppvObject); } static ULONG WINAPI MSTASK_IPersistFile_AddRef( IPersistFile* iface) { - FIXME("(%p): stub\n", iface); - return E_NOTIMPL; + TaskImpl *This = impl_from_IPersistFile(iface); + ULONG ref; + TRACE("\n"); + ref = InterlockedIncrement(&This->ref); + return ref; } static ULONG WINAPI MSTASK_IPersistFile_Release( IPersistFile* iface) { - FIXME("(%p): stub\n", iface); - return E_NOTIMPL; + TaskImpl *This = impl_from_IPersistFile(iface); + ULONG ref; + TRACE("\n"); + ref = InterlockedDecrement(&This->ref); + if (ref == 0) + TaskDestructor(This); + return ref; } static HRESULT WINAPI MSTASK_IPersistFile_GetClassID( -- 2.11.4.GIT