Dmitry Timoshkov : mstask: Implement setting and getting working directory using IExecAction.
Alexandre Julliard
julliard at winehq.org
Fri Mar 30 12:32:36 CDT 2018
Module: wine
Branch: master
Commit: 04e240b3a7ca4705f60fde64e8db6078b36fba81
URL: https://source.winehq.org/git/wine.git/?a=commit;h=04e240b3a7ca4705f60fde64e8db6078b36fba81
Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date: Fri Mar 30 17:00:02 2018 +0800
mstask: Implement setting and getting working directory using IExecAction.
Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
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 1aba435..ed0b984 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(
More information about the wine-cvs
mailing list