msxml3: Implement IXMLDOMAttribute get/put value

Alistair Leslie-Hughes leslie_alistair at hotmail.com
Sun Nov 23 04:07:23 CST 2008


Ignore this patch.

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


--------------------------------------------------------------------------------


>
> 





More information about the wine-devel mailing list