[2/2] msxml3: Stub support for external entity resolver
Nikolay Sivov
nsivov at codeweavers.com
Fri Nov 16 07:25:19 CST 2012
Stub support for external entity resolver
-------------- next part --------------
>From 70b22766670927e6688adbccc27b952521c83953 Mon Sep 17 00:00:00 2001
From: Nikolay Sivov <nsivov at codeweavers.com>
Date: Thu, 15 Nov 2012 23:34:07 -0500
Subject: [PATCH 2/2] Stub support for external entity resolver
---
dlls/msxml3/saxreader.c | 51 ++++++++++++++++++++---------------------
dlls/msxml3/tests/saxreader.c | 9 ++++++++
2 files changed, 34 insertions(+), 26 deletions(-)
diff --git a/dlls/msxml3/saxreader.c b/dlls/msxml3/saxreader.c
index 21c5b4f..39d50fd 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,19 @@ 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);
+ if (!resolver) return E_FAIL;
+ return saxreader_put_handler(This, SAXEntityResolver, resolver, TRUE);
}
static HRESULT WINAPI saxxmlreader_get_contentHandler(
@@ -3084,18 +3081,19 @@ 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);
+ if (!resolver) return E_FAIL;
+ return saxreader_put_handler(This, SAXEntityResolver, resolver, FALSE);
}
static HRESULT WINAPI isaxxmlreader_getContentHandler(
@@ -3264,6 +3262,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..7333179 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 == E_FAIL, "got 0x%08x\n", hr);
+
ISAXXMLReader_Release(reader);
table++;
}
--
1.7.10.4
More information about the wine-patches
mailing list