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