Nikolay Sivov : msxml3: Avoid unneeded variant copy in setAttribute(), leak fixed as a side effect.
Alexandre Julliard
julliard at winehq.org
Fri Mar 1 12:42:23 CST 2013
Module: wine
Branch: master
Commit: 2907ad98c03090377a810346bececf1cd992f4bb
URL: http://source.winehq.org/git/wine.git/?a=commit;h=2907ad98c03090377a810346bececf1cd992f4bb
Author: Nikolay Sivov <nsivov at 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;
}
More information about the wine-cvs
mailing list