Ignore this patch.
"Alistair Leslie-Hughes" <leslie_alistair(a)hotmail.com> wrote in message
news:49269ECA.7070202@hotmail.com...
> 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 <leslie_alistair(a)hotmail.com>
> Date: Fri, 21 Nov 2008 21:36:30 +1100
> Subject: [PATCH] Implement IXMLDOMAttribute get/put value
> To: wine-patches <wine-patches(a)winehq.org>
>
> ---
> 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
>
>
--------------------------------------------------------------------------------
>
>