Dmitry Timoshkov : mstask: Implement ITask::SetWorkItemData().
Module: wine Branch: master Commit: c00fbb5c0e2296758db9c7481ef0cf4df31a5c30 URL: https://source.winehq.org/git/wine.git/?a=commit;h=c00fbb5c0e2296758db9c7481... Author: Dmitry Timoshkov <dmitry(a)baikal.ru> Date: Wed Jun 13 12:04:15 2018 +0800 mstask: Implement ITask::SetWorkItemData(). Signed-off-by: Dmitry Timoshkov <dmitry(a)baikal.ru> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- 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 69f1e5f..54e4912 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;
participants (1)
-
Alexandre Julliard