Huw Davies : msxml: Add ISupportErrorInfo for named node maps.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri Feb 10 08:55:14 CST 2006
Module: wine
Branch: refs/heads/master
Commit: 5673a58297d5b7cbc75d6a5357974c625f299474
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=5673a58297d5b7cbc75d6a5357974c625f299474
Author: Huw Davies <huw at codeweavers.com>
Date: Fri Feb 10 15:14:33 2006 +0100
msxml: Add ISupportErrorInfo for named node maps.
---
dlls/msxml3/nodemap.c | 57 ++++++++++++++++++++++++++++++++++++++++++--
dlls/msxml3/tests/domdoc.c | 11 ++++++++
2 files changed, 65 insertions(+), 3 deletions(-)
diff --git a/dlls/msxml3/nodemap.c b/dlls/msxml3/nodemap.c
index 5166020..4edb950 100644
--- a/dlls/msxml3/nodemap.c
+++ b/dlls/msxml3/nodemap.c
@@ -41,6 +41,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(msxml);
typedef struct _xmlnodemap
{
const struct IXMLDOMNamedNodeMapVtbl *lpVtbl;
+ const struct ISupportErrorInfoVtbl *lpSEIVtbl;
LONG ref;
IXMLDOMNode *node;
} xmlnodemap;
@@ -50,19 +51,28 @@ static inline xmlnodemap *impl_from_IXML
return (xmlnodemap *)((char*)iface - FIELD_OFFSET(xmlnodemap, lpVtbl));
}
+static inline xmlnodemap *impl_from_ISupportErrorInfo( ISupportErrorInfo *iface )
+{
+ return (xmlnodemap *)((char*)iface - FIELD_OFFSET(xmlnodemap, lpSEIVtbl));
+}
+
static HRESULT WINAPI xmlnodemap_QueryInterface(
IXMLDOMNamedNodeMap *iface,
REFIID riid, void** ppvObject )
{
+ xmlnodemap *This = impl_from_IXMLDOMNamedNodeMap( iface );
TRACE("%p %s %p\n", iface, debugstr_guid(riid), ppvObject);
- if( IsEqualGUID( riid, &IID_IXMLDOMElement ) ||
- IsEqualGUID( riid, &IID_IUnknown ) ||
+ if( IsEqualGUID( riid, &IID_IUnknown ) ||
IsEqualGUID( riid, &IID_IDispatch ) ||
- IsEqualGUID( riid, &IID_IXMLDOMNode ) )
+ IsEqualGUID( riid, &IID_IXMLDOMNamedNodeMap ) )
{
*ppvObject = iface;
}
+ else if( IsEqualGUID( riid, &IID_ISupportErrorInfo ))
+ {
+ *ppvObject = &This->lpSEIVtbl;
+ }
else
{
FIXME("interface %s not implemented\n", debugstr_guid(riid));
@@ -321,6 +331,46 @@ static const struct IXMLDOMNamedNodeMapV
xmlnodemap__newEnum,
};
+static HRESULT WINAPI support_error_QueryInterface(
+ ISupportErrorInfo *iface,
+ REFIID riid, void** ppvObject )
+{
+ xmlnodemap *This = impl_from_ISupportErrorInfo( iface );
+ TRACE("%p %s %p\n", iface, debugstr_guid(riid), ppvObject);
+
+ return IXMLDOMNamedNodeMap_QueryInterface((IXMLDOMNamedNodeMap*)&This->lpVtbl, riid, ppvObject);
+}
+
+static ULONG WINAPI support_error_AddRef(
+ ISupportErrorInfo *iface )
+{
+ xmlnodemap *This = impl_from_ISupportErrorInfo( iface );
+ return IXMLDOMNamedNodeMap_AddRef((IXMLDOMNamedNodeMap*)&This->lpVtbl);
+}
+
+static ULONG WINAPI support_error_Release(
+ ISupportErrorInfo *iface )
+{
+ xmlnodemap *This = impl_from_ISupportErrorInfo( iface );
+ return IXMLDOMNamedNodeMap_Release((IXMLDOMNamedNodeMap*)&This->lpVtbl);
+}
+
+static HRESULT WINAPI support_error_InterfaceSupportsErrorInfo(
+ ISupportErrorInfo *iface,
+ REFIID riid )
+{
+ FIXME("(%p)->(%s)\n", iface, debugstr_guid(riid));
+ return S_FALSE;
+}
+
+static const struct ISupportErrorInfoVtbl support_error_vtbl =
+{
+ support_error_QueryInterface,
+ support_error_AddRef,
+ support_error_Release,
+ support_error_InterfaceSupportsErrorInfo
+};
+
IXMLDOMNamedNodeMap *create_nodemap( IXMLDOMNode *node )
{
xmlnodemap *nodemap;
@@ -330,6 +380,7 @@ IXMLDOMNamedNodeMap *create_nodemap( IXM
return NULL;
nodemap->lpVtbl = &xmlnodemap_vtbl;
+ nodemap->lpSEIVtbl = &support_error_vtbl;
nodemap->node = node;
nodemap->ref = 1;
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index 5d745ce..901afc5 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -347,6 +347,17 @@ void test_domnode( void )
if (map)
{
+ ISupportErrorInfo *support_error;
+ r = IXMLDOMNamedNodeMap_QueryInterface( map, &IID_ISupportErrorInfo, (LPVOID*)&support_error );
+ ok( r == S_OK, "ret %08lx\n", r );
+
+ r = ISupportErrorInfo_InterfaceSupportsErrorInfo( support_error, &IID_IXMLDOMNamedNodeMap );
+todo_wine
+{
+ ok( r == S_OK, "ret %08lx\n", r );
+}
+ ISupportErrorInfo_Release( support_error );
+
str = SysAllocString( szdl );
r = IXMLDOMNamedNodeMap_getNamedItem( map, str, &node );
ok( r == S_OK, "getNamedItem returned wrong code\n");
More information about the wine-cvs
mailing list