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