Dmitry Timoshkov : taskschd: Add support for registering a task with NULL name in the root folder.
Alexandre Julliard
julliard at winehq.org
Thu Apr 10 12:21:28 CDT 2014
Module: wine
Branch: master
Commit: 39c1c9c262725fef9a8e8d0af744389eea668c3d
URL: http://source.winehq.org/git/wine.git/?a=commit;h=39c1c9c262725fef9a8e8d0af744389eea668c3d
Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date: Thu Apr 10 17:41:45 2014 +0900
taskschd: Add support for registering a task with NULL name in the root folder.
Because server receives full task name it can't autogenerate a name in
a non-root folder.
---
dlls/taskschd/regtask.c | 20 ++++++++++++++++++--
dlls/taskschd/tests/scheduler.c | 7 +------
2 files changed, 19 insertions(+), 8 deletions(-)
diff --git a/dlls/taskschd/regtask.c b/dlls/taskschd/regtask.c
index 5e9d5d3..10562fe 100644
--- a/dlls/taskschd/regtask.c
+++ b/dlls/taskschd/regtask.c
@@ -313,8 +313,21 @@ HRESULT RegisteredTask_create(const WCHAR *path, const WCHAR *name, ITaskDefinit
RegisteredTask *regtask;
HRESULT hr;
- full_name = get_full_path(path, name);
- if (!full_name) return E_OUTOFMEMORY;
+ if (!name)
+ {
+ if (!create) return E_INVALIDARG;
+
+ /* NULL task name is allowed only in the root folder */
+ if (path[0] != '\\' || path[1])
+ return E_INVALIDARG;
+
+ full_name = NULL;
+ }
+ else
+ {
+ full_name = get_full_path(path, name);
+ if (!full_name) return E_OUTOFMEMORY;
+ }
regtask = heap_alloc(sizeof(*regtask));
if (!regtask)
@@ -337,6 +350,9 @@ HRESULT RegisteredTask_create(const WCHAR *path, const WCHAR *name, ITaskDefinit
SysFreeString(xml);
return hr;
}
+
+ heap_free(full_name);
+ full_name = heap_strdupW(actual_path);
MIDL_user_free(actual_path);
}
else
diff --git a/dlls/taskschd/tests/scheduler.c b/dlls/taskschd/tests/scheduler.c
index b3fe9ea..6751f62 100644
--- a/dlls/taskschd/tests/scheduler.c
+++ b/dlls/taskschd/tests/scheduler.c
@@ -851,7 +851,6 @@ todo_wine
IRegisteredTask_Release(task2);
hr = ITaskFolder_GetTask(root, NULL, &task1);
-todo_wine
ok(hr == E_INVALIDARG, "expected E_INVALIDARG, got %#x\n", hr);
hr = ITaskFolder_GetTask(root, Wine_Task1, NULL);
@@ -929,10 +928,8 @@ todo_wine
ok(hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), "expected ERROR_FILE_NOT_FOUND, got %#x\n", hr);
hr = ITaskFolder_RegisterTask(root, NULL, xmlW, TASK_CREATE, v_null, v_null, TASK_LOGON_NONE, v_null, &task1);
-todo_wine
ok(hr == S_OK, "RegisterTask error %#x\n", hr);
-if (hr == S_OK)
-{
+
hr = IRegisteredTask_get_Name(task1, &bstr);
ok(hr == S_OK, "get_Name error %#x\n", hr);
hr = IIDFromString(bstr, &iid);
@@ -942,10 +939,8 @@ if (hr == S_OK)
hr = ITaskFolder_DeleteTask(root, bstr, 0);
ok(hr == S_OK, "DeleteTask error %#x\n", hr);
-}
hr = ITaskFolder_RegisterTask(folder, NULL, xmlW, TASK_CREATE, v_null, v_null, TASK_LOGON_NONE, v_null, &task1);
-todo_wine
ok(hr == E_INVALIDARG, "expected E_INVALIDARG, got %#x\n", hr);
ITaskFolder_Release(folder);
More information about the wine-cvs
mailing list