Jacek Caban : mshtml: Optimize and clean up HTMLFormElement_get_dispid implementation.
Alexandre Julliard
julliard at winehq.org
Fri Jan 29 10:56:34 CST 2010
Module: wine
Branch: master
Commit: 248db8d8068cef1fa4a2ef0529f3151dca51af1b
URL: http://source.winehq.org/git/wine.git/?a=commit;h=248db8d8068cef1fa4a2ef0529f3151dca51af1b
Author: Jacek Caban <jacek at codeweavers.com>
Date: Fri Jan 29 14:56:19 2010 +0100
mshtml: Optimize and clean up HTMLFormElement_get_dispid implementation.
---
dlls/mshtml/htmlform.c | 47 ++++++++++++++++++++---------------------------
1 files changed, 20 insertions(+), 27 deletions(-)
diff --git a/dlls/mshtml/htmlform.c b/dlls/mshtml/htmlform.c
index 75dcf90..05486f4 100644
--- a/dlls/mshtml/htmlform.c
+++ b/dlls/mshtml/htmlform.c
@@ -343,10 +343,12 @@ static HRESULT HTMLFormElement_get_dispid(HTMLDOMNode *iface,
{
HTMLFormElement *This = HTMLFORM_NODE_THIS(iface);
nsIDOMHTMLCollection *elements;
+ nsAString nsname, nsstr;
PRUint32 len, i;
- static const PRUnichar nameW[] = {'n','a','m','e',0};
- nsAString nsname;
nsresult nsres;
+ HRESULT hres = DISP_E_UNKNOWNNAME;
+
+ static const PRUnichar nameW[] = {'n','a','m','e',0};
TRACE("(%p)->(%s %x %p)\n", This, wine_dbgstr_w(name), grfdex, pid);
@@ -363,72 +365,63 @@ static HRESULT HTMLFormElement_get_dispid(HTMLDOMNode *iface,
return E_FAIL;
}
- nsAString_Init(&nsname, nameW);
+ nsAString_InitDepend(&nsname, nameW);
+ nsAString_Init(&nsstr, NULL);
for(i = 0; i < len; ++i) {
nsIDOMNode *nsitem;
nsIDOMHTMLElement *nshtml_elem;
- nsAString nsstr;
const PRUnichar *str;
nsres = nsIDOMHTMLCollection_Item(elements, i, &nsitem);
if(NS_FAILED(nsres)) {
FIXME("Item failed: 0x%08x\n", nsres);
- nsAString_Finish(&nsname);
- nsIDOMHTMLCollection_Release(elements);
- return E_FAIL;
+ hres = E_FAIL;
+ break;
}
nsres = nsIDOMNode_QueryInterface(nsitem, &IID_nsIDOMHTMLElement, (void**)&nshtml_elem);
nsIDOMNode_Release(nsitem);
if(NS_FAILED(nsres)) {
FIXME("Failed to get nsIDOMHTMLNode interface: 0x%08x\n", nsres);
- nsAString_Finish(&nsname);
- nsIDOMHTMLCollection_Release(elements);
- return E_FAIL;
+ hres = E_FAIL;
+ break;
}
/* compare by id attr */
- nsAString_Init(&nsstr, NULL);
nsres = nsIDOMHTMLElement_GetId(nshtml_elem, &nsstr);
if(NS_FAILED(nsres)) {
FIXME("GetId failed: 0x%08x\n", nsres);
- nsAString_Finish(&nsname);
nsIDOMHTMLElement_Release(nshtml_elem);
- nsIDOMHTMLCollection_Release(elements);
- return E_FAIL;
+ hres = E_FAIL;
+ break;
}
nsAString_GetData(&nsstr, &str);
if(!strcmpiW(str, name)) {
+ nsIDOMHTMLElement_Release(nshtml_elem);
/* FIXME: using index for dispid */
*pid = MSHTML_DISPID_CUSTOM_MIN + i;
- nsAString_Finish(&nsname);
- nsAString_Finish(&nsstr);
- nsIDOMHTMLElement_Release(nshtml_elem);
- nsIDOMHTMLCollection_Release(elements);
- return S_OK;
+ hres = S_OK;
+ break;
}
/* compare by name attr */
nsres = nsIDOMHTMLElement_GetAttribute(nshtml_elem, &nsname, &nsstr);
+ nsIDOMHTMLElement_Release(nshtml_elem);
nsAString_GetData(&nsstr, &str);
if(!strcmpiW(str, name)) {
/* FIXME: using index for dispid */
*pid = MSHTML_DISPID_CUSTOM_MIN + i;
- nsAString_Finish(&nsname);
- nsAString_Finish(&nsstr);
- nsIDOMHTMLElement_Release(nshtml_elem);
- nsIDOMHTMLCollection_Release(elements);
- return S_OK;
+ hres = S_OK;
+ break;
}
nsAString_Finish(&nsstr);
-
- nsIDOMHTMLElement_Release(nshtml_elem);
}
nsAString_Finish(&nsname);
+ nsAString_Finish(&nsstr);
nsIDOMHTMLCollection_Release(elements);
- return DISP_E_UNKNOWNNAME;
+ return hres;
}
static HRESULT HTMLFormElement_invoke(HTMLDOMNode *iface,
More information about the wine-cvs
mailing list