[PATCH 2/3] msxml3: Copy namespaces as attributes.

Nikolay Sivov nsivov at codeweavers.com
Fri Aug 31 01:08:16 CDT 2018


On 08/26/2018 07:27 PM, Daniel Lehman wrote:

>   static HRESULT WINAPI xmlnodemap_get_item(
>       IXMLDOMNamedNodeMap *iface,
>       LONG index,
>       IXMLDOMNode** item)
>   {
> +    HRESULT hr;
> +    xmlAttrPtr cur;
> +    struct list *ptr;
> +    nsattr_entry *nsattr;
>       xmlnodemap *This = impl_from_IXMLDOMNamedNodeMap( iface );
>   
>       TRACE("(%p)->(%d %p)\n", This, index, item);
>   
> -    return This->funcs->get_item(This->node, index, item);
> +    hr = This->funcs->get_item(This->node, index, item);
> +    if (hr != S_FALSE)
> +        return hr;
> +
> +    ptr = list_head(&This->nsattrs);
> +    if (!ptr)
> +    {
> +        if (!This->node->nsDef)
> +            return S_FALSE;
> +
> +        if (This->node->nsDef)
> +        {
> +            hr = copy_ns_as_attrs(This);
> +            if (FAILED(hr))
> +                return hr;
> +        }
> +
> +        ptr = list_head(&This->nsattrs);
> +        if (!ptr)
> +            return FALSE;
> +    }
> +
> +    if (This->node->properties)
> +    {
> +        --index;
> +        cur = This->node->properties;
> +        while (cur->next)
> +        {
> +            --index;
> +            cur = cur->next;
> +        }
> +    }
> +
> +    if (index < 0)
> +        return S_FALSE;
> +
> +    while (index--)
> +        ptr = list_next(ptr, ptr);
> +
> +    nsattr = LIST_ENTRY(ptr, nsattr_entry, entry);
> +    cur = nsattr->attr;
> +    *item = create_node((xmlNodePtr) cur);
> +
> +    return S_OK;
>   }
This only applies to elements, so such fixup should happen there, not in 
generic nodemap method.



More information about the wine-devel mailing list