From: Vijay Kiran Kamuju infyquest@gmail.com
--- dlls/taskschd/task.c | 14 ++++++++++++-- dlls/taskschd/tests/scheduler.c | 6 +++--- 2 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/dlls/taskschd/task.c b/dlls/taskschd/task.c index 151e4c9cad8..a91c0ec90a9 100644 --- a/dlls/taskschd/task.c +++ b/dlls/taskschd/task.c @@ -37,6 +37,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(taskschd); typedef struct { IRepetitionPattern IRepetitionPattern_iface; LONG ref; + WCHAR *duration; WCHAR *interval; BOOL stop; } RepetitionPattern; @@ -86,6 +87,7 @@ static ULONG WINAPI RepetitionPattern_Release(IRepetitionPattern *iface) if(!ref) { TRACE("destroying %p\n", iface); + free(This->duration); free(This->interval); free(This); } @@ -127,8 +129,15 @@ static HRESULT WINAPI RepetitionPattern_Invoke(IRepetitionPattern *iface, DISPID static HRESULT WINAPI RepetitionPattern_get_Duration(IRepetitionPattern *iface, BSTR *duration) { RepetitionPattern *This = impl_from_IRepetitionPattern(iface); - FIXME("(%p)->(%p)\n", This, duration); - return E_NOTIMPL; + + TRACE("(%p)->(%p)\n", This, duration); + + if (!duration) return E_POINTER; + + if (!This->duration) *duration = NULL; + else if (!(*duration = SysAllocString(This->duration))) return E_OUTOFMEMORY; + + return S_OK; }
static HRESULT WINAPI RepetitionPattern_put_Duration(IRepetitionPattern *iface, BSTR duration) @@ -204,6 +213,7 @@ static HRESULT RepetitionPattern_create(IRepetitionPattern **pattern)
rep_pattern->IRepetitionPattern_iface.lpVtbl = &RepetitionPattern_vtbl; rep_pattern->ref = 1; + rep_pattern->duration = NULL; rep_pattern->interval = NULL; rep_pattern->stop = FALSE;
diff --git a/dlls/taskschd/tests/scheduler.c b/dlls/taskschd/tests/scheduler.c index eaa45d6429f..65c264b2fcf 100644 --- a/dlls/taskschd/tests/scheduler.c +++ b/dlls/taskschd/tests/scheduler.c @@ -1321,15 +1321,15 @@ static void test_repetition_pattern(IRepetitionPattern *pattern) HRESULT hr;
hr = IRepetitionPattern_get_Duration(pattern, NULL); - todo_wine ok(hr == E_POINTER, "get_Duration failed: %08lx\n", hr); + ok(hr == E_POINTER, "get_Duration failed: %08lx\n", hr);
hr = IRepetitionPattern_get_Interval(pattern, NULL); ok(hr == E_POINTER, "get_Interval failed: %08lx\n", hr);
duration = (BSTR)0xdeadbeef; hr = IRepetitionPattern_get_Duration(pattern, &duration); - todo_wine ok(hr == S_OK, "get_Duration failed: %08lx\n", hr); - todo_wine ok(duration == NULL, "duration not set\n"); + ok(hr == S_OK, "get_Duration failed: %08lx\n", hr); + ok(duration == NULL, "duration not set\n");
interval = (BSTR)0xdeadbeef; hr = IRepetitionPattern_get_Interval(pattern, &interval);