[3/3] taskschd: Implement setters for IRegistrationInfo string properties.
Dmitry Timoshkov
dmitry at baikal.ru
Fri Apr 11 02:27:23 CDT 2014
---
dlls/taskschd/task.c | 113 +++++++++++++++++++++++++++++++++++-----
dlls/taskschd/tests/scheduler.c | 1 -
2 files changed, 99 insertions(+), 15 deletions(-)
diff --git a/dlls/taskschd/task.c b/dlls/taskschd/task.c
index 9c3d20a..fda1305 100644
--- a/dlls/taskschd/task.c
+++ b/dlls/taskschd/task.c
@@ -61,6 +61,13 @@ static ULONG WINAPI RegistrationInfo_Release(IRegistrationInfo *iface)
if (!ref)
{
TRACE("destroying %p\n", iface);
+ heap_free(reginfo->description);
+ heap_free(reginfo->author);
+ heap_free(reginfo->version);
+ heap_free(reginfo->date);
+ heap_free(reginfo->documentation);
+ heap_free(reginfo->uri);
+ heap_free(reginfo->source);
heap_free(reginfo);
}
@@ -128,8 +135,15 @@ static HRESULT WINAPI RegistrationInfo_get_Description(IRegistrationInfo *iface,
static HRESULT WINAPI RegistrationInfo_put_Description(IRegistrationInfo *iface, BSTR description)
{
- FIXME("%p,%p: stub\n", iface, debugstr_w(description));
- return E_NOTIMPL;
+ registration_info *reginfo = impl_from_IRegistrationInfo(iface);
+
+ TRACE("%p,%p\n", iface, debugstr_w(description));
+
+ if (!description) return E_INVALIDARG;
+
+ reginfo->description = heap_strdupW(description);
+ /* FIXME: update XML on the server side */
+ return reginfo->description ? S_OK : E_OUTOFMEMORY;
}
static HRESULT WINAPI RegistrationInfo_get_Author(IRegistrationInfo *iface, BSTR *author)
@@ -146,8 +160,15 @@ static HRESULT WINAPI RegistrationInfo_get_Author(IRegistrationInfo *iface, BSTR
static HRESULT WINAPI RegistrationInfo_put_Author(IRegistrationInfo *iface, BSTR author)
{
- FIXME("%p,%p: stub\n", iface, debugstr_w(author));
- return E_NOTIMPL;
+ registration_info *reginfo = impl_from_IRegistrationInfo(iface);
+
+ TRACE("%p,%p\n", iface, debugstr_w(author));
+
+ if (!author) return E_INVALIDARG;
+
+ reginfo->author = heap_strdupW(author);
+ /* FIXME: update XML on the server side */
+ return reginfo->author ? S_OK : E_OUTOFMEMORY;
}
static HRESULT WINAPI RegistrationInfo_get_Version(IRegistrationInfo *iface, BSTR *version)
@@ -164,8 +185,15 @@ static HRESULT WINAPI RegistrationInfo_get_Version(IRegistrationInfo *iface, BST
static HRESULT WINAPI RegistrationInfo_put_Version(IRegistrationInfo *iface, BSTR version)
{
- FIXME("%p,%p: stub\n", iface, debugstr_w(version));
- return E_NOTIMPL;
+ registration_info *reginfo = impl_from_IRegistrationInfo(iface);
+
+ TRACE("%p,%p\n", iface, debugstr_w(version));
+
+ if (!version) return E_INVALIDARG;
+
+ reginfo->version = heap_strdupW(version);
+ /* FIXME: update XML on the server side */
+ return reginfo->version ? S_OK : E_OUTOFMEMORY;
}
static HRESULT WINAPI RegistrationInfo_get_Date(IRegistrationInfo *iface, BSTR *date)
@@ -182,8 +210,15 @@ static HRESULT WINAPI RegistrationInfo_get_Date(IRegistrationInfo *iface, BSTR *
static HRESULT WINAPI RegistrationInfo_put_Date(IRegistrationInfo *iface, BSTR date)
{
- FIXME("%p,%p: stub\n", iface, debugstr_w(date));
- return E_NOTIMPL;
+ registration_info *reginfo = impl_from_IRegistrationInfo(iface);
+
+ TRACE("%p,%p\n", iface, debugstr_w(date));
+
+ if (!date) return E_INVALIDARG;
+
+ reginfo->date = heap_strdupW(date);
+ /* FIXME: update XML on the server side */
+ return reginfo->date ? S_OK : E_OUTOFMEMORY;
}
static HRESULT WINAPI RegistrationInfo_get_Documentation(IRegistrationInfo *iface, BSTR *doc)
@@ -200,8 +235,15 @@ static HRESULT WINAPI RegistrationInfo_get_Documentation(IRegistrationInfo *ifac
static HRESULT WINAPI RegistrationInfo_put_Documentation(IRegistrationInfo *iface, BSTR doc)
{
- FIXME("%p,%p: stub\n", iface, debugstr_w(doc));
- return E_NOTIMPL;
+ registration_info *reginfo = impl_from_IRegistrationInfo(iface);
+
+ TRACE("%p,%p\n", iface, debugstr_w(doc));
+
+ if (!doc) return E_INVALIDARG;
+
+ reginfo->documentation = heap_strdupW(doc);
+ /* FIXME: update XML on the server side */
+ return reginfo->documentation ? S_OK : E_OUTOFMEMORY;
}
static HRESULT WINAPI RegistrationInfo_get_XmlText(IRegistrationInfo *iface, BSTR *xml)
@@ -230,8 +272,15 @@ static HRESULT WINAPI RegistrationInfo_get_URI(IRegistrationInfo *iface, BSTR *u
static HRESULT WINAPI RegistrationInfo_put_URI(IRegistrationInfo *iface, BSTR uri)
{
- FIXME("%p,%p: stub\n", iface, debugstr_w(uri));
- return E_NOTIMPL;
+ registration_info *reginfo = impl_from_IRegistrationInfo(iface);
+
+ TRACE("%p,%p\n", iface, debugstr_w(uri));
+
+ if (!uri) return E_INVALIDARG;
+
+ reginfo->uri = heap_strdupW(uri);
+ /* FIXME: update XML on the server side */
+ return reginfo->uri ? S_OK : E_OUTOFMEMORY;
}
static HRESULT WINAPI RegistrationInfo_get_SecurityDescriptor(IRegistrationInfo *iface, VARIANT *sddl)
@@ -260,8 +309,15 @@ static HRESULT WINAPI RegistrationInfo_get_Source(IRegistrationInfo *iface, BSTR
static HRESULT WINAPI RegistrationInfo_put_Source(IRegistrationInfo *iface, BSTR source)
{
- FIXME("%p,%p: stub\n", iface, debugstr_w(source));
- return E_NOTIMPL;
+ registration_info *reginfo = impl_from_IRegistrationInfo(iface);
+
+ TRACE("%p,%p\n", iface, debugstr_w(source));
+
+ if (!source) return E_INVALIDARG;
+
+ reginfo->source = heap_strdupW(source);
+ /* FIXME: update XML on the server side */
+ return reginfo->source ? S_OK : E_OUTOFMEMORY;
}
static const IRegistrationInfoVtbl RegistrationInfo_vtbl =
@@ -2215,6 +2271,7 @@ static HRESULT read_xml(IXmlReader *reader, ITaskDefinition *taskdef)
static HRESULT WINAPI TaskDefinition_put_XmlText(ITaskDefinition *iface, BSTR xml)
{
+ TaskDefinition *taskdef = impl_from_ITaskDefinition(iface);
HRESULT hr;
IStream *stream;
IXmlReader *reader;
@@ -2248,7 +2305,35 @@ static HRESULT WINAPI TaskDefinition_put_XmlText(ITaskDefinition *iface, BSTR xm
hr = IXmlReader_SetInput(reader, (IUnknown *)stream);
if (hr == S_OK)
+ {
+ if (taskdef->reginfo)
+ {
+ IRegistrationInfo_Release(taskdef->reginfo);
+ taskdef->reginfo = NULL;
+ }
+ if (taskdef->taskset)
+ {
+ ITaskSettings_Release(taskdef->taskset);
+ taskdef->taskset = NULL;
+ }
+ if (taskdef->triggers)
+ {
+ ITriggerCollection_Release(taskdef->triggers);
+ taskdef->triggers = NULL;
+ }
+ if (taskdef->principal)
+ {
+ IPrincipal_Release(taskdef->principal);
+ taskdef->principal = NULL;
+ }
+ if (taskdef->actions)
+ {
+ IActionCollection_Release(taskdef->actions);
+ taskdef->actions = NULL;
+ }
+
hr = read_xml(reader, iface);
+ }
IXmlReader_Release(reader);
IStream_Release(stream);
diff --git a/dlls/taskschd/tests/scheduler.c b/dlls/taskschd/tests/scheduler.c
index 1132268..98ff227 100644
--- a/dlls/taskschd/tests/scheduler.c
+++ b/dlls/taskschd/tests/scheduler.c
@@ -1353,7 +1353,6 @@ todo_wine
hr = IRegistrationInfo_get_Description(reginfo, &bstr);
ok(hr == S_OK, "get_Description error %#x\n", hr);
-todo_wine
ok(bstr && !lstrcmpW(bstr, Task1), "expected Task1, got %s\n", wine_dbgstr_w(bstr));
SysFreeString(bstr);
hr = IRegistrationInfo_get_Author(reginfo, &bstr);
--
1.9.2
More information about the wine-patches
mailing list