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