Jacek Caban : jscript: Use BSTR also for pure IDispatch call in disp_get_id .

Alexandre Julliard julliard at winehq.org
Mon Mar 11 16:24:52 CDT 2013


Module: wine
Branch: master
Commit: 67d86e630e83098ea2e4e250b8048bfd93a00e45
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=67d86e630e83098ea2e4e250b8048bfd93a00e45

Author: Jacek Caban <jacek at 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)




More information about the wine-cvs mailing list