[2/2] msxml3: Stub support for external entity resolver (try2)

Nikolay Sivov nsivov at codeweavers.com
Fri Nov 16 08:53:11 CST 2012


try2: fixed test failures

-------------- next part --------------
>From f8f1142d7bde3ba7ae4a48da8c50249f3e599cdf Mon Sep 17 00:00:00 2001
From: Nikolay Sivov <nsivov at codeweavers.com>
Date: Fri, 16 Nov 2012 16:46:36 -0500
Subject: [PATCH 2/2] Stub support for external entity resolver

---
 dlls/msxml3/saxreader.c       |   49 +++++++++++++++++++----------------------
 dlls/msxml3/tests/saxreader.c |    9 ++++++++
 2 files changed, 32 insertions(+), 26 deletions(-)

diff --git a/dlls/msxml3/saxreader.c b/dlls/msxml3/saxreader.c
index 21c5b4f..073a00c 100644
--- a/dlls/msxml3/saxreader.c
+++ b/dlls/msxml3/saxreader.c
@@ -168,6 +168,7 @@ enum saxhandler_type
     SAXContentHandler = 0,
     SAXDeclHandler,
     SAXDTDHandler,
+    SAXEntityResolver,
     SAXErrorHandler,
     SAXLexicalHandler,
     SAXHandler_Last
@@ -197,10 +198,17 @@ struct saxlexicalhandler_iface
     IVBSAXLexicalHandler *vbhandler;
 };
 
+struct saxentityresolver_iface
+{
+    ISAXEntityResolver *handler;
+    IVBSAXEntityResolver *vbhandler;
+};
+
 struct saxhandler_iface
 {
     union {
         struct saxcontenthandler_iface content;
+        struct saxentityresolver_iface entityresolver;
         struct saxerrorhandler_iface error;
         struct saxlexicalhandler_iface lexical;
         struct saxanyhandler_iface anyhandler;
@@ -1843,6 +1851,12 @@ static void libxmlCDataBlock(void *ctx, const xmlChar *value, int len)
     This->column += 4+end-cur;
 }
 
+static xmlParserInputPtr libxmlresolveentity(void *ctx, const xmlChar *publicid, const xmlChar *systemid)
+{
+    FIXME("entity resolving not implemented, %s, %s\n", publicid, systemid);
+    return xmlSAX2ResolveEntity(ctx, publicid, systemid);
+}
+
 /*** IVBSAXLocator interface ***/
 /*** IUnknown methods ***/
 static HRESULT WINAPI ivbsaxlocator_QueryInterface(IVBSAXLocator* iface, REFIID riid, void **ppvObject)
@@ -2377,24 +2391,6 @@ static HRESULT internal_parseStream(saxreader *This, ISequentialStream *stream,
     return hr;
 }
 
-static HRESULT internal_getEntityResolver(
-        saxreader *This,
-        void *pEntityResolver,
-        BOOL vbInterface)
-{
-    FIXME("(%p)->(%p) stub\n", This, pEntityResolver);
-    return E_NOTIMPL;
-}
-
-static HRESULT internal_putEntityResolver(
-        saxreader *This,
-        void *pEntityResolver,
-        BOOL vbInterface)
-{
-    FIXME("(%p)->(%p) stub\n", This, pEntityResolver);
-    return E_NOTIMPL;
-}
-
 static HRESULT internal_parse(
         saxreader* This,
         VARIANT varInput,
@@ -2877,18 +2873,18 @@ static HRESULT WINAPI saxxmlreader_putProperty(
 
 static HRESULT WINAPI saxxmlreader_get_entityResolver(
     IVBSAXXMLReader* iface,
-    IVBSAXEntityResolver **pEntityResolver)
+    IVBSAXEntityResolver **resolver)
 {
     saxreader *This = impl_from_IVBSAXXMLReader( iface );
-    return internal_getEntityResolver(This, pEntityResolver, TRUE);
+    return saxreader_get_handler(This, SAXEntityResolver, TRUE, (void**)resolver);
 }
 
 static HRESULT WINAPI saxxmlreader_put_entityResolver(
     IVBSAXXMLReader* iface,
-    IVBSAXEntityResolver *pEntityResolver)
+    IVBSAXEntityResolver *resolver)
 {
     saxreader *This = impl_from_IVBSAXXMLReader( iface );
-    return internal_putEntityResolver(This, pEntityResolver, TRUE);
+    return saxreader_put_handler(This, SAXEntityResolver, resolver, TRUE);
 }
 
 static HRESULT WINAPI saxxmlreader_get_contentHandler(
@@ -3084,18 +3080,18 @@ static HRESULT WINAPI isaxxmlreader_putProperty(
 
 static HRESULT WINAPI isaxxmlreader_getEntityResolver(
         ISAXXMLReader* iface,
-        ISAXEntityResolver **ppEntityResolver)
+        ISAXEntityResolver **resolver)
 {
     saxreader *This = impl_from_ISAXXMLReader( iface );
-    return internal_getEntityResolver(This, ppEntityResolver, FALSE);
+    return saxreader_get_handler(This, SAXEntityResolver, FALSE, (void**)resolver);
 }
 
 static HRESULT WINAPI isaxxmlreader_putEntityResolver(
         ISAXXMLReader* iface,
-        ISAXEntityResolver *pEntityResolver)
+        ISAXEntityResolver *resolver)
 {
     saxreader *This = impl_from_ISAXXMLReader( iface );
-    return internal_putEntityResolver(This, pEntityResolver, FALSE);
+    return saxreader_put_handler(This, SAXEntityResolver, resolver, FALSE);
 }
 
 static HRESULT WINAPI isaxxmlreader_getContentHandler(
@@ -3264,6 +3260,7 @@ HRESULT SAXXMLReader_create(MSXML_VERSION version, IUnknown *outer, LPVOID *ppOb
     reader->sax.error = libxmlFatalError;
     reader->sax.fatalError = libxmlFatalError;
     reader->sax.cdataBlock = libxmlCDataBlock;
+    reader->sax.resolveEntity = libxmlresolveentity;
 
     *ppObj = &reader->IVBSAXXMLReader_iface;
 
diff --git a/dlls/msxml3/tests/saxreader.c b/dlls/msxml3/tests/saxreader.c
index bcf7529..02bc00c 100644
--- a/dlls/msxml3/tests/saxreader.c
+++ b/dlls/msxml3/tests/saxreader.c
@@ -1903,6 +1903,7 @@ static void test_saxreader(void)
     while (table->clsid)
     {
         struct call_entry *test_seq;
+        ISAXEntityResolver *resolver;
         BSTR str;
 
         if (!is_clsid_supported(table->clsid, reader_support_data))
@@ -2220,6 +2221,14 @@ static void test_saxreader(void)
         EXPECT_HR(hr, S_OK);
         ok_sequence(sequences, CONTENT_HANDLER_INDEX, test_seq, "attribute value normalization", TRUE);
 
+        resolver = (void*)0xdeadbeef;
+        hr = ISAXXMLReader_getEntityResolver(reader, &resolver);
+        ok(hr == S_OK, "got 0x%08x\n", hr);
+        ok(resolver == NULL, "got %p\n", resolver);
+
+        hr = ISAXXMLReader_putEntityResolver(reader, NULL);
+        ok(hr == S_OK || broken(hr == E_FAIL), "got 0x%08x\n", hr);
+
         ISAXXMLReader_Release(reader);
         table++;
     }
-- 
1.7.10.4




More information about the wine-patches mailing list