Jacek Caban : jscript: Reimplemented do_attributeless_tag_format without direct access to object' s string buffer.
Alexandre Julliard
julliard at winehq.org
Wed Mar 6 13:11:54 CST 2013
Module: wine
Branch: master
Commit: 25dbf32b5d60937afafe6d2f7be7a910b6bcefc3
URL: http://source.winehq.org/git/wine.git/?a=commit;h=25dbf32b5d60937afafe6d2f7be7a910b6bcefc3
Author: Jacek Caban <jacek at 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;
}
More information about the wine-cvs
mailing list