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