Module: wine Branch: master Commit: 3aa2376fd98bd9ae616232756638ef6a2df358b9 URL: http://source.winehq.org/git/wine.git/?a=commit;h=3aa2376fd98bd9ae6162327566...
Author: Dmitry Timoshkov dmitry@baikal.ru Date: Mon Feb 17 14:10:14 2014 +0900
taskschd: Make ITaskSettings a part of ITaskDefinition implementation.
---
dlls/taskschd/task.c | 20 ++++++++++++++++++-- dlls/taskschd/taskschd_private.h | 6 ++++++ 2 files changed, 24 insertions(+), 2 deletions(-)
diff --git a/dlls/taskschd/task.c b/dlls/taskschd/task.c index 4c8a23e..7386694 100644 --- a/dlls/taskschd/task.c +++ b/dlls/taskschd/task.c @@ -601,6 +601,7 @@ static HRESULT TaskSettings_create(ITaskSettings **obj) typedef struct { ITaskDefinition ITaskDefinition_iface; + ITaskSettings *taskset; LONG ref; } TaskDefinition;
@@ -623,6 +624,8 @@ static ULONG WINAPI TaskDefinition_Release(ITaskDefinition *iface) if (!ref) { TRACE("destroying %p\n", iface); + if (taskdef->taskset) + ITaskSettings_Release(taskdef->taskset); heap_free(taskdef); }
@@ -702,11 +705,16 @@ static HRESULT WINAPI TaskDefinition_put_Triggers(ITaskDefinition *iface, ITrigg
static HRESULT WINAPI TaskDefinition_get_Settings(ITaskDefinition *iface, ITaskSettings **settings) { + TaskDefinition *taskdef = impl_from_ITaskDefinition(iface); + TRACE("%p,%p\n", iface, settings);
if (!settings) return E_POINTER;
- return TaskSettings_create(settings); + ITaskSettings_AddRef(taskdef->taskset); + *settings = taskdef->taskset; + + return S_OK; }
static HRESULT WINAPI TaskDefinition_put_Settings(ITaskDefinition *iface, ITaskSettings *settings) @@ -1028,13 +1036,21 @@ static const ITaskDefinitionVtbl TaskDefinition_vtbl =
HRESULT TaskDefinition_create(ITaskDefinition **obj) { + HRESULT hr; TaskDefinition *taskdef;
- taskdef = heap_alloc(sizeof(*taskdef)); + taskdef = heap_alloc_zero(sizeof(*taskdef)); if (!taskdef) return E_OUTOFMEMORY;
taskdef->ITaskDefinition_iface.lpVtbl = &TaskDefinition_vtbl; taskdef->ref = 1; + hr = TaskSettings_create(&taskdef->taskset); + if (hr != S_OK) + { + ITaskDefinition_Release(&taskdef->ITaskDefinition_iface); + return hr; + } + *obj = &taskdef->ITaskDefinition_iface;
TRACE("created %p\n", *obj); diff --git a/dlls/taskschd/taskschd_private.h b/dlls/taskschd/taskschd_private.h index f9cf909..1046e2f 100644 --- a/dlls/taskschd/taskschd_private.h +++ b/dlls/taskschd/taskschd_private.h @@ -31,6 +31,12 @@ HRESULT RegisteredTaskCollection_create(const WCHAR *path, IRegisteredTaskCollec
const char *debugstr_variant(const VARIANT *v) DECLSPEC_HIDDEN;
+static void *heap_alloc_zero(SIZE_T size) __WINE_ALLOC_SIZE(1); +static inline void *heap_alloc_zero(SIZE_T size) +{ + return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size); +} + static void *heap_alloc(SIZE_T size) __WINE_ALLOC_SIZE(1); static inline void *heap_alloc(SIZE_T size) {