[5/5] taskschd: Add support for registering a task with NULL name in the root folder.
Dmitry Timoshkov
dmitry at baikal.ru
Thu Apr 10 03:41:45 CDT 2014
Because server receives full task name it can't autogenerate a name in
a not 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);
--
1.9.2
More information about the wine-patches
mailing list