Nikolay Sivov : msxml3: Don' t make a variant copy if no need to for setting node value.

Alexandre Julliard julliard at winehq.org
Fri Mar 1 12:42:23 CST 2013


Module: wine
Branch: master
Commit: d4d92616b9ebc0c93354ebb2c435a85264ec8b1b
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=d4d92616b9ebc0c93354ebb2c435a85264ec8b1b

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Fri Mar  1 09:02:49 2013 +0400

msxml3: Don't make a variant copy if no need to for setting node value.

---

 dlls/msxml3/node.c |   48 ++++++++++++++++++++++++++++++------------------
 1 files changed, 30 insertions(+), 18 deletions(-)

diff --git a/dlls/msxml3/node.c b/dlls/msxml3/node.c
index 4508609..be47a75 100644
--- a/dlls/msxml3/node.c
+++ b/dlls/msxml3/node.c
@@ -282,36 +282,48 @@ static HRESULT node_set_content_escaped(xmlnode *This, LPCWSTR value)
 
 HRESULT node_put_value(xmlnode *This, VARIANT *value)
 {
-    VARIANT string_value;
     HRESULT hr;
 
-    VariantInit(&string_value);
-    hr = VariantChangeType(&string_value, value, 0, VT_BSTR);
-    if(FAILED(hr)) {
-        WARN("Couldn't convert to VT_BSTR\n");
-        return hr;
-    }
+    if (V_VT(value) != VT_BSTR)
+    {
+        VARIANT string_value;
+
+        VariantInit(&string_value);
+        hr = VariantChangeType(&string_value, value, 0, VT_BSTR);
+        if(FAILED(hr)) {
+            WARN("Couldn't convert to VT_BSTR\n");
+            return hr;
+        }
 
-    hr = node_set_content(This, V_BSTR(&string_value));
-    VariantClear(&string_value);
+        hr = node_set_content(This, V_BSTR(&string_value));
+        VariantClear(&string_value);
+    }
+    else
+        hr = node_set_content(This, V_BSTR(value));
 
     return hr;
 }
 
 HRESULT node_put_value_escaped(xmlnode *This, VARIANT *value)
 {
-    VARIANT string_value;
     HRESULT hr;
 
-    VariantInit(&string_value);
-    hr = VariantChangeType(&string_value, value, 0, VT_BSTR);
-    if(FAILED(hr)) {
-        WARN("Couldn't convert to VT_BSTR\n");
-        return hr;
-    }
+    if (V_VT(value) != VT_BSTR)
+    {
+       VARIANT string_value;
+
+        VariantInit(&string_value);
+        hr = VariantChangeType(&string_value, value, 0, VT_BSTR);
+        if(FAILED(hr)) {
+            WARN("Couldn't convert to VT_BSTR\n");
+            return hr;
+        }
 
-    hr = node_set_content_escaped(This, V_BSTR(&string_value));
-    VariantClear(&string_value);
+        hr = node_set_content_escaped(This, V_BSTR(&string_value));
+        VariantClear(&string_value);
+    }
+    else
+        hr = node_set_content_escaped(This, V_BSTR(value));
 
     return hr;
 }




More information about the wine-cvs mailing list