Nikolay Sivov : msxml3: Simplify ::appendData() for Text, Comment and CDATA nodes.
Alexandre Julliard
julliard at winehq.org
Tue Feb 16 11:44:40 CST 2010
Module: wine
Branch: master
Commit: 19c30897d4c64e1f534672eb355aa0f15a17eb95
URL: http://source.winehq.org/git/wine.git/?a=commit;h=19c30897d4c64e1f534672eb355aa0f15a17eb95
Author: Nikolay Sivov <bunglehead at 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;
}
More information about the wine-cvs
mailing list