Jacek Caban : jscript: Use helpers to access string buffer in some String functions.
Module: wine Branch: master Commit: 03395f2d2e916b2a27e098982aa9e6df926f4699 URL: http://source.winehq.org/git/wine.git/?a=commit;h=03395f2d2e916b2a27e098982a... Author: Jacek Caban <jacek(a)codeweavers.com> Date: Thu Mar 28 11:02:25 2013 +0100 jscript: Use helpers to access string buffer in some String functions. --- dlls/jscript/string.c | 62 +++++++++++++++++++++++++++++++----------------- 1 files changed, 40 insertions(+), 22 deletions(-) diff --git a/dlls/jscript/string.c b/dlls/jscript/string.c index 64d0f1e..39e6788 100644 --- a/dlls/jscript/string.c +++ b/dlls/jscript/string.c @@ -90,6 +90,22 @@ static HRESULT get_string_val(script_ctx_t *ctx, vdisp_t *jsthis, jsstr_t **val) return to_string(ctx, jsval_disp(jsthis->u.disp), val); } +static HRESULT get_string_flat_val(script_ctx_t *ctx, vdisp_t *jsthis, jsstr_t **jsval, const WCHAR **val) +{ + HRESULT hres; + + hres = get_string_val(ctx, jsthis, jsval); + if(FAILED(hres)) + return hres; + + *val = jsstr_flatten(*jsval); + if(*val) + return S_OK; + + jsstr_release(*jsval); + return E_OUTOFMEMORY; +} + static HRESULT String_length(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r) { @@ -442,28 +458,29 @@ static HRESULT String_fontsize(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, u static HRESULT String_indexOf(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r) { - jsstr_t *search_str, *str; + jsstr_t *search_jsstr, *jsstr; + const WCHAR *search_str, *str; int length, pos = 0; INT ret = -1; HRESULT hres; TRACE("\n"); - hres = get_string_val(ctx, jsthis, &str); + hres = get_string_flat_val(ctx, jsthis, &jsstr, &str); if(FAILED(hres)) return hres; - length = jsstr_length(str); + length = jsstr_length(jsstr); if(!argc) { if(r) *r = jsval_number(-1); - jsstr_release(str); + jsstr_release(jsstr); return S_OK; } - hres = to_string(ctx, argv[0], &search_str); + hres = to_flat_string(ctx, argv[0], &search_jsstr, &search_str); if(FAILED(hres)) { - jsstr_release(str); + jsstr_release(jsstr); return hres; } @@ -478,15 +495,15 @@ static HRESULT String_indexOf(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, un if(SUCCEEDED(hres)) { const WCHAR *ptr; - ptr = strstrW(str->str+pos, search_str->str); + ptr = strstrW(str+pos, search_str); if(ptr) - ret = ptr - str->str; + ret = ptr - str; else ret = -1; } - jsstr_release(search_str); - jsstr_release(str); + jsstr_release(search_jsstr); + jsstr_release(jsstr); if(FAILED(hres)) return hres; @@ -507,31 +524,32 @@ static HRESULT String_lastIndexOf(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags jsval_t *r) { unsigned pos = 0, search_len, length; - jsstr_t *search_str, *str; + jsstr_t *search_jsstr, *jsstr; + const WCHAR *search_str, *str; INT ret = -1; HRESULT hres; TRACE("\n"); - hres = get_string_val(ctx, jsthis, &str); + hres = get_string_flat_val(ctx, jsthis, &jsstr, &str); if(FAILED(hres)) return hres; if(!argc) { if(r) *r = jsval_number(-1); - jsstr_release(str); + jsstr_release(jsstr); return S_OK; } - hres = to_string(ctx, argv[0], &search_str); + hres = to_flat_string(ctx, argv[0], &search_jsstr, &search_str); if(FAILED(hres)) { - jsstr_release(str); + jsstr_release(jsstr); return hres; } - search_len = jsstr_length(search_str); - length = jsstr_length(str); + search_len = jsstr_length(search_jsstr); + length = jsstr_length(jsstr); if(argc >= 2) { double d; @@ -546,16 +564,16 @@ static HRESULT String_lastIndexOf(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags if(SUCCEEDED(hres) && length >= search_len) { const WCHAR *ptr; - for(ptr = str->str+min(pos, length-search_len); ptr >= str->str; ptr--) { - if(!memcmp(ptr, search_str->str, search_len*sizeof(WCHAR))) { - ret = ptr-str->str; + for(ptr = str+min(pos, length-search_len); ptr >= str; ptr--) { + if(!memcmp(ptr, search_str, search_len*sizeof(WCHAR))) { + ret = ptr-str; break; } } } - jsstr_release(search_str); - jsstr_release(str); + jsstr_release(search_jsstr); + jsstr_release(jsstr); if(FAILED(hres)) return hres;
participants (1)
-
Alexandre Julliard