Author: fireball
Date: Tue Apr 20 18:42:47 2010
New Revision: 46956
URL:
http://svn.reactos.org/svn/reactos?rev=46956&view=rev
Log:
- Sync inetcomm, inseng, jscript to Wine-1.1.43.
Modified:
trunk/reactos/dll/win32/inetcomm/mimeintl.c
trunk/reactos/dll/win32/inetcomm/mimeole.c
trunk/reactos/dll/win32/inseng/inseng_main.c
trunk/reactos/dll/win32/jscript/jscript.h
trunk/reactos/dll/win32/jscript/regexp.c
trunk/reactos/dll/win32/jscript/string.c
Modified: trunk/reactos/dll/win32/inetcomm/mimeintl.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/inetcomm/mimeint…
==============================================================================
--- trunk/reactos/dll/win32/inetcomm/mimeintl.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/inetcomm/mimeintl.c [iso-8859-1] Tue Apr 20 18:42:47 2010
@@ -268,7 +268,7 @@
if(SUCCEEDED(hr))
*phCharset = add_charset(&This->charsets, &mlang_info,
-
(HCHARSET)InterlockedIncrement(&This->next_charset_handle));
+
UlongToHandle(InterlockedIncrement(&This->next_charset_handle)));
}
LeaveCriticalSection(&This->cs);
Modified: trunk/reactos/dll/win32/inetcomm/mimeole.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/inetcomm/mimeole…
==============================================================================
--- trunk/reactos/dll/win32/inetcomm/mimeole.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/inetcomm/mimeole.c [iso-8859-1] Tue Apr 20 18:42:47 2010
@@ -1419,7 +1419,7 @@
typedef struct body_t
{
struct list entry;
- HBODY hbody;
+ DWORD index;
IMimeBody *mime_body;
struct body_t *parent;
@@ -1434,7 +1434,7 @@
IStream *stream;
struct list body_tree;
- HBODY next_hbody;
+ DWORD next_index;
} MimeMessage;
static HRESULT WINAPI MimeMessage_QueryInterface(IMimeMessage *iface, REFIID riid, void
**ppv)
@@ -1512,13 +1512,13 @@
return E_NOTIMPL;
}
-static body_t *new_body_entry(IMimeBody *mime_body, HBODY hbody, body_t *parent)
+static body_t *new_body_entry(IMimeBody *mime_body, DWORD index, body_t *parent)
{
body_t *body = HeapAlloc(GetProcessHeap(), 0, sizeof(*body));
if(body)
{
body->mime_body = mime_body;
- body->hbody = hbody;
+ body->index = index;
list_init(&body->children);
body->parent = parent;
}
@@ -1630,8 +1630,7 @@
offset->cbBodyStart = cur.u.LowPart + offset->cbHeaderStart;
if(parent) MimeBody_set_offsets(impl_from_IMimeBody(mime_body), offset);
IMimeBody_SetData(mime_body, IET_BINARY, NULL, NULL, &IID_IStream, pStm);
- body = new_body_entry(mime_body, msg->next_hbody, parent);
- msg->next_hbody = (HBODY)((DWORD)msg->next_hbody + 1);
+ body = new_body_entry(mime_body, msg->next_index++, parent);
if(IMimeBody_IsContentType(mime_body, "multipart", NULL) == S_OK)
{
@@ -1812,7 +1811,7 @@
LIST_FOR_EACH_ENTRY(cur, list, body_t, entry)
{
- if(cur->hbody == hbody)
+ if(cur->index == HandleToUlong(hbody))
{
*body = cur;
return S_OK;
@@ -1948,7 +1947,7 @@
hr = get_body(This, location, hPivot, &body);
- if(hr == S_OK) *phBody = body->hbody;
+ if(hr == S_OK) *phBody = UlongToHandle(body->index);
return hr;
}
@@ -2003,38 +2002,35 @@
return S_OK;
}
-static HRESULT find_next(IMimeMessage *msg, LPFINDBODY find_body, HBODY *out)
-{
- HRESULT hr;
- IMimeBody *mime_body;
+static HRESULT find_next(IMimeMessage *msg, body_t *body, LPFINDBODY find, HBODY *out)
+{
+ MimeMessage *This = (MimeMessage *)msg;
+ struct list *ptr;
HBODY next;
- if(find_body->dwReserved == 0)
- find_body->dwReserved = (DWORD)HBODY_ROOT;
- else
- {
- hr = IMimeMessage_GetBody(msg, IBL_FIRST, (HBODY)find_body->dwReserved,
&next);
- if(hr == S_OK)
- find_body->dwReserved = (DWORD)next;
+ for (;;)
+ {
+ if (!body) ptr = list_head( &This->body_tree );
else
{
- hr = IMimeMessage_GetBody(msg, IBL_NEXT, (HBODY)find_body->dwReserved,
&next);
- if(hr == S_OK)
- find_body->dwReserved = (DWORD)next;
- else
- return MIME_E_NOT_FOUND;
+ ptr = list_head( &body->children );
+ while (!ptr)
+ {
+ if (!body->parent) return MIME_E_NOT_FOUND;
+ if (!(ptr = list_next( &body->parent->children,
&body->entry ))) body = body->parent;
+ }
}
- }
-
- hr = IMimeMessage_BindToObject(msg, (HBODY)find_body->dwReserved,
&IID_IMimeBody, (void**)&mime_body);
- if(IMimeBody_IsContentType(mime_body, find_body->pszPriType,
find_body->pszSubType) == S_OK)
- {
- IMimeBody_Release(mime_body);
- *out = (HBODY)find_body->dwReserved;
- return S_OK;
- }
- IMimeBody_Release(mime_body);
- return find_next(msg, find_body, out);
+
+ body = LIST_ENTRY( ptr, body_t, entry );
+ next = UlongToHandle( body->index );
+ find->dwReserved = body->index;
+ if (IMimeBody_IsContentType(body->mime_body, find->pszPriType,
find->pszSubType) == S_OK)
+ {
+ *out = next;
+ return S_OK;
+ }
+ }
+ return MIME_E_NOT_FOUND;
}
static HRESULT WINAPI MimeMessage_FindFirst(
@@ -2045,7 +2041,7 @@
TRACE("(%p)->(%p, %p)\n", iface, pFindBody, phBody);
pFindBody->dwReserved = 0;
- return find_next(iface, pFindBody, phBody);
+ return find_next( iface, NULL, pFindBody, phBody );
}
static HRESULT WINAPI MimeMessage_FindNext(
@@ -2053,9 +2049,15 @@
LPFINDBODY pFindBody,
LPHBODY phBody)
{
+ MimeMessage *This = (MimeMessage *)iface;
+ body_t *body;
+ HRESULT hr;
+
TRACE("(%p)->(%p, %p)\n", iface, pFindBody, phBody);
- return find_next(iface, pFindBody, phBody);
+ hr = find_body( &This->body_tree, UlongToHandle( pFindBody->dwReserved ),
&body );
+ if (hr != S_OK) return MIME_E_NOT_FOUND;
+ return find_next( iface, body, pFindBody, phBody );
}
static HRESULT WINAPI MimeMessage_ResolveURL(
@@ -2562,7 +2564,7 @@
This->refs = 1;
This->stream = NULL;
list_init(&This->body_tree);
- This->next_hbody = (HBODY)1;
+ This->next_index = 1;
*obj = &This->lpVtbl;
return S_OK;
Modified: trunk/reactos/dll/win32/inseng/inseng_main.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/inseng/inseng_ma…
==============================================================================
--- trunk/reactos/dll/win32/inseng/inseng_main.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/inseng/inseng_main.c [iso-8859-1] Tue Apr 20 18:42:47 2010
@@ -61,7 +61,6 @@
HRESULT WINAPI DllCanUnloadNow(void)
{
- FIXME("\n");
return S_FALSE;
}
Modified: trunk/reactos/dll/win32/jscript/jscript.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/jscript/jscript.…
==============================================================================
--- trunk/reactos/dll/win32/jscript/jscript.h [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/jscript/jscript.h [iso-8859-1] Tue Apr 20 18:42:47 2010
@@ -324,6 +324,7 @@
DWORD*,DWORD*,match_result_t*);
HRESULT regexp_match(script_ctx_t*,DispatchEx*,const
WCHAR*,DWORD,BOOL,match_result_t**,DWORD*);
HRESULT parse_regexp_flags(const WCHAR*,DWORD,DWORD*);
+HRESULT regexp_string_match(script_ctx_t*,DispatchEx*,BSTR,VARIANT*,jsexcept_t*);
static inline VARIANT *get_arg(DISPPARAMS *dp, DWORD i)
{
Modified: trunk/reactos/dll/win32/jscript/regexp.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/jscript/regexp.c…
==============================================================================
--- trunk/reactos/dll/win32/jscript/regexp.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/jscript/regexp.c [iso-8859-1] Tue Apr 20 18:42:47 2010
@@ -2384,7 +2384,7 @@
RECharSet *charSet;
const char *opname = reop_names[op];
- TRACE("\n%06d: %*s%s\n", pc - gData->regexp->program,
+ TRACE("\n%06d: %*s%s\n", (int)(pc - gData->regexp->program),
(int)gData->stateStackTop * 2, "", opname);
switch (op) {
@@ -2623,7 +2623,7 @@
for (;;) {
const char *opname = reop_names[op];
- TRACE("\n%06d: %*s%s\n", pc - gData->regexp->program,
+ TRACE("\n%06d: %*s%s\n", (int)(pc - gData->regexp->program),
(int)gData->stateStackTop * 2, "", opname);
if (REOP_IS_SIMPLE(op)) {
@@ -3637,25 +3637,25 @@
hres = to_string(ctx, arg, ei, &string);
if(FAILED(hres))
return hres;
+ length = SysStringLen(string);
}else {
- string = SysAllocStringLen(NULL, 0);
- if(!string)
- return E_OUTOFMEMORY;
- }
-
- if(regexp->last_index < 0) {
- SysFreeString(string);
- set_last_index(regexp, 0);
- *ret = VARIANT_FALSE;
- if(input) {
- *input = NULL;
- }
- return S_OK;
- }
-
- length = SysStringLen(string);
- if(regexp->jsregexp->flags & JSREG_GLOB)
+ string = NULL;
+ length = 0;
+ }
+
+ if(regexp->jsregexp->flags & JSREG_GLOB) {
+ if(regexp->last_index < 0) {
+ SysFreeString(string);
+ set_last_index(regexp, 0);
+ *ret = VARIANT_FALSE;
+ if(input) {
+ *input = NULL;
+ }
+ return S_OK;
+ }
+
last_index = regexp->last_index;
+ }
cp = string + last_index;
hres = regexp_match_next(ctx, ®exp->dispex, REM_RESET_INDEX, string,
length, &cp, parens,
@@ -3876,6 +3876,87 @@
return hres;
return create_regexp(ctx, src, -1, flags, ret);
+}
+
+HRESULT regexp_string_match(script_ctx_t *ctx, DispatchEx *re, BSTR str,
+ VARIANT *retv, jsexcept_t *ei)
+{
+ RegExpInstance *regexp = (RegExpInstance*)re;
+ match_result_t *match_result;
+ DWORD match_cnt, i, length;
+ DispatchEx *array;
+ VARIANT var;
+ HRESULT hres;
+
+ length = SysStringLen(str);
+
+ if(!(regexp->jsregexp->flags & JSREG_GLOB)) {
+ match_result_t match, *parens = NULL;
+ DWORD parens_cnt, parens_size = 0;
+ const WCHAR *cp = str;
+
+ hres = regexp_match_next(ctx, ®exp->dispex, 0, str, length, &cp,
&parens, &parens_size, &parens_cnt, &match);
+ if(FAILED(hres))
+ return hres;
+
+ if(retv) {
+ if(hres == S_OK) {
+ IDispatch *ret;
+
+ hres = create_match_array(ctx, str, &match, parens, parens_cnt, ei,
&ret);
+ if(SUCCEEDED(hres)) {
+ V_VT(retv) = VT_DISPATCH;
+ V_DISPATCH(retv) = ret;
+ }
+ }else {
+ V_VT(retv) = VT_NULL;
+ }
+ }
+
+ heap_free(parens);
+ return S_OK;
+ }
+
+ hres = regexp_match(ctx, ®exp->dispex, str, length, FALSE,
&match_result, &match_cnt);
+ if(FAILED(hres))
+ return hres;
+
+ if(!match_cnt) {
+ TRACE("no match\n");
+
+ if(retv)
+ V_VT(retv) = VT_NULL;
+ return S_OK;
+ }
+
+ hres = create_array(ctx, match_cnt, &array);
+ if(FAILED(hres))
+ 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)) {
+ 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);
+
+ if(SUCCEEDED(hres) && retv) {
+ V_VT(retv) = VT_DISPATCH;
+ V_DISPATCH(retv) = (IDispatch*)_IDispatchEx_(array);
+ }else {
+ jsdisp_release(array);
+ }
+ return hres;
}
static HRESULT RegExpConstr_value(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags,
DISPPARAMS *dp,
Modified: trunk/reactos/dll/win32/jscript/string.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/jscript/string.c…
==============================================================================
--- trunk/reactos/dll/win32/jscript/string.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/jscript/string.c [iso-8859-1] Tue Apr 20 18:42:47 2010
@@ -622,11 +622,9 @@
VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
{
const WCHAR *str;
- match_result_t *match_result;
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;
@@ -645,7 +643,7 @@
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);
}
@@ -664,54 +662,17 @@
}
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);
+ 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;
+ }
+
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)) {
- 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);
SysFreeString(val_str);
-
- if(SUCCEEDED(hres) && retv) {
- V_VT(retv) = VT_DISPATCH;
- V_DISPATCH(retv) = (IDispatch*)_IDispatchEx_(array);
- }else {
- jsdisp_release(array);
- }
return hres;
}