Module: wine Branch: master Commit: 2907ad98c03090377a810346bececf1cd992f4bb URL: http://source.winehq.org/git/wine.git/?a=commit;h=2907ad98c03090377a810346be...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Fri Mar 1 09:08:33 2013 +0400
msxml3: Avoid unneeded variant copy in setAttribute(), leak fixed as a side effect.
---
dlls/msxml3/element.c | 23 +++++++++++++++-------- 1 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/dlls/msxml3/element.c b/dlls/msxml3/element.c index 4892920..929830b 100644 --- a/dlls/msxml3/element.c +++ b/dlls/msxml3/element.c @@ -1228,7 +1228,6 @@ static HRESULT WINAPI domelem_setAttribute( xmlChar *xml_name, *xml_value, *local, *prefix; xmlNodePtr element; HRESULT hr; - VARIANT var;
TRACE("(%p)->(%s %s)\n", This, debugstr_w(name), debugstr_variant(&value));
@@ -1236,16 +1235,25 @@ static HRESULT WINAPI domelem_setAttribute( if ( !element ) return E_FAIL;
- VariantInit(&var); - hr = VariantChangeType(&var, &value, 0, VT_BSTR); - if(hr != S_OK) + if (V_VT(&value) != VT_BSTR) { - FIXME("VariantChangeType failed\n"); - return hr; + VARIANT var; + + VariantInit(&var); + hr = VariantChangeType(&var, &value, 0, VT_BSTR); + if (hr != S_OK) + { + FIXME("VariantChangeType failed\n"); + return hr; + } + + xml_value = xmlchar_from_wchar(V_BSTR(&var)); + VariantClear(&var); } + else + xml_value = xmlchar_from_wchar(V_BSTR(&value));
xml_name = xmlchar_from_wchar( name ); - xml_value = xmlchar_from_wchar( V_BSTR(&var) );
if ((local = xmlSplitQName2(xml_name, &prefix))) { @@ -1268,7 +1276,6 @@ static HRESULT WINAPI domelem_setAttribute(
heap_free(xml_value); heap_free(xml_name); - VariantClear(&var);
return hr; }