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

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


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Mar 11 16:02:58 2013 +0100

jscript: Use BSTR also for pure IDispatch call in disp_delete_name.

---

 dlls/jscript/dispex.c |   25 +++++++++++--------------
 1 files changed, 11 insertions(+), 14 deletions(-)

diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c
index 721ad16..6a0153b 100644
--- a/dlls/jscript/dispex.c
+++ b/dlls/jscript/dispex.c
@@ -1518,6 +1518,7 @@ HRESULT disp_delete_name(script_ctx_t *ctx, IDispatch *disp, jsstr_t *name, BOOL
 {
     IDispatchEx *dispex;
     jsdisp_t *jsdisp;
+    BSTR bstr;
     HRESULT hres;
 
     jsdisp = iface_to_jsdisp((IUnknown*)disp);
@@ -1536,26 +1537,21 @@ HRESULT disp_delete_name(script_ctx_t *ctx, IDispatch *disp, jsstr_t *name, BOOL
         return hres;
     }
 
+    bstr = SysAllocStringLen(NULL, jsstr_length(name));
+    if(!bstr)
+        return E_OUTOFMEMORY;
+    jsstr_flush(name, bstr);
+
     hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex);
     if(SUCCEEDED(hres)) {
-        BSTR bstr;
-
-        bstr = SysAllocStringLen(name->str, jsstr_length(name));
-        if(bstr) {
-            hres = IDispatchEx_DeleteMemberByName(dispex, bstr, make_grfdex(ctx, fdexNameCaseSensitive));
-            SysFreeString(bstr);
-            if(SUCCEEDED(hres))
-                *ret = hres == S_OK;
-        }else {
-            hres = E_OUTOFMEMORY;
-        }
-
+        hres = IDispatchEx_DeleteMemberByName(dispex, bstr, make_grfdex(ctx, fdexNameCaseSensitive));
+        if(SUCCEEDED(hres))
+            *ret = hres == S_OK;
         IDispatchEx_Release(dispex);
     }else {
-        WCHAR *name_str = name->str;
         DISPID id;
 
-        hres = IDispatch_GetIDsOfNames(disp, &IID_NULL, &name_str, 1, 0, &id);
+        hres = IDispatch_GetIDsOfNames(disp, &IID_NULL, &bstr, 1, 0, &id);
         if(SUCCEEDED(hres)) {
             /* Property exists and we can't delete it from pure IDispatch interface, so return false. */
             *ret = FALSE;
@@ -1566,6 +1562,7 @@ HRESULT disp_delete_name(script_ctx_t *ctx, IDispatch *disp, jsstr_t *name, BOOL
         }
     }
 
+    SysFreeString(bstr);
     return hres;
 }
 




More information about the wine-cvs mailing list