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