From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlelem.c | 47 +++++++++++++----------------------------- 1 file changed, 14 insertions(+), 33 deletions(-)
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index 89fa136ddd2..16de05c2e77 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -7729,28 +7729,29 @@ static inline HRESULT get_attr_dispid_by_name(HTMLAttributeCollection *This, con return dispex_get_id(&This->elem->node.event_target.dispex, name, fdexNameCaseInsensitive, id); }
-static inline HRESULT get_domattr(HTMLAttributeCollection *This, DISPID id, LONG *list_pos, HTMLDOMAttribute **attr) +static inline HRESULT get_domattr(HTMLAttributeCollection *This, DISPID id, LONG *list_pos, IHTMLDOMAttribute **ret) { - HTMLDOMAttribute *iter; + HTMLDOMAttribute *attr, *iter; LONG pos = 0; HRESULT hres;
- *attr = NULL; + attr = NULL; LIST_FOR_EACH_ENTRY(iter, &This->attrs, HTMLDOMAttribute, entry) { if(iter->dispid == id) { - *attr = iter; + attr = iter; break; } pos++; }
- if(!*attr) { - hres = HTMLDOMAttribute_Create(NULL, This->elem, id, This->elem->node.doc, attr); + if(!attr) { + hres = HTMLDOMAttribute_Create(NULL, This->elem, id, This->elem->node.doc, &attr); if(FAILED(hres)) return hres; }
- IHTMLDOMAttribute_AddRef(&(*attr)->IHTMLDOMAttribute_iface); + *ret = &attr->IHTMLDOMAttribute_iface; + IHTMLDOMAttribute_AddRef(*ret); if(list_pos) *list_pos = pos; return S_OK; @@ -7819,7 +7820,6 @@ static HRESULT WINAPI HTMLAttributeCollectionEnum_Next(IEnumVARIANT *iface, ULON { HTMLAttributeCollectionEnum *This = HTMLAttributeCollectionEnum_from_IEnumVARIANT(iface); DISPID tmp, dispid = This->iter_dispid; - HTMLDOMAttribute *attr; LONG rel_index = 0; HRESULT hres; ULONG i; @@ -7830,7 +7830,7 @@ static HRESULT WINAPI HTMLAttributeCollectionEnum_Next(IEnumVARIANT *iface, ULON hres = get_attr_dispid_by_relative_idx(This->col, &rel_index, dispid, &tmp); if(SUCCEEDED(hres)) { dispid = tmp; - hres = get_domattr(This->col, dispid, NULL, &attr); + hres = get_domattr(This->col, dispid, NULL, (IHTMLDOMAttribute**)&V_DISPATCH(&rgVar[i])); } else if(hres == DISP_E_UNKNOWNNAME) break; @@ -7842,7 +7842,6 @@ static HRESULT WINAPI HTMLAttributeCollectionEnum_Next(IEnumVARIANT *iface, ULON }
V_VT(&rgVar[i]) = VT_DISPATCH; - V_DISPATCH(&rgVar[i]) = (IDispatch*)&attr->IHTMLDOMAttribute_iface; }
This->iter_dispid = dispid; @@ -7952,7 +7951,6 @@ static HRESULT WINAPI HTMLAttributeCollection__newEnum(IHTMLAttributeCollection static HRESULT WINAPI HTMLAttributeCollection_item(IHTMLAttributeCollection *iface, VARIANT *name, IDispatch **ppItem) { HTMLAttributeCollection *This = impl_from_IHTMLAttributeCollection(iface); - HTMLDOMAttribute *attr; DISPID id; HRESULT hres;
@@ -7974,12 +7972,7 @@ static HRESULT WINAPI HTMLAttributeCollection_item(IHTMLAttributeCollection *ifa if(FAILED(hres)) return hres;
- hres = get_domattr(This, id, NULL, &attr); - if(FAILED(hres)) - return hres; - - *ppItem = (IDispatch*)&attr->IHTMLDOMAttribute_iface; - return S_OK; + return get_domattr(This, id, NULL, (IHTMLDOMAttribute**)ppItem); }
static const IHTMLAttributeCollectionVtbl HTMLAttributeCollectionVtbl = { @@ -8007,7 +8000,6 @@ static HRESULT WINAPI HTMLAttributeCollection2_getNamedItem(IHTMLAttributeCollec IHTMLDOMAttribute **newretNode) { HTMLAttributeCollection *This = impl_from_IHTMLAttributeCollection2(iface); - HTMLDOMAttribute *attr; DISPID id; HRESULT hres;
@@ -8021,12 +8013,7 @@ static HRESULT WINAPI HTMLAttributeCollection2_getNamedItem(IHTMLAttributeCollec return hres; }
- hres = get_domattr(This, id, NULL, &attr); - if(FAILED(hres)) - return hres; - - *newretNode = &attr->IHTMLDOMAttribute_iface; - return S_OK; + return get_domattr(This, id, NULL, newretNode); }
static HRESULT WINAPI HTMLAttributeCollection2_setNamedItem(IHTMLAttributeCollection2 *iface, @@ -8092,7 +8079,6 @@ static HRESULT WINAPI HTMLAttributeCollection3_removeNamedItem(IHTMLAttributeCol static HRESULT WINAPI HTMLAttributeCollection3_item(IHTMLAttributeCollection3 *iface, LONG index, IHTMLDOMAttribute **ppNodeOut) { HTMLAttributeCollection *This = impl_from_IHTMLAttributeCollection3(iface); - HTMLDOMAttribute *attr; DISPID id; HRESULT hres;
@@ -8104,12 +8090,7 @@ static HRESULT WINAPI HTMLAttributeCollection3_item(IHTMLAttributeCollection3 *i if(FAILED(hres)) return hres;
- hres = get_domattr(This, id, NULL, &attr); - if(FAILED(hres)) - return hres; - - *ppNodeOut = &attr->IHTMLDOMAttribute_iface; - return S_OK; + return get_domattr(This, id, NULL, ppNodeOut); }
static HRESULT WINAPI HTMLAttributeCollection3_get_length(IHTMLAttributeCollection3 *iface, LONG *p) @@ -8188,7 +8169,7 @@ static void HTMLAttributeCollection_destructor(DispatchEx *dispex) static HRESULT HTMLAttributeCollection_get_dispid(DispatchEx *dispex, const WCHAR *name, DWORD flags, DISPID *dispid) { HTMLAttributeCollection *This = HTMLAttributeCollection_from_DispatchEx(dispex); - HTMLDOMAttribute *attr; + IHTMLDOMAttribute *attr; LONG pos; HRESULT hres;
@@ -8201,7 +8182,7 @@ static HRESULT HTMLAttributeCollection_get_dispid(DispatchEx *dispex, const WCHA hres = get_domattr(This, *dispid, &pos, &attr); if(FAILED(hres)) return hres; - IHTMLDOMAttribute_Release(&attr->IHTMLDOMAttribute_iface); + IHTMLDOMAttribute_Release(attr);
*dispid = MSHTML_DISPID_CUSTOM_MIN+pos; return S_OK;