- Sync inetcomm, inseng, jscript to Wine-1.1.43.
[reactos.git] / reactos / dll / win32 / jscript / string.c
index df43fee..510dcc2 100644 (file)
@@ -622,11 +622,9 @@ static HRESULT String_match(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DISP
         VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
 {
     const WCHAR *str;
         VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
 {
     const WCHAR *str;
-    match_result_t *match_result;
     DispatchEx *regexp;
     DispatchEx *regexp;
-    DispatchEx *array;
-    VARIANT var, *arg_var;
-    DWORD length, match_cnt, i;
+    VARIANT *arg_var;
+    DWORD length;
     BSTR val_str = NULL;
     HRESULT hres = S_OK;
 
     BSTR val_str = NULL;
     HRESULT hres = S_OK;
 
@@ -645,7 +643,7 @@ static HRESULT String_match(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DISP
     case VT_DISPATCH:
         regexp = iface_to_jsdisp((IUnknown*)V_DISPATCH(arg_var));
         if(regexp) {
     case VT_DISPATCH:
         regexp = iface_to_jsdisp((IUnknown*)V_DISPATCH(arg_var));
         if(regexp) {
-            if(regexp->builtin_info->class == JSCLASS_REGEXP)
+            if(is_class(regexp, JSCLASS_REGEXP))
                 break;
             jsdisp_release(regexp);
         }
                 break;
             jsdisp_release(regexp);
         }
@@ -664,54 +662,17 @@ static HRESULT String_match(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DISP
     }
 
     hres = get_string_val(ctx, jsthis, ei, &str, &length, &val_str);
     }
 
     hres = get_string_val(ctx, jsthis, ei, &str, &length, &val_str);
-    if(SUCCEEDED(hres))
-        hres = regexp_match(ctx, regexp, str, length, FALSE, &match_result, &match_cnt);
-    jsdisp_release(regexp);
-    if(FAILED(hres)) {
-        SysFreeString(val_str);
-        return hres;
-    }
-
-    if(!match_cnt) {
-        TRACE("no match\n");
-
-        if(retv)
-            V_VT(retv) = VT_NULL;
-
-        SysFreeString(val_str);
-        return S_OK;
-    }
-
-    hres = create_array(ctx, match_cnt, &array);
-    if(FAILED(hres)) {
-        SysFreeString(val_str);
-        return hres;
-    }
-
-    V_VT(&var) = VT_BSTR;
-
-    for(i=0; i < match_cnt; i++) {
-        V_BSTR(&var) = SysAllocStringLen(match_result[i].str, match_result[i].len);
-        if(!V_BSTR(&var)) {
+    if(SUCCEEDED(hres)) {
+        if(!val_str)
+            val_str = SysAllocStringLen(str, length);
+        if(val_str)
+            hres = regexp_string_match(ctx, regexp, val_str, retv, ei);
+        else
             hres = E_OUTOFMEMORY;
             hres = E_OUTOFMEMORY;
-            break;
-        }
-
-        hres = jsdisp_propput_idx(array, i, &var, ei, NULL/*FIXME*/);
-        SysFreeString(V_BSTR(&var));
-        if(FAILED(hres))
-            break;
     }
 
     }
 
-    heap_free(match_result);
+    jsdisp_release(regexp);
     SysFreeString(val_str);
     SysFreeString(val_str);
-
-    if(SUCCEEDED(hres) && retv) {
-        V_VT(retv) = VT_DISPATCH;
-        V_DISPATCH(retv) = (IDispatch*)_IDispatchEx_(array);
-    }else {
-        jsdisp_release(array);
-    }
     return hres;
 }
 
     return hres;
 }