Jacek Caban : jscript: Introduce jsstr_to_bstr helper.

Alexandre Julliard julliard at winehq.org
Fri Jan 24 16:14:12 CST 2020


Module: wine
Branch: master
Commit: 7828df17e25616bad907e34a2c9095183014ec2e
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=7828df17e25616bad907e34a2c9095183014ec2e

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Jan 24 19:54:35 2020 +0100

jscript: Introduce jsstr_to_bstr helper.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/jscript/jsstr.c   | 13 +++++++++++--
 dlls/jscript/jsstr.h   |  2 +-
 dlls/jscript/jsutils.c | 27 +++------------------------
 3 files changed, 15 insertions(+), 27 deletions(-)

diff --git a/dlls/jscript/jsstr.c b/dlls/jscript/jsstr.c
index e1c4902762..abd960a8a0 100644
--- a/dlls/jscript/jsstr.c
+++ b/dlls/jscript/jsstr.c
@@ -299,9 +299,18 @@ jsstr_t *jsstr_null_bstr(void)
     return jsstr_addref(null_bstr_str);
 }
 
-BOOL is_null_bstr(jsstr_t *str)
+HRESULT jsstr_to_bstr(jsstr_t *str, BSTR *r)
 {
-    return str == null_bstr_str;
+    if(str == null_bstr_str) {
+        *r = NULL;
+        return S_OK;
+    }
+
+    if(!(*r = SysAllocStringLen(NULL, jsstr_length(str))))
+        return E_OUTOFMEMORY;
+
+    jsstr_flush(str, *r);
+    return S_OK;
 }
 
 BOOL init_strings(void)
diff --git a/dlls/jscript/jsstr.h b/dlls/jscript/jsstr.h
index e47f0fe9b3..f42c95de5e 100644
--- a/dlls/jscript/jsstr.h
+++ b/dlls/jscript/jsstr.h
@@ -182,7 +182,7 @@ jsstr_t *jsstr_empty(void) DECLSPEC_HIDDEN;
 jsstr_t *jsstr_undefined(void) DECLSPEC_HIDDEN;
 
 jsstr_t *jsstr_null_bstr(void) DECLSPEC_HIDDEN;
-BOOL is_null_bstr(jsstr_t*) DECLSPEC_HIDDEN;
+HRESULT jsstr_to_bstr(jsstr_t *str, BSTR *r) DECLSPEC_HIDDEN;
 
 BOOL init_strings(void) DECLSPEC_HIDDEN;
 void free_strings(void) DECLSPEC_HIDDEN;
diff --git a/dlls/jscript/jsutils.c b/dlls/jscript/jsutils.c
index 97d069aff7..89e58f64f3 100644
--- a/dlls/jscript/jsutils.c
+++ b/dlls/jscript/jsutils.c
@@ -355,21 +355,9 @@ HRESULT jsval_to_variant(jsval_t val, VARIANT *retv)
             IDispatch_AddRef(get_object(val));
         V_DISPATCH(retv) = get_object(val);
         return S_OK;
-    case JSV_STRING: {
-        jsstr_t *str = get_string(val);
-
+    case JSV_STRING:
         V_VT(retv) = VT_BSTR;
-        if(is_null_bstr(str)) {
-            V_BSTR(retv) = NULL;
-        }else {
-            V_BSTR(retv) = SysAllocStringLen(NULL, jsstr_length(str));
-            if(V_BSTR(retv))
-                jsstr_flush(str, V_BSTR(retv));
-            else
-                return E_OUTOFMEMORY;
-        }
-        return S_OK;
-    }
+        return jsstr_to_bstr(get_string(val), &V_BSTR(retv));
     case JSV_NUMBER: {
         double n = get_number(val);
 
@@ -945,16 +933,7 @@ HRESULT variant_change_type(script_ctx_t *ctx, VARIANT *dst, VARIANT *src, VARTY
         if(FAILED(hres))
             break;
 
-        if(is_null_bstr(str)) {
-            V_BSTR(dst) = NULL;
-            break;
-        }
-
-        V_BSTR(dst) = SysAllocStringLen(NULL, jsstr_length(str));
-        if(V_BSTR(dst))
-            jsstr_flush(str, V_BSTR(dst));
-        else
-            hres = E_OUTOFMEMORY;
+        hres = jsstr_to_bstr(str, &V_BSTR(dst));
         break;
     }
     case VT_EMPTY:




More information about the wine-cvs mailing list