Nikolay Sivov : msxml3: Implement put/ get for DTD handler callback interface.
Alexandre Julliard
julliard at winehq.org
Mon Jul 16 14:14:29 CDT 2012
Module: wine
Branch: master
Commit: 2bff764df07e7c9830299f0e0b1d14f4d334f8bb
URL: http://source.winehq.org/git/wine.git/?a=commit;h=2bff764df07e7c9830299f0e0b1d14f4d334f8bb
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Sat Jul 14 23:05:34 2012 +0400
msxml3: Implement put/get for DTD handler callback interface.
---
dlls/msxml3/saxreader.c | 61 +++++++++++++++++++++++++++++++++++++---------
1 files changed, 49 insertions(+), 12 deletions(-)
diff --git a/dlls/msxml3/saxreader.c b/dlls/msxml3/saxreader.c
index 485644a..1125d1c 100644
--- a/dlls/msxml3/saxreader.c
+++ b/dlls/msxml3/saxreader.c
@@ -177,6 +177,8 @@ typedef struct
IVBSAXLexicalHandler *vblexicalHandler;
ISAXDeclHandler *declHandler;
IVBSAXDeclHandler *vbdeclHandler;
+ ISAXDTDHandler *dtdHandler;
+ IVBSAXDTDHandler *vbdtdHandler;
xmlSAXHandler sax;
BOOL isParsing;
struct bstrpool pool;
@@ -2358,22 +2360,49 @@ static HRESULT internal_putContentHandler(
return S_OK;
}
-static HRESULT internal_getDTDHandler(
- saxreader* This,
- void *pDTDHandler,
- BOOL vbInterface)
+static HRESULT internal_getDTDHandler(saxreader* This, void *dtdHandler, BOOL vbInterface)
{
- FIXME("(%p)->(%p) stub\n", This, pDTDHandler);
- return E_NOTIMPL;
+ TRACE("(%p)->(%p)\n", This, dtdHandler);
+
+ if (!dtdHandler) return E_POINTER;
+
+ if ((vbInterface && This->vbdtdHandler) || (!vbInterface && This->dtdHandler))
+ {
+ if (vbInterface)
+ IVBSAXContentHandler_AddRef(This->vbdtdHandler);
+ else
+ ISAXContentHandler_AddRef(This->dtdHandler);
+ }
+ if (vbInterface) *(IVBSAXDTDHandler**)dtdHandler = This->vbdtdHandler;
+ else *(ISAXDTDHandler**)dtdHandler = This->dtdHandler;
+
+ return S_OK;
}
-static HRESULT internal_putDTDHandler(
- saxreader* This,
- void *pDTDHandler,
- BOOL vbInterface)
+static HRESULT internal_putDTDHandler(saxreader* This, void *dtdHandler, BOOL vbInterface)
{
- FIXME("(%p)->(%p) stub\n", This, pDTDHandler);
- return E_NOTIMPL;
+ TRACE("(%p)->(%p)\n", This, dtdHandler);
+
+ if (dtdHandler)
+ {
+ if (vbInterface)
+ IVBSAXDTDHandler_AddRef((IVBSAXDTDHandler*)dtdHandler);
+ else
+ ISAXDTDHandler_AddRef((ISAXDTDHandler*)dtdHandler);
+ }
+ if ((vbInterface && This->vbdtdHandler) || (!vbInterface && This->dtdHandler))
+ {
+ if (vbInterface)
+ IVBSAXDTDHandler_Release(This->vbdtdHandler);
+ else
+ ISAXDTDHandler_Release(This->dtdHandler);
+ }
+ if (vbInterface)
+ This->vbdtdHandler = dtdHandler;
+ else
+ This->dtdHandler = dtdHandler;
+
+ return S_OK;
}
static HRESULT internal_getErrorHandler(
@@ -2809,6 +2838,12 @@ static ULONG WINAPI saxxmlreader_Release(
if(This->vbdeclHandler)
IVBSAXDeclHandler_Release(This->vbdeclHandler);
+ if(This->dtdHandler)
+ ISAXDTDHandler_Release(This->dtdHandler);
+
+ if(This->vbdtdHandler)
+ IVBSAXDTDHandler_Release(This->vbdtdHandler);
+
free_bstr_pool(&This->pool);
release_dispex(&This->dispex);
@@ -3306,6 +3341,8 @@ HRESULT SAXXMLReader_create(MSXML_VERSION version, IUnknown *outer, LPVOID *ppOb
reader->vblexicalHandler = NULL;
reader->declHandler = NULL;
reader->vbdeclHandler = NULL;
+ reader->dtdHandler = NULL;
+ reader->vbdtdHandler = NULL;
reader->isParsing = FALSE;
reader->pool.pool = NULL;
reader->pool.index = 0;
More information about the wine-cvs
mailing list