Module: wine Branch: master Commit: 7084abaff68dd2a5e3b04a4ed981968202fe5d65 URL: https://gitlab.winehq.org/wine/wine/-/commit/7084abaff68dd2a5e3b04a4ed981968...
Author: Jacek Caban jacek@codeweavers.com Date: Mon Jul 15 21:39:16 2024 +0200
mshtml: Factor out dispex_prop_name.
And use it in HTMLDOMAttribute implementation.
---
dlls/mshtml/dispex.c | 42 +++++++++++++++++++++--------------------- dlls/mshtml/htmlattr.c | 4 ++-- dlls/mshtml/mshtml_private.h | 1 + 3 files changed, 24 insertions(+), 23 deletions(-)
diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c index 97f50a8810b..54e54cfdc96 100644 --- a/dlls/mshtml/dispex.c +++ b/dlls/mshtml/dispex.c @@ -2163,46 +2163,46 @@ static HRESULT WINAPI DispatchEx_GetMemberProperties(IWineJSDispatchHost *iface, return E_NOTIMPL; }
-static HRESULT WINAPI DispatchEx_GetMemberName(IWineJSDispatchHost *iface, DISPID id, BSTR *pbstrName) +HRESULT dispex_prop_name(DispatchEx *dispex, DISPID id, BSTR *ret) { - DispatchEx *This = impl_from_IWineJSDispatchHost(iface); func_info_t *func; HRESULT hres;
- TRACE("%s (%p)->(%lx %p)\n", This->info->desc->name, This, id, pbstrName); - - if(!ensure_real_info(This)) - return E_OUTOFMEMORY; - if(This->jsdisp) - return IWineJSDispatch_GetMemberName(This->jsdisp, id, pbstrName); - if(is_custom_dispid(id)) { - if(This->info->desc->vtbl->get_name) - return This->info->desc->vtbl->get_name(This, id, pbstrName); + if(dispex->info->desc->vtbl->get_name) + return dispex->info->desc->vtbl->get_name(dispex, id, ret); return DISP_E_MEMBERNOTFOUND; }
if(is_dynamic_dispid(id)) { DWORD idx = id - DISPID_DYNPROP_0;
- if(!get_dynamic_data(This) || This->dynamic_data->prop_cnt <= idx) + if(!get_dynamic_data(dispex) || dispex->dynamic_data->prop_cnt <= idx) return DISP_E_MEMBERNOTFOUND;
- *pbstrName = SysAllocString(This->dynamic_data->props[idx].name); - if(!*pbstrName) - return E_OUTOFMEMORY; - - return S_OK; + *ret = SysAllocString(dispex->dynamic_data->props[idx].name); + return *ret ? S_OK : E_OUTOFMEMORY; }
- hres = get_builtin_func(This->info, id, &func); + hres = get_builtin_func(dispex->info, id, &func); if(FAILED(hres)) return hres;
- *pbstrName = SysAllocString(func->name); - if(!*pbstrName) + *ret = SysAllocString(func->name); + return *ret ? S_OK : E_OUTOFMEMORY; +} + +static HRESULT WINAPI DispatchEx_GetMemberName(IWineJSDispatchHost *iface, DISPID id, BSTR *pbstrName) +{ + DispatchEx *This = impl_from_IWineJSDispatchHost(iface); + + TRACE("%s (%p)->(%lx %p)\n", This->info->desc->name, This, id, pbstrName); + + if(!ensure_real_info(This)) return E_OUTOFMEMORY; - return S_OK; + if(This->jsdisp) + return IWineJSDispatch_GetMemberName(This->jsdisp, id, pbstrName); + return dispex_prop_name(This, id, pbstrName); }
static HRESULT next_dynamic_id(DispatchEx *dispex, DWORD idx, DISPID *ret_id) diff --git a/dlls/mshtml/htmlattr.c b/dlls/mshtml/htmlattr.c index 829c3ffa842..31837f06284 100644 --- a/dlls/mshtml/htmlattr.c +++ b/dlls/mshtml/htmlattr.c @@ -55,7 +55,7 @@ static HRESULT WINAPI HTMLDOMAttribute_get_nodeName(IHTMLDOMAttribute *iface, BS return *p ? S_OK : E_OUTOFMEMORY; }
- return IWineJSDispatchHost_GetMemberName(&This->elem->node.event_target.dispex.IWineJSDispatchHost_iface, This->dispid, p); + return dispex_prop_name(&This->elem->node.event_target.dispex, This->dispid, p); }
static HRESULT WINAPI HTMLDOMAttribute_put_nodeValue(IHTMLDOMAttribute *iface, VARIANT v) @@ -105,7 +105,7 @@ static HRESULT WINAPI HTMLDOMAttribute_get_specified(IHTMLDOMAttribute *iface, V return S_OK; }
- hres = IWineJSDispatchHost_GetMemberName(&This->elem->node.event_target.dispex.IWineJSDispatchHost_iface, This->dispid, &name); + hres = dispex_prop_name(&This->elem->node.event_target.dispex, This->dispid, &name); if(FAILED(hres)) return hres;
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 38cf4e06282..a7a6a2ed0a2 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -514,6 +514,7 @@ HRESULT dispex_prop_put(DispatchEx *dispex, DISPID id, LCID lcid, VARIANT *v, EX IServiceProvider *caller); HRESULT dispex_get_id(DispatchEx *dispex, const WCHAR *name, DWORD flags, DISPID *pid); HRESULT dispex_next_id(DispatchEx *dispex, DISPID id, DISPID *ret); +HRESULT dispex_prop_name(DispatchEx *dispex, DISPID id, BSTR *ret);
typedef enum { DISPEXPROP_CUSTOM,