[PATCH 1/3] mstask: Implement ITask::SetWorkItemData().

Dmitry Timoshkov dmitry at baikal.ru
Tue Jun 12 23:04:15 CDT 2018


Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
---
 dlls/mstask/task.c | 36 ++++++++++++++++++++++++++++++------
 1 file changed, 30 insertions(+), 6 deletions(-)

diff --git a/dlls/mstask/task.c b/dlls/mstask/task.c
index 69f1e5f95c..54e4912bc7 100644
--- a/dlls/mstask/task.c
+++ b/dlls/mstask/task.c
@@ -58,6 +58,8 @@ typedef struct
     LONG ref;
     ITaskDefinition *task;
     IExecAction *action;
+    BYTE *data;
+    WORD data_count;
     UUID uuid;
     LPWSTR task_name;
     HRESULT status;
@@ -87,6 +89,7 @@ static void TaskDestructor(TaskImpl *This)
     if (This->action)
         IExecAction_Release(This->action);
     ITaskDefinition_Release(This->task);
+    heap_free(This->data);
     heap_free(This->task_name);
     heap_free(This->accountName);
     heap_free(This->trigger);
@@ -809,13 +812,32 @@ static HRESULT WINAPI MSTASK_ITask_GetCreator(ITask *iface, LPWSTR *creator)
     return hr;
 }
 
-static HRESULT WINAPI MSTASK_ITask_SetWorkItemData(
-        ITask* iface,
-        WORD cBytes,
-        BYTE rgbData[])
+static HRESULT WINAPI MSTASK_ITask_SetWorkItemData(ITask *iface, WORD count, BYTE data[])
 {
-    FIXME("(%p, %d, %p): stub\n", iface, cBytes, rgbData);
-    return E_NOTIMPL;
+    TaskImpl *This = impl_from_ITask(iface);
+
+    TRACE("(%p, %u, %p)\n", iface, count, data);
+
+    if (count)
+    {
+        if (!data) return E_INVALIDARG;
+
+        heap_free(This->data);
+        This->data = heap_alloc(count);
+        if (!This->data) return E_OUTOFMEMORY;
+        memcpy(This->data, data, count);
+        This->data_count = count;
+    }
+    else
+    {
+        if (data) return E_INVALIDARG;
+
+        heap_free(This->data);
+        This->data = NULL;
+        This->data_count = 0;
+    }
+
+    return S_OK;
 }
 
 static HRESULT WINAPI MSTASK_ITask_GetWorkItemData(
@@ -1865,6 +1887,8 @@ HRESULT TaskConstructor(ITaskService *service, const WCHAR *name, ITask **task)
     This->IPersistFile_iface.lpVtbl = &MSTASK_IPersistFileVtbl;
     This->ref = 1;
     This->task = taskdef;
+    This->data = NULL;
+    This->data_count = 0;
     This->task_name = heap_strdupW(task_name);
     This->flags = 0;
     This->status = SCHED_S_TASK_NOT_SCHEDULED;
-- 
2.16.3




More information about the wine-devel mailing list