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;