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