Module: wine Branch: master Commit: 6eaef96dad12fb4aaec5044421941f3cd7ddb44a URL: http://source.winehq.org/git/wine.git/?a=commit;h=6eaef96dad12fb4aaec5044421...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Mar 6 12:39:38 2013 +0100
jscript: Reimplemented do_attribute_tag_format without direct access to object's string buffer.
---
dlls/jscript/string.c | 39 +++++++++++++++++++++++++++++++-------- 1 files changed, 31 insertions(+), 8 deletions(-)
diff --git a/dlls/jscript/string.c b/dlls/jscript/string.c index 6235b51..8f38621 100644 --- a/dlls/jscript/string.c +++ b/dlls/jscript/string.c @@ -186,14 +186,11 @@ static HRESULT do_attributeless_tag_format(script_ctx_t *ctx, vdisp_t *jsthis, j }
static HRESULT do_attribute_tag_format(script_ctx_t *ctx, vdisp_t *jsthis, unsigned argc, jsval_t *argv, jsval_t *r, - const WCHAR *tagname, const WCHAR *attr) + const WCHAR *tagname, const WCHAR *attrname) { - static const WCHAR tagfmtW[] - = {'<','%','s',' ','%','s','=','"','%','s','"','>','%','s','<','/','%','s','>',0}; static const WCHAR undefinedW[] = {'u','n','d','e','f','i','n','e','d',0};
jsstr_t *str, *attr_value = NULL; - const WCHAR *attr_str; unsigned attr_len; HRESULT hres;
@@ -207,19 +204,45 @@ static HRESULT do_attribute_tag_format(script_ctx_t *ctx, vdisp_t *jsthis, unsig jsstr_release(str); return hres; } - attr_str = attr_value->str; attr_len = jsstr_length(attr_value); }else { - attr_str = undefinedW; attr_len = sizeof(undefinedW)/sizeof(WCHAR)-1; }
if(r) { + unsigned attrname_len = strlenW(attrname); + unsigned tagname_len = strlenW(tagname); jsstr_t *ret;
- ret = jsstr_alloc_buf(2*strlenW(tagname) + strlenW(attr) + attr_len + jsstr_length(str) + 9); + ret = jsstr_alloc_buf(2*tagname_len + attrname_len + attr_len + jsstr_length(str) + 9); if(ret) { - sprintfW(ret->str, tagfmtW, tagname, attr, attr_str, str->str, tagname); + WCHAR *ptr = ret->str; + + *ptr++ = '<'; + memcpy(ptr, tagname, tagname_len*sizeof(WCHAR)); + ptr += tagname_len; + *ptr++ = ' '; + memcpy(ptr, attrname, attrname_len*sizeof(WCHAR)); + ptr += attrname_len; + *ptr++ = '='; + *ptr++ = '"'; + + if(attr_value) + jsstr_flush(attr_value, ptr); + else + memcpy(ptr, undefinedW, attr_len*sizeof(WCHAR)); + ptr += attr_len; + + *ptr++ = '"'; + *ptr++ = '>'; + ptr += jsstr_flush(str, ptr); + + *ptr++ = '<'; + *ptr++ = '/'; + memcpy(ptr, tagname, tagname_len*sizeof(WCHAR)); + ptr += tagname_len; + *ptr = '>'; + *r = jsval_string(ret); }else { hres = E_OUTOFMEMORY;