Jacek Caban : jscript: Use helpers to access string buffer in global.c.

Alexandre Julliard julliard at winehq.org
Wed Mar 27 15:40:05 CDT 2013


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Mar 27 11:03:44 2013 +0100

jscript: Use helpers to access string buffer in global.c.

---

 dlls/jscript/global.c |   69 ++++++++++++++++++++++++++----------------------
 1 files changed, 37 insertions(+), 32 deletions(-)

diff --git a/dlls/jscript/global.c b/dlls/jscript/global.c
index 093b1dd..0c0aa29 100644
--- a/dlls/jscript/global.c
+++ b/dlls/jscript/global.c
@@ -278,7 +278,7 @@ static HRESULT JSGlobal_escape(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, u
         jsval_t *r)
 {
     jsstr_t *ret_str, *str;
-    const WCHAR *ptr;
+    const WCHAR *ptr, *buf;
     DWORD len = 0;
     WCHAR *ret;
     HRESULT hres;
@@ -291,11 +291,11 @@ static HRESULT JSGlobal_escape(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, u
         return S_OK;
     }
 
-    hres = to_string(ctx, argv[0], &str);
+    hres = to_flat_string(ctx, argv[0], &str, &buf);
     if(FAILED(hres))
         return hres;
 
-    for(ptr = str->str; *ptr; ptr++) {
+    for(ptr = buf; *ptr; ptr++) {
         if(*ptr > 0xff)
             len += 6;
         else if(is_ecma_nonblank(*ptr))
@@ -311,7 +311,7 @@ static HRESULT JSGlobal_escape(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, u
     }
 
     len = 0;
-    for(ptr = str->str; *ptr; ptr++) {
+    for(ptr = buf; *ptr; ptr++) {
         if(*ptr > 0xff) {
             ret[len++] = '%';
             ret[len++] = 'u';
@@ -343,6 +343,7 @@ static HRESULT JSGlobal_eval(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, uns
         jsval_t *r)
 {
     bytecode_t *code;
+    const WCHAR *src;
     HRESULT hres;
 
     TRACE("\n");
@@ -364,8 +365,12 @@ static HRESULT JSGlobal_eval(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, uns
         return E_UNEXPECTED;
     }
 
+    src = jsstr_flatten(get_string(argv[0]));
+    if(!src)
+        return E_OUTOFMEMORY;
+
     TRACE("parsing %s\n", debugstr_jsval(argv[0]));
-    hres = compile_script(ctx, get_string(argv[0])->str, NULL, NULL, TRUE, FALSE, &code);
+    hres = compile_script(ctx, src, NULL, NULL, TRUE, FALSE, &code);
     if(FAILED(hres)) {
         WARN("parse (%s) failed: %08x\n", debugstr_jsval(argv[0]), hres);
         return throw_syntax_error(ctx, hres, NULL);
@@ -438,10 +443,10 @@ static HRESULT JSGlobal_parseInt(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags,
         jsval_t *r)
 {
     BOOL neg = FALSE, empty = TRUE;
+    const WCHAR *ptr;
     DOUBLE ret = 0.0;
     INT radix=0, i;
     jsstr_t *str;
-    WCHAR *ptr;
     HRESULT hres;
 
     if(!argc) {
@@ -463,11 +468,12 @@ static HRESULT JSGlobal_parseInt(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags,
         }
     }
 
-    hres = to_string(ctx, argv[0], &str);
+    hres = to_flat_string(ctx, argv[0], &str, &ptr);
     if(FAILED(hres))
         return hres;
 
-    for(ptr = str->str; isspaceW(*ptr); ptr++);
+    while(isspaceW(*ptr))
+        ptr++;
 
     switch(*ptr) {
     case '+':
@@ -520,7 +526,7 @@ static HRESULT JSGlobal_parseFloat(script_ctx_t *ctx, vdisp_t *jsthis, WORD flag
     LONGLONG d = 0, hlp;
     jsstr_t *val_str;
     int exp = 0;
-    WCHAR *str;
+    const WCHAR *str;
     BOOL ret_nan = TRUE, positive = TRUE;
     HRESULT hres;
 
@@ -530,12 +536,10 @@ static HRESULT JSGlobal_parseFloat(script_ctx_t *ctx, vdisp_t *jsthis, WORD flag
         return S_OK;
     }
 
-    hres = to_string(ctx, argv[0], &val_str);
+    hres = to_flat_string(ctx, argv[0], &val_str, &str);
     if(FAILED(hres))
         return hres;
 
-    str = val_str->str;
-
     while(isspaceW(*str)) str++;
 
     if(*str == '+')
@@ -625,7 +629,7 @@ static HRESULT JSGlobal_unescape(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags,
         jsval_t *r)
 {
     jsstr_t *ret_str, *str;
-    const WCHAR *ptr;
+    const WCHAR *ptr, *buf;
     DWORD len = 0;
     WCHAR *ret;
     HRESULT hres;
@@ -638,11 +642,11 @@ static HRESULT JSGlobal_unescape(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags,
         return S_OK;
     }
 
-    hres = to_string(ctx, argv[0], &str);
+    hres = to_flat_string(ctx, argv[0], &str, &buf);
     if(FAILED(hres))
         return hres;
 
-    for(ptr = str->str; *ptr; ptr++) {
+    for(ptr = buf; *ptr; ptr++) {
         if(*ptr == '%') {
             if(hex_to_int(*(ptr+1))!=-1 && hex_to_int(*(ptr+2))!=-1)
                 ptr += 2;
@@ -661,7 +665,7 @@ static HRESULT JSGlobal_unescape(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags,
     }
 
     len = 0;
-    for(ptr = str->str; *ptr; ptr++) {
+    for(ptr = buf; *ptr; ptr++) {
         if(*ptr == '%') {
             if(hex_to_int(*(ptr+1))!=-1 && hex_to_int(*(ptr+2))!=-1) {
                 ret[len] = (hex_to_int(*(ptr+1))<<4) + hex_to_int(*(ptr+2));
@@ -758,8 +762,8 @@ static HRESULT JSGlobal_CollectGarbage(script_ctx_t *ctx, vdisp_t *jsthis, WORD
 static HRESULT JSGlobal_encodeURI(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv,
         jsval_t *r)
 {
+    const WCHAR *ptr, *uri;
     jsstr_t *str, *ret;
-    const WCHAR *ptr;
     DWORD len = 0, i;
     char buf[4];
     WCHAR *rptr;
@@ -773,11 +777,11 @@ static HRESULT JSGlobal_encodeURI(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags
         return S_OK;
     }
 
-    hres = to_string(ctx, argv[0], &str);
+    hres = to_flat_string(ctx, argv[0], &str, &uri);
     if(FAILED(hres))
         return hres;
 
-    for(ptr = str->str; *ptr; ptr++) {
+    for(ptr = uri; *ptr; ptr++) {
         if(is_uri_unescaped(*ptr) || is_uri_reserved(*ptr) || *ptr == '#') {
             len++;
         }else {
@@ -797,7 +801,7 @@ static HRESULT JSGlobal_encodeURI(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags
         return E_OUTOFMEMORY;
     }
 
-    for(ptr = str->str; *ptr; ptr++) {
+    for(ptr = uri; *ptr; ptr++) {
         if(is_uri_unescaped(*ptr) || is_uri_reserved(*ptr) || *ptr == '#') {
             *rptr++ = *ptr;
         }else {
@@ -823,10 +827,11 @@ static HRESULT JSGlobal_encodeURI(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags
 static HRESULT JSGlobal_decodeURI(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv,
         jsval_t *r)
 {
+    const WCHAR *ptr, *uri;
     jsstr_t *str, *ret_str;
     unsigned len = 0;
-    WCHAR *ptr, *ret;
     int i, val, res;
+    WCHAR *ret;
     char buf[4];
     WCHAR out;
     HRESULT hres;
@@ -839,11 +844,11 @@ static HRESULT JSGlobal_decodeURI(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags
         return S_OK;
     }
 
-    hres = to_string(ctx, argv[0], &str);
+    hres = to_flat_string(ctx, argv[0], &str, &uri);
     if(FAILED(hres))
         return hres;
 
-    for(ptr = str->str; *ptr; ptr++) {
+    for(ptr = uri; *ptr; ptr++) {
         if(*ptr != '%') {
             len++;
         }else {
@@ -875,7 +880,7 @@ static HRESULT JSGlobal_decodeURI(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags
         return E_OUTOFMEMORY;
     }
 
-    for(ptr = str->str; *ptr; ptr++) {
+    for(ptr = uri; *ptr; ptr++) {
         if(*ptr != '%') {
             *ret++ = *ptr;
         }else {
@@ -910,7 +915,7 @@ static HRESULT JSGlobal_encodeURIComponent(script_ctx_t *ctx, vdisp_t *jsthis, W
 {
     jsstr_t *str, *ret_str;
     char buf[4];
-    const WCHAR *ptr;
+    const WCHAR *ptr, *uri;
     DWORD len = 0, size, i;
     WCHAR *ret;
     HRESULT hres;
@@ -923,11 +928,11 @@ static HRESULT JSGlobal_encodeURIComponent(script_ctx_t *ctx, vdisp_t *jsthis, W
         return S_OK;
     }
 
-    hres = to_string(ctx, argv[0], &str);
+    hres = to_flat_string(ctx, argv[0], &str, &uri);
     if(FAILED(hres))
         return hres;
 
-    for(ptr = str->str; *ptr; ptr++) {
+    for(ptr = uri; *ptr; ptr++) {
         if(is_uri_unescaped(*ptr))
             len++;
         else {
@@ -946,7 +951,7 @@ static HRESULT JSGlobal_encodeURIComponent(script_ctx_t *ctx, vdisp_t *jsthis, W
         return E_OUTOFMEMORY;
     }
 
-    for(ptr = str->str; *ptr; ptr++) {
+    for(ptr = uri; *ptr; ptr++) {
         if(is_uri_unescaped(*ptr)) {
             *ret++ = *ptr;
         }else {
@@ -972,8 +977,8 @@ static HRESULT JSGlobal_encodeURIComponent(script_ctx_t *ctx, vdisp_t *jsthis, W
 static HRESULT JSGlobal_decodeURIComponent(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv,
         jsval_t *r)
 {
+    const WCHAR *ptr, *uri;
     jsstr_t *str, *ret;
-    const WCHAR *ptr;
     WCHAR *out_ptr;
     DWORD len = 0;
     HRESULT hres;
@@ -986,11 +991,11 @@ static HRESULT JSGlobal_decodeURIComponent(script_ctx_t *ctx, vdisp_t *jsthis, W
         return S_OK;
     }
 
-    hres = to_string(ctx, argv[0], &str);
+    hres = to_flat_string(ctx, argv[0], &str, &uri);
     if(FAILED(hres))
         return hres;
 
-    ptr = str->str;
+    ptr = uri;
     while(*ptr) {
         if(*ptr == '%') {
             char octets[4];
@@ -1046,7 +1051,7 @@ static HRESULT JSGlobal_decodeURIComponent(script_ctx_t *ctx, vdisp_t *jsthis, W
         return E_OUTOFMEMORY;
     }
 
-    ptr = str->str;
+    ptr = uri;
     while(*ptr) {
         if(*ptr == '%') {
             char octets[4];




More information about the wine-cvs mailing list