msxml3: Simplify ::appendData() for Text, Comment and CDATA nodes.
This commit is contained in:
parent
02066602b6
commit
19c30897d4
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue