Module: wine Branch: master Commit: 6ab3f1ae9940351f0a26d09516f185f452e9a8b9 URL: http://source.winehq.org/git/wine.git/?a=commit;h=6ab3f1ae9940351f0a26d09516...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Fri Jun 22 22:36:04 2012 +0400
msxml3: Return stream reference from get_output() if stream is set.
---
dlls/msxml3/mxwriter.c | 11 ++++++++--- dlls/msxml3/tests/saxreader.c | 13 +++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/dlls/msxml3/mxwriter.c b/dlls/msxml3/mxwriter.c index 81d498e..0382690 100644 --- a/dlls/msxml3/mxwriter.c +++ b/dlls/msxml3/mxwriter.c @@ -755,6 +755,8 @@ static HRESULT WINAPI mxwriter_get_output(IMXWriter *iface, VARIANT *dest)
TRACE("(%p)->(%p)\n", This, dest);
+ if (!dest) return E_POINTER; + if (!This->dest) { HRESULT hr = flush_output_buffer(This); @@ -766,10 +768,13 @@ static HRESULT WINAPI mxwriter_get_output(IMXWriter *iface, VARIANT *dest)
return S_OK; } - else - FIXME("not implemented when stream is set up\n");
- return E_NOTIMPL; + /* we only support IStream output so far */ + V_VT(dest) = VT_UNKNOWN; + V_UNKNOWN(dest) = (IUnknown*)This->dest; + IStream_AddRef(This->dest); + + return S_OK; }
static HRESULT WINAPI mxwriter_put_encoding(IMXWriter *iface, BSTR encoding) diff --git a/dlls/msxml3/tests/saxreader.c b/dlls/msxml3/tests/saxreader.c index c9480a9..e7e3172 100644 --- a/dlls/msxml3/tests/saxreader.c +++ b/dlls/msxml3/tests/saxreader.c @@ -2821,6 +2821,7 @@ static void test_mxwriter_flush(void) VARIANT dest; HRESULT hr; char *buff; + LONG ref;
hr = CoCreateInstance(&CLSID_MXXMLWriter, NULL, CLSCTX_INPROC_SERVER, &IID_IMXWriter, (void**)&writer); @@ -2930,6 +2931,18 @@ static void test_mxwriter_flush(void) todo_wine ok(pos2.QuadPart != 0, "unexpected stream beginning\n");
+ hr = IMXWriter_get_output(writer, NULL); + EXPECT_HR(hr, E_POINTER); + + ref = get_refcount(stream); + V_VT(&dest) = VT_EMPTY; + hr = IMXWriter_get_output(writer, &dest); + EXPECT_HR(hr, S_OK); + ok(V_VT(&dest) == VT_UNKNOWN, "got vt type %d\n", V_VT(&dest)); + ok(V_UNKNOWN(&dest) == (IUnknown*)stream, "got pointer %p\n", V_UNKNOWN(&dest)); + ok(ref+1 == get_refcount(stream), "expected increased refcount\n"); + VariantClear(&dest); + hr = ISAXContentHandler_endDocument(content); EXPECT_HR(hr, S_OK);