Module: wine Branch: master Commit: 67d86e630e83098ea2e4e250b8048bfd93a00e45 URL: http://source.winehq.org/git/wine.git/?a=commit;h=67d86e630e83098ea2e4e250b8...
Author: Jacek Caban jacek@codeweavers.com Date: Mon Mar 11 16:03:15 2013 +0100
jscript: Use BSTR also for pure IDispatch call in disp_get_id.
---
dlls/jscript/engine.c | 28 ++++++++++++++++------------ 1 files changed, 16 insertions(+), 12 deletions(-)
diff --git a/dlls/jscript/engine.c b/dlls/jscript/engine.c index 52cdc88..f05fedf 100644 --- a/dlls/jscript/engine.c +++ b/dlls/jscript/engine.c @@ -350,6 +350,7 @@ static HRESULT disp_get_id(script_ctx_t *ctx, IDispatch *disp, WCHAR *name, BSTR { IDispatchEx *dispex; jsdisp_t *jsdisp; + BSTR bstr; HRESULT hres;
jsdisp = iface_to_jsdisp((IUnknown*)disp); @@ -359,24 +360,27 @@ static HRESULT disp_get_id(script_ctx_t *ctx, IDispatch *disp, WCHAR *name, BSTR return hres; }
+ if(name_bstr) { + bstr = name_bstr; + }else { + bstr = SysAllocString(name); + if(!bstr) + return E_OUTOFMEMORY; + } + *id = 0; hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex); if(SUCCEEDED(hres)) { - BSTR str = name_bstr; - - if(!str) - str = SysAllocString(name); - if(str) - hres = IDispatchEx_GetDispID(dispex, str, make_grfdex(ctx, flags|fdexNameCaseSensitive), id); - else - hres = E_OUTOFMEMORY; + hres = IDispatchEx_GetDispID(dispex, bstr, make_grfdex(ctx, flags|fdexNameCaseSensitive), id); IDispatchEx_Release(dispex); - return hres; + }else { + TRACE("using IDispatch\n"); + hres = IDispatch_GetIDsOfNames(disp, &IID_NULL, &name, 1, 0, id); }
- TRACE("using IDispatch\n"); - - return IDispatch_GetIDsOfNames(disp, &IID_NULL, &name, 1, 0, id); + if(name_bstr != bstr) + SysFreeString(bstr); + return hres; }
static inline BOOL var_is_null(const VARIANT *v)