Module: wine Branch: master Commit: 25dbf32b5d60937afafe6d2f7be7a910b6bcefc3 URL: http://source.winehq.org/git/wine.git/?a=commit;h=25dbf32b5d60937afafe6d2f7b...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Mar 6 12:39:27 2013 +0100
jscript: Reimplemented do_attributeless_tag_format without direct access to object's string buffer.
---
dlls/jscript/string.c | 39 ++++++++++++++++++++++++++++----------- 1 files changed, 28 insertions(+), 11 deletions(-)
diff --git a/dlls/jscript/string.c b/dlls/jscript/string.c index 1d4a188..6235b51 100644 --- a/dlls/jscript/string.c +++ b/dlls/jscript/string.c @@ -144,27 +144,44 @@ static HRESULT String_valueOf(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, un
static HRESULT do_attributeless_tag_format(script_ctx_t *ctx, vdisp_t *jsthis, jsval_t *r, const WCHAR *tagname) { - jsstr_t *str; + unsigned tagname_len; + jsstr_t *str, *ret; + WCHAR *ptr; HRESULT hres;
- static const WCHAR tagfmt[] = {'<','%','s','>','%','s','<','/','%','s','>',0}; - hres = get_string_val(ctx, jsthis, &str); if(FAILED(hres)) return hres;
- if(r) { - jsstr_t *ret = jsstr_alloc_buf(jsstr_length(str) + 2*strlenW(tagname) + 5); - if(!ret) { - jsstr_release(str); - return E_OUTOFMEMORY; - } + if(!r) { + jsstr_release(str); + return S_OK; + }
- sprintfW(ret->str, tagfmt, tagname, str->str, tagname); - *r = jsval_string(ret); + tagname_len = strlenW(tagname); + + ret = jsstr_alloc_buf(jsstr_length(str) + 2*tagname_len + 5); + if(!ret) { + jsstr_release(str); + return E_OUTOFMEMORY; }
+ ptr = ret->str; + *ptr++ = '<'; + memcpy(ptr, tagname, tagname_len*sizeof(WCHAR)); + ptr += tagname_len; + *ptr++ = '>'; + + ptr += jsstr_flush(str, ptr); jsstr_release(str); + + *ptr++ = '<'; + *ptr++ = '/'; + memcpy(ptr, tagname, tagname_len*sizeof(WCHAR)); + ptr += tagname_len; + *ptr = '>'; + + *r = jsval_string(ret); return S_OK; }