Ignore this patch. "Alistair Leslie-Hughes" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > Hi, > > Changelog: > msxml3: Implement IXMLDOMAttribute get/put value > > Best Regards > Alistair Leslie-Hughes > > >
-------------------------------------------------------------------------------- > From 485959eb359d1efdf66c4be1aa110ba47877847c Mon Sep 17 00:00:00 2001 > From: Alistair Leslie-Hughes <[EMAIL PROTECTED]> > Date: Fri, 21 Nov 2008 21:36:30 +1100 > Subject: [PATCH] Implement IXMLDOMAttribute get/put value > To: wine-patches <[EMAIL PROTECTED]> > > --- > dlls/msxml3/attribute.c | 8 ++++---- > dlls/msxml3/node.c | 21 +++++++++++++++------ > dlls/msxml3/tests/domdoc.c | 30 ++++++++++++++++++++++++++++++ > 3 files changed, 49 insertions(+), 10 deletions(-) > > diff --git a/dlls/msxml3/attribute.c b/dlls/msxml3/attribute.c > index 2681a76..92cafad 100644 > --- a/dlls/msxml3/attribute.c > +++ b/dlls/msxml3/attribute.c > @@ -482,16 +482,16 @@ static HRESULT WINAPI domattr_get_value( > IXMLDOMAttribute *iface, > VARIANT *var1) > { > - FIXME("\n"); > - return E_NOTIMPL; > + domattr *This = impl_from_IXMLDOMAttribute( iface ); > + return IXMLDOMNode_get_nodeValue( This->node, var1 ); > } > > static HRESULT WINAPI domattr_put_value( > IXMLDOMAttribute *iface, > VARIANT var1) > { > - FIXME("\n"); > - return E_NOTIMPL; > + domattr *This = impl_from_IXMLDOMAttribute( iface ); > + return IXMLDOMNode_put_nodeValue( This->node, var1 ); > } > > static const struct IXMLDOMAttributeVtbl domattr_vtbl = > diff --git a/dlls/msxml3/node.c b/dlls/msxml3/node.c > index 19cee8f..6693803 100644 > --- a/dlls/msxml3/node.c > +++ b/dlls/msxml3/node.c > @@ -339,13 +339,22 @@ static HRESULT WINAPI xmlnode_put_nodeValue( > > TRACE("%p type(%d)\n", This, This->node->type); > > - VariantInit(&string_value); > - hr = VariantChangeType(&string_value, &value, 0, VT_BSTR); > - if(FAILED(hr)) > + /* Attribute nodes treat NULL Variants as empty strings. */ > + if(V_VT(&value) == VT_NULL && This->node->type == XML_ATTRIBUTE_NODE) > { > - VariantClear(&string_value); > - WARN("Couldn't convert to VT_BSTR\n"); > - return hr; > + V_VT(&string_value) = VT_BSTR; > + V_BSTR(&string_value) = SysAllocStringLen(NULL, 0); > + } > + else > + { > + VariantInit(&string_value); > + hr = VariantChangeType(&string_value, &value, 0, VT_BSTR); > + if(FAILED(hr)) > + { > + VariantClear(&string_value); > + WARN("Couldn't convert to VT_BSTR\n"); > + return hr; > + } > } > > hr = S_FALSE; > diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c > index e27c506..c975d73 100644 > --- a/dlls/msxml3/tests/domdoc.c > +++ b/dlls/msxml3/tests/domdoc.c > @@ -2796,12 +2796,18 @@ static void test_xmlTypes(void) > ok( V_VT(&v) == VT_NULL, "incorrect dataType type\n"); > VariantClear(&v); > > + V_VT(&v) = VT_NULL; > + V_I4(&v) = 0; > + hr = IXMLDOMElement_put_nodeValue(pElement, v); > + ok(hr == DISP_E_TYPEMISMATCH, "ret %08x\n", hr ); > + > /* Attribute */ > hr = IXMLDOMDocument_createAttribute(doc, szAttribute, > &pAttrubute); > ok(hr == S_OK, "ret %08x\n", hr ); > if(hr == S_OK) > { > IXMLDOMNode *pNewChild = (IXMLDOMNode *)0x1; > + IXMLDOMNode *pAttrNode = NULL; > > hr = IXMLDOMAttribute_get_nextSibling(pAttrubute, > NULL); > ok(hr == E_INVALIDARG, "ret %08x\n", hr ); > @@ -2876,6 +2882,30 @@ static void test_xmlTypes(void) > ok( V_VT(&v) == VT_NULL, "incorrect dataType type\n"); > VariantClear(&v); > > + /* test value */ > + V_VT(&v) = VT_NULL; > + VariantClear(&v); > + hr = IXMLDOMAttribute_put_value(pAttrubute, v); > + ok(hr == S_OK, "ret %08x\n", hr ); > + VariantClear(&v); > + > + hr = IXMLDOMAttribute_get_value(pAttrubute, &v); > + ok(hr == S_OK, "ret %08x\n", hr ); > + ok( !lstrcmpW( V_BSTR(&v), _bstr_("") ), "incorrect > get_value string\n"); > + VariantClear(&v); > + > + IXMLDOMAttribute_QueryInterface(pAttrubute, > &IID_IXMLDOMNode, (LPVOID*)&pAttrNode); > + if(hr == S_OK) > + { > + V_VT(&v) = VT_NULL; > + VariantClear(&v); > + hr = IXMLDOMNode_put_nodeValue(pAttrNode, v); > + ok(hr == S_OK, "ret %08x\n", hr ); > + VariantClear(&v); > + > + IXMLDOMNode_Release(pAttrNode); > + } > + > IXMLDOMAttribute_Release(pAttrubute); > > /* Check Element again with the Add Attribute*/ > -- > 1.5.4.3 > > -------------------------------------------------------------------------------- > >