Module: wine Branch: master Commit: 618b88ef30b0d5b955e1f3c65f6da0896aafac6b URL: http://source.winehq.org/git/wine.git/?a=commit;h=618b88ef30b0d5b955e1f3c65f...
Author: Jacek Caban jacek@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;