Nikolay Sivov : msxml3: Don' t make a variant copy if no need to for setting node value.
Module: wine Branch: master Commit: d4d92616b9ebc0c93354ebb2c435a85264ec8b1b URL: http://source.winehq.org/git/wine.git/?a=commit;h=d4d92616b9ebc0c93354ebb2c4... Author: Nikolay Sivov <nsivov(a)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; }
participants (1)
-
Alexandre Julliard