[3/5] msxml3/xsl: Basic put_input() method for IXSLProcessor
Nikolay Sivov
nsivov at codeweavers.com
Tue Feb 15 09:59:32 CST 2011
On 2/15/2011 18:53, Jacek Caban wrote:
> Hi Nikolay,
>
> On 2/14/11 9:04 PM, Nikolay Sivov wrote:
>> Basic put_input() method for IXSLProcessor
>>
>
> + IXMLDOMNode *old_input = This->input;
> + HRESULT hr;
>
> - FIXME("(%p): stub\n", This);
> - return E_NOTIMPL;
> + TRACE("(%p)->(type=%d)\n", This, V_VT(&input));
> +
> + /* try IXMLDOMNode directly first */
> + if (V_VT(&input) == VT_UNKNOWN)
> + hr =
> IUnknown_QueryInterface(V_UNKNOWN(&input),&IID_IXMLDOMNode,
> (void**)&This->input);
> + else if (V_VT(&input) == VT_DISPATCH)
> + hr =
> IDispatch_QueryInterface(V_DISPATCH(&input),&IID_IXMLDOMNode,
> (void**)&This->input);
> +
> + if (hr != S_OK)
> + {
> + IXMLDOMDocument *doc;
> +
> + hr = DOMDocument_create(&CLSID_DOMDocument, NULL, (void**)&doc);
> + if (hr == S_OK)
> + {
> + hr = IXMLDOMDocument_QueryInterface(doc,&IID_IXMLDOMNode,
> (void**)&This->input);
> + IXMLDOMDocument_Release(doc);
> + }
> + }
> +
> + if (hr == S_OK&& old_input) IXMLDOMNode_Release(old_input);
>
> Failure of QueryInterface call will set This->input to NULL (you
> probably want it not changed and even if not, that's a leak). It's
> probably better idea to have local pointer to the new input instead of
> old one and change it once you know the function will succeed.
Right, another thing is that I don't load a document from input variant.
>
> Jacek
>
More information about the wine-devel
mailing list