Module: wine Branch: master Commit: 19c30897d4c64e1f534672eb355aa0f15a17eb95 URL: http://source.winehq.org/git/wine.git/?a=commit;h=19c30897d4c64e1f534672eb35...
Author: Nikolay Sivov bunglehead@gmail.com Date: Tue Feb 16 02:40:16 2010 +0300
msxml3: Simplify ::appendData() for Text, Comment and CDATA nodes.
---
dlls/msxml3/cdata.c | 30 +++++++++++++++++------------- dlls/msxml3/comment.c | 46 ++++++++++++++++++---------------------------- dlls/msxml3/text.c | 31 ++++++++++++++++++------------- 3 files changed, 53 insertions(+), 54 deletions(-)
diff --git a/dlls/msxml3/cdata.c b/dlls/msxml3/cdata.c index 07323ce..12bc03d 100644 --- a/dlls/msxml3/cdata.c +++ b/dlls/msxml3/cdata.c @@ -582,26 +582,30 @@ static HRESULT WINAPI domcdata_appendData( BSTR p) { domcdata *This = impl_from_IXMLDOMCDATASection( iface ); - xmlChar *pContent; - HRESULT hr = S_FALSE; + HRESULT hr; + BSTR data; + LONG p_len;
TRACE("%p %p\n", This, debugstr_w(p));
/* Nothing to do if NULL or an Empty string passed in. */ - if(SysStringLen(p) == 0) - return S_OK; + if((p_len = SysStringLen(p)) == 0) return S_OK;
- pContent = xmlChar_from_wchar( p ); - if(pContent) + hr = IXMLDOMCDATASection_get_data(iface, &data); + if(hr == S_OK) { - if(xmlTextConcat(This->node.node, pContent, SysStringLen(p) ) == 0) - hr = S_OK; - else - hr = E_FAIL; + LONG len = SysStringLen(data); + BSTR str = SysAllocStringLen(NULL, p_len + len); + + memcpy(str, data, len*sizeof(WCHAR)); + memcpy(&str[len], p, p_len*sizeof(WCHAR)); + str[len+p_len] = 0; + + hr = IXMLDOMCDATASection_put_data(iface, str); + + SysFreeString(str); + SysFreeString(data); } - else - hr = E_FAIL; - heap_free(pContent);
return hr; } diff --git a/dlls/msxml3/comment.c b/dlls/msxml3/comment.c index 223c9cc..c669eac 100644 --- a/dlls/msxml3/comment.c +++ b/dlls/msxml3/comment.c @@ -576,40 +576,30 @@ static HRESULT WINAPI domcomment_appendData( BSTR p) { domcomment *This = impl_from_IXMLDOMComment( iface ); - xmlChar *pContent; - HRESULT hr = S_FALSE; + HRESULT hr; + BSTR data; + LONG p_len;
- TRACE("%p\n", iface); + TRACE("%p %s\n", This, debugstr_w(p));
/* Nothing to do if NULL or an Empty string passed in. */ - if(p == NULL || SysStringLen(p) == 0) - return S_OK; + if((p_len = SysStringLen(p)) == 0) return S_OK;
- pContent = xmlChar_from_wchar( p ); - if(pContent) + hr = IXMLDOMComment_get_data(iface, &data); + if(hr == S_OK) { - /* Older versions of libxml < 2.6.27 didn't correctly support - xmlTextConcat on Comment nodes. Fallback to setting the - contents directly if xmlTextConcat fails. - */ - if(xmlTextConcat(This->node.node, pContent, SysStringLen(p) ) == 0) - hr = S_OK; - else - { - xmlChar *pNew; - pNew = xmlStrcat(xmlNodeGetContent(This->node.node), pContent); - if(pNew) - { - xmlNodeSetContent(This->node.node, pNew); - hr = S_OK; - } - else - hr = E_FAIL; - } - HeapFree( GetProcessHeap(), 0, pContent ); + LONG len = SysStringLen(data); + BSTR str = SysAllocStringLen(NULL, p_len + len); + + memcpy(str, data, len*sizeof(WCHAR)); + memcpy(&str[len], p, p_len*sizeof(WCHAR)); + str[len+p_len] = 0; + + hr = IXMLDOMComment_put_data(iface, str); + + SysFreeString(str); + SysFreeString(data); } - else - hr = E_FAIL;
return hr; } diff --git a/dlls/msxml3/text.c b/dlls/msxml3/text.c index 629adb6..e21b203 100644 --- a/dlls/msxml3/text.c +++ b/dlls/msxml3/text.c @@ -584,25 +584,30 @@ static HRESULT WINAPI domtext_appendData( BSTR p) { domtext *This = impl_from_IXMLDOMText( iface ); - xmlChar *pContent; - HRESULT hr = S_FALSE; + HRESULT hr; + BSTR data; + LONG p_len;
- TRACE("%p\n", iface); + TRACE("%p %s\n", This, debugstr_w(p));
/* Nothing to do if NULL or an Empty string passed in. */ - if(SysStringLen(p) == 0) return S_OK; + if((p_len = SysStringLen(p)) == 0) return S_OK;
- pContent = xmlChar_from_wchar( p ); - if(pContent) + hr = IXMLDOMText_get_data(iface, &data); + if(hr == S_OK) { - if(xmlTextConcat(This->node.node, pContent, SysStringLen(p)) == 0) - hr = S_OK; - else - hr = E_FAIL; - heap_free( pContent ); + LONG len = SysStringLen(data); + BSTR str = SysAllocStringLen(NULL, p_len + len); + + memcpy(str, data, len*sizeof(WCHAR)); + memcpy(&str[len], p, p_len*sizeof(WCHAR)); + str[len+p_len] = 0; + + hr = IXMLDOMText_put_data(iface, str); + + SysFreeString(str); + SysFreeString(data); } - else - hr = E_FAIL;
return hr; }