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