Jacek Caban : jscript: Added jsstr_extract helper and use it in String. charCodeAt implementation.

Alexandre Julliard julliard at winehq.org
Thu Mar 28 15:30:23 CDT 2013


Module: wine
Branch: master
Commit: 618b88ef30b0d5b955e1f3c65f6da0896aafac6b
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=618b88ef30b0d5b955e1f3c65f6da0896aafac6b

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Mar 28 11:01:52 2013 +0100

jscript: Added jsstr_extract helper and use it in String.charCodeAt implementation.

---

 dlls/jscript/jsstr.h  |   13 ++++++++++++-
 dlls/jscript/string.c |    7 +++++--
 2 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/dlls/jscript/jsstr.h b/dlls/jscript/jsstr.h
index 09893fa..28742ac 100644
--- a/dlls/jscript/jsstr.h
+++ b/dlls/jscript/jsstr.h
@@ -65,6 +65,11 @@ static inline BOOL jsstr_eq(jsstr_t *str1, jsstr_t *str2)
     return len == jsstr_length(str2) && !memcmp(str1->str, str2->str, len*sizeof(WCHAR));
 }
 
+static inline void jsstr_extract(jsstr_t *str, unsigned off, unsigned len, WCHAR *buf)
+{
+    memcpy(buf, str->str+off, len*sizeof(WCHAR));
+}
+
 static inline unsigned jsstr_flush(jsstr_t *str, WCHAR *buf)
 {
     unsigned len = jsstr_length(str);
@@ -74,7 +79,13 @@ static inline unsigned jsstr_flush(jsstr_t *str, WCHAR *buf)
 
 static inline jsstr_t *jsstr_substr(jsstr_t *str, unsigned off, unsigned len)
 {
-    return jsstr_alloc_len(str->str+off, len);
+    jsstr_t *ret;
+    WCHAR *ptr;
+
+    ptr = jsstr_alloc_buf(len, &ret);
+    if(ptr)
+        jsstr_extract(str, off, len, ptr);
+    return ret;
 }
 
 int jsstr_cmp(jsstr_t*,jsstr_t*) DECLSPEC_HIDDEN;
diff --git a/dlls/jscript/string.c b/dlls/jscript/string.c
index 7672fb7..64d0f1e 100644
--- a/dlls/jscript/string.c
+++ b/dlls/jscript/string.c
@@ -347,8 +347,11 @@ static HRESULT String_charCodeAt(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags,
         idx = d;
     }
 
-    if(r)
-        *r = jsval_number(str->str[idx]);
+    if(r) {
+        WCHAR c;
+        jsstr_extract(str, idx, 1, &c);
+        *r = jsval_number(c);
+    }
 
     jsstr_release(str);
     return S_OK;




More information about the wine-cvs mailing list