Module: wine Branch: master Commit: 7828df17e25616bad907e34a2c9095183014ec2e URL: https://source.winehq.org/git/wine.git/?a=commit;h=7828df17e25616bad907e34a2...
Author: Jacek Caban jacek@codeweavers.com Date: Fri Jan 24 19:54:35 2020 +0100
jscript: Introduce jsstr_to_bstr helper.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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: