msxml3: Allow creating floating attributes.

Signed-off-by: Daniel Lehman <dlehman25@gmail.com>
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Daniel Lehman 2018-10-15 21:14:33 -07:00 committed by Alexandre Julliard
parent 377243b411
commit 27980430a0
4 changed files with 11 additions and 4 deletions

View file

@ -50,6 +50,7 @@ typedef struct _domattr
xmlnode node;
IXMLDOMAttribute IXMLDOMAttribute_iface;
LONG ref;
BOOL floating;
} domattr;
static const tid_t domattr_se_tids[] = {
@ -116,6 +117,11 @@ static ULONG WINAPI domattr_Release(
if ( ref == 0 )
{
destroy_xmlnode(&This->node);
if ( This->floating )
{
xmlFreeNs( This->node.node->ns );
xmlFreeNode( This->node.node );
}
heap_free( This );
}
@ -709,7 +715,7 @@ static dispex_static_data_t domattr_dispex = {
domattr_iface_tids
};
IUnknown* create_attribute( xmlNodePtr attribute )
IUnknown* create_attribute( xmlNodePtr attribute, BOOL floating )
{
domattr *This;
@ -719,6 +725,7 @@ IUnknown* create_attribute( xmlNodePtr attribute )
This->IXMLDOMAttribute_iface.lpVtbl = &domattr_vtbl;
This->ref = 1;
This->floating = floating;
init_xmlnode(&This->node, attribute, (IXMLDOMNode*)&This->IXMLDOMAttribute_iface, &domattr_dispex);

View file

@ -1398,7 +1398,7 @@ static HRESULT WINAPI domelem_getAttributeNode(
if (attr)
{
IUnknown *unk = create_attribute((xmlNodePtr)attr);
IUnknown *unk = create_attribute((xmlNodePtr)attr, FALSE);
hr = IUnknown_QueryInterface(unk, &IID_IXMLDOMAttribute, (void**)attributeNode);
IUnknown_Release(unk);
}

View file

@ -252,7 +252,7 @@ extern IUnknown *create_domdoc( xmlNodePtr ) DECLSPEC_HIDDEN;
extern IUnknown *create_xmldoc( void ) DECLSPEC_HIDDEN;
extern IXMLDOMNode *create_node( xmlNodePtr ) DECLSPEC_HIDDEN;
extern IUnknown *create_element( xmlNodePtr ) DECLSPEC_HIDDEN;
extern IUnknown *create_attribute( xmlNodePtr ) DECLSPEC_HIDDEN;
extern IUnknown *create_attribute( xmlNodePtr, BOOL ) DECLSPEC_HIDDEN;
extern IUnknown *create_text( xmlNodePtr ) DECLSPEC_HIDDEN;
extern IUnknown *create_pi( xmlNodePtr ) DECLSPEC_HIDDEN;
extern IUnknown *create_comment( xmlNodePtr ) DECLSPEC_HIDDEN;

View file

@ -2271,7 +2271,7 @@ IXMLDOMNode *create_node( xmlNodePtr node )
pUnk = create_element( node );
break;
case XML_ATTRIBUTE_NODE:
pUnk = create_attribute( node );
pUnk = create_attribute( node, FALSE );
break;
case XML_TEXT_NODE:
pUnk = create_text( node );