Module: wine Branch: master Commit: 6d55379f7a98c9149d4ed072a8f654dd20c0f8c5 URL: http://source.winehq.org/git/wine.git/?a=commit;h=6d55379f7a98c9149d4ed072a8...
Author: Jacek Caban jacek@codeweavers.com Date: Fri Mar 1 15:44:48 2013 +0100
mshtml: insert_adjacent_node clean up.
---
dlls/mshtml/htmlelem.c | 105 +++++++++++++++++++++++++----------------------- 1 files changed, 55 insertions(+), 50 deletions(-)
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index 208493f..581669c 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -1087,68 +1087,74 @@ static HRESULT WINAPI HTMLElement_get_outerText(IHTMLElement *iface, BSTR *p) return E_NOTIMPL; }
-static HRESULT HTMLElement_InsertAdjacentNode(HTMLElement *This, BSTR where, nsIDOMNode *nsnode) +static HRESULT insert_adjacent_node(HTMLElement *This, const WCHAR *where, nsIDOMNode *nsnode) { - static const WCHAR wszBeforeBegin[] = {'b','e','f','o','r','e','B','e','g','i','n',0}; - static const WCHAR wszAfterBegin[] = {'a','f','t','e','r','B','e','g','i','n',0}; - static const WCHAR wszBeforeEnd[] = {'b','e','f','o','r','e','E','n','d',0}; - static const WCHAR wszAfterEnd[] = {'a','f','t','e','r','E','n','d',0}; + nsIDOMNode *ret_nsnode; nsresult nsres; + HRESULT hres = S_OK;
- if (!strcmpiW(where, wszBeforeBegin)) - { - nsIDOMNode *unused; + static const WCHAR beforebeginW[] = {'b','e','f','o','r','e','b','e','g','i','n',0}; + static const WCHAR afterbeginW[] = {'a','f','t','e','r','b','e','g','i','n',0}; + static const WCHAR beforeendW[] = {'b','e','f','o','r','e','e','n','d',0}; + static const WCHAR afterendW[] = {'a','f','t','e','r','e','n','d',0}; + + if (!strcmpiW(where, beforebeginW)) { nsIDOMNode *parent; + nsres = nsIDOMNode_GetParentNode(This->node.nsnode, &parent); - if (!parent) return E_INVALIDARG; - nsres = nsIDOMNode_InsertBefore(parent, nsnode, This->node.nsnode, &unused); - if (unused) nsIDOMNode_Release(unused); + if(NS_FAILED(nsres)) + return E_FAIL; + + if(!parent) + return E_INVALIDARG; + + nsres = nsIDOMNode_InsertBefore(parent, nsnode, This->node.nsnode, &ret_nsnode); nsIDOMNode_Release(parent); - } - else if (!strcmpiW(where, wszAfterBegin)) - { - nsIDOMNode *unused; + }else if(!strcmpiW(where, afterbeginW)) { nsIDOMNode *first_child; - nsIDOMNode_GetFirstChild(This->node.nsnode, &first_child); - nsres = nsIDOMNode_InsertBefore(This->node.nsnode, nsnode, first_child, &unused); - if (unused) nsIDOMNode_Release(unused); - if (first_child) nsIDOMNode_Release(first_child); - } - else if (!strcmpiW(where, wszBeforeEnd)) - { - nsIDOMNode *unused; - nsres = nsIDOMNode_AppendChild(This->node.nsnode, nsnode, &unused); - if (unused) nsIDOMNode_Release(unused); - } - else if (!strcmpiW(where, wszAfterEnd)) - { - nsIDOMNode *unused; - nsIDOMNode *next_sibling; - nsIDOMNode *parent; - nsIDOMNode_GetParentNode(This->node.nsnode, &parent); - if (!parent) return E_INVALIDARG; - - nsIDOMNode_GetNextSibling(This->node.nsnode, &next_sibling); - if (next_sibling) - { - nsres = nsIDOMNode_InsertBefore(parent, nsnode, next_sibling, &unused); - nsIDOMNode_Release(next_sibling); + + nsres = nsIDOMNode_GetFirstChild(This->node.nsnode, &first_child); + if(NS_FAILED(nsres)) + return E_FAIL; + + nsres = nsIDOMNode_InsertBefore(This->node.nsnode, nsnode, first_child, &ret_nsnode); + if(NS_FAILED(nsres)) + return E_FAIL; + + if (first_child) + nsIDOMNode_Release(first_child); + }else if (!strcmpiW(where, beforeendW)) { + nsres = nsIDOMNode_AppendChild(This->node.nsnode, nsnode, &ret_nsnode); + }else if (!strcmpiW(where, afterendW)) { + nsIDOMNode *next_sibling, *parent; + + nsres = nsIDOMNode_GetParentNode(This->node.nsnode, &parent); + if(NS_FAILED(nsres)) + return E_FAIL; + if(!parent) + return E_INVALIDARG; + + nsres = nsIDOMNode_GetNextSibling(This->node.nsnode, &next_sibling); + if(NS_SUCCEEDED(nsres)) { + if(next_sibling) { + nsres = nsIDOMNode_InsertBefore(parent, nsnode, next_sibling, &ret_nsnode); + nsIDOMNode_Release(next_sibling); + }else { + nsres = nsIDOMNode_AppendChild(parent, nsnode, &ret_nsnode); + } } - else - nsres = nsIDOMNode_AppendChild(parent, nsnode, &unused); + nsIDOMNode_Release(parent); - if (unused) nsIDOMNode_Release(unused); - } - else - { + }else { ERR("invalid where: %s\n", debugstr_w(where)); return E_INVALIDARG; }
if (NS_FAILED(nsres)) return E_FAIL; - else - return S_OK; + + nsIDOMNode_Release(ret_nsnode); + return hres; }
static HRESULT WINAPI HTMLElement_insertAdjacentHTML(IHTMLElement *iface, BSTR where, @@ -1188,9 +1194,8 @@ static HRESULT WINAPI HTMLElement_insertAdjacentHTML(IHTMLElement *iface, BSTR w return E_FAIL; }
- hr = HTMLElement_InsertAdjacentNode(This, where, nsnode); + hr = insert_adjacent_node(This, where, nsnode); nsIDOMNode_Release(nsnode); - return hr; }
@@ -1221,7 +1226,7 @@ static HRESULT WINAPI HTMLElement_insertAdjacentText(IHTMLElement *iface, BSTR w return E_FAIL; }
- hr = HTMLElement_InsertAdjacentNode(This, where, nsnode); + hr = insert_adjacent_node(This, where, nsnode); nsIDOMNode_Release(nsnode);
return hr;