Nikolay Sivov : msxml3: Return stream reference from get_output() if stream is set.

Alexandre Julliard julliard at winehq.org
Mon Jun 25 13:24:11 CDT 2012


Module: wine
Branch: master
Commit: 6ab3f1ae9940351f0a26d09516f185f452e9a8b9
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=6ab3f1ae9940351f0a26d09516f185f452e9a8b9

Author: Nikolay Sivov <nsivov at 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);
 




More information about the wine-cvs mailing list