Module: wine Branch: master Commit: d4d92616b9ebc0c93354ebb2c435a85264ec8b1b URL: http://source.winehq.org/git/wine.git/?a=commit;h=d4d92616b9ebc0c93354ebb2c4...
Author: Nikolay Sivov nsivov@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; }