msxml3: Added ISAXXMLReader_putContentHandler implementation.
diff --git a/dlls/msxml3/saxreader.c b/dlls/msxml3/saxreader.c
index e7c2d21..b2e5418 100644
--- a/dlls/msxml3/saxreader.c
+++ b/dlls/msxml3/saxreader.c
@@ -49,6 +49,7 @@
const struct IVBSAXXMLReaderVtbl *lpVtbl;
const struct ISAXXMLReaderVtbl *lpSAXXMLReaderVtbl;
LONG ref;
+ struct ISAXContentHandler *contentHandler;
xmlSAXHandler sax;
} saxreader;
@@ -111,6 +112,9 @@
ref = InterlockedDecrement( &This->ref );
if ( ref == 0 )
{
+ if(This->contentHandler)
+ ISAXContentHandler_Release(This->contentHandler);
+
HeapFree( GetProcessHeap(), 0, This );
}
@@ -505,12 +509,8 @@
{
saxreader *This = impl_from_ISAXXMLReader( iface );
- TRACE("(%p)->(%p)\n", This, pContentHandler);
- if(This->contentHandler)
- ISAXContentHandler_AddRef(This->contentHandler);
- *pContentHandler = This->contentHandler;
-
- return S_OK;
+ FIXME("(%p)->(%p) stub\n", This, pContentHandler);
+ return E_NOTIMPL;
}
static HRESULT WINAPI isaxxmlreader_putContentHandler(
@@ -519,8 +519,14 @@
{
saxreader *This = impl_from_ISAXXMLReader( iface );
- FIXME("(%p)->(%p) stub\n", This, contentHandler);
- return E_NOTIMPL;
+ TRACE("(%p)->(%p)\n", This, contentHandler);
+ if(contentHandler)
+ ISAXContentHandler_AddRef(contentHandler);
+ if(This->contentHandler)
+ ISAXContentHandler_Release(This->contentHandler);
+ This->contentHandler = contentHandler;
+
+ return S_OK;
}
static HRESULT WINAPI isaxxmlreader_getDTDHandler(
@@ -661,6 +667,7 @@
reader->lpVtbl = &saxreader_vtbl;
reader->lpSAXXMLReaderVtbl = &isaxreader_vtbl;
reader->ref = 1;
+ reader->contentHandler = NULL;
*ppObj = &reader->lpVtbl;