From 04e240b3a7ca4705f60fde64e8db6078b36fba81 Mon Sep 17 00:00:00 2001 From: Dmitry Timoshkov Date: Fri, 30 Mar 2018 17:00:02 +0800 Subject: [PATCH] mstask: Implement setting and getting working directory using IExecAction. Signed-off-by: Dmitry Timoshkov Signed-off-by: Alexandre Julliard --- dlls/mstask/task.c | 45 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 10 deletions(-) diff --git a/dlls/mstask/task.c b/dlls/mstask/task.c index 1aba435efde..ed0b984d846 100644 --- a/dlls/mstask/task.c +++ b/dlls/mstask/task.c @@ -533,20 +533,45 @@ static HRESULT WINAPI MSTASK_ITask_GetParameters(ITask *iface, LPWSTR *params) return hr; } -static HRESULT WINAPI MSTASK_ITask_SetWorkingDirectory( - ITask* iface, - LPCWSTR pwszWorkingDirectory) +static HRESULT WINAPI MSTASK_ITask_SetWorkingDirectory(ITask * iface, LPCWSTR workdir) { - FIXME("(%p, %s): stub\n", iface, debugstr_w(pwszWorkingDirectory)); - return E_NOTIMPL; + TaskImpl *This = impl_from_ITask(iface); + + TRACE("(%p, %s)\n", iface, debugstr_w(workdir)); + + if (!workdir || !workdir[0]) + workdir = NULL; + + return IExecAction_put_WorkingDirectory(This->action, (BSTR)workdir); } -static HRESULT WINAPI MSTASK_ITask_GetWorkingDirectory( - ITask* iface, - LPWSTR *ppwszWorkingDirectory) +static HRESULT WINAPI MSTASK_ITask_GetWorkingDirectory(ITask *iface, LPWSTR *workdir) { - FIXME("(%p, %p): stub\n", iface, ppwszWorkingDirectory); - return E_NOTIMPL; + TaskImpl *This = impl_from_ITask(iface); + HRESULT hr; + BSTR dir; + DWORD len; + + TRACE("(%p, %p)\n", iface, workdir); + + hr = IExecAction_get_WorkingDirectory(This->action, &dir); + if (hr != S_OK) return hr; + + len = dir ? lstrlenW(dir) + 1 : 1; + *workdir = CoTaskMemAlloc(len * sizeof(WCHAR)); + if (*workdir) + { + if (!dir) + *workdir[0] = 0; + else + lstrcpyW(*workdir, dir); + hr = S_OK; + } + else + hr = E_OUTOFMEMORY; + + SysFreeString(dir); + return hr; } static HRESULT WINAPI MSTASK_ITask_SetPriority( -- 2.11.4.GIT