diff --git a/README.md b/README.md index f867c95..187d4b7 100644 --- a/README.md +++ b/README.md @@ -261,68 +261,68 @@ cd /path/to/libwinevbs ## Wine Bug Fixes -The following Wine bugs have been fixed (either upstream in Wine or in this library): - -- ~~[Bug 53644](https://bugs.winehq.org/show_bug.cgi?id=53644)~~ — vbscript can not compile classes with lists of private / public / dim declarations -- ~~[Bug 53670](https://bugs.winehq.org/show_bug.cgi?id=53670)~~ — vbscript can not compile if expressions with reversed gte, lte, (=>, =<) -- ~~[Bug 53676](https://bugs.winehq.org/show_bug.cgi?id=53676)~~ — vbscript can not exec_script - invalid number of arguments for Randomize -- ~~[Bug 53678](https://bugs.winehq.org/show_bug.cgi?id=53678)~~ — vbscript can not compile CaseClausules that do not use a colon -- ~~[Bug 53766](https://bugs.winehq.org/show_bug.cgi?id=53766)~~ — vbscript fails to handle SAFEARRAY assignment, access, UBounds, LBounds -- ~~[Bug 53767](https://bugs.winehq.org/show_bug.cgi?id=53767)~~ — vbscript fails to handle ReDim when variable is not yet created -- ~~[Bug 53782](https://bugs.winehq.org/show_bug.cgi?id=53782)~~ — vbscript can not compile ReDim with list of variables -- ~~[Bug 53783](https://bugs.winehq.org/show_bug.cgi?id=53783)~~ — vbscript can not compile private const expressions -- ~~[Bug 53807](https://bugs.winehq.org/show_bug.cgi?id=53807)~~ — vbscript fails to redim original array in function when passed byref -- ~~[Bug 53866](https://bugs.winehq.org/show_bug.cgi?id=53866)~~ — vbscript fails to handle SAFEARRAY in for...each -- ~~[Bug 53867](https://bugs.winehq.org/show_bug.cgi?id=53867)~~ — vbscript fails to retrieve property array by index -- ~~[Bug 53868](https://bugs.winehq.org/show_bug.cgi?id=53868)~~ — vbscript fails to return TypeName for VT_DISPATCH -- ~~[Bug 53873](https://bugs.winehq.org/show_bug.cgi?id=53873)~~ — vbscript fails to compile Else If when If is on same line -- ~~[Bug 53888](https://bugs.winehq.org/show_bug.cgi?id=53888)~~ — vbscript does not allow Mid on non VT_BSTR -- ~~[Bug 54234](https://bugs.winehq.org/show_bug.cgi?id=54234)~~ — vbscript fails to compile when colon follows Else in If...Else -- ~~[Bug 54456](https://bugs.winehq.org/show_bug.cgi?id=54456)~~ — vbscript memory leak in For Each with SafeArray as group -- ~~[Bug 54457](https://bugs.winehq.org/show_bug.cgi?id=54457)~~ — vbscript memory leaks in interp_redim_preserve -- ~~[Bug 54458](https://bugs.winehq.org/show_bug.cgi?id=54458)~~ — vbscript memory leaks in Global_Split -- ~~[Bug 54489](https://bugs.winehq.org/show_bug.cgi?id=54489)~~ — vbscript Abs on BSTR returns invalid value -- ~~[Bug 54490](https://bugs.winehq.org/show_bug.cgi?id=54490)~~ — vbscript fails to compile when statement follows ElseIf -- ~~[Bug 54493](https://bugs.winehq.org/show_bug.cgi?id=54493)~~ — vbscript fails to compile concat when used without space and expression begins with H -- ~~[Bug 54731](https://bugs.winehq.org/show_bug.cgi?id=54731)~~ — vbscript: stack_pop_bool doesn't support floats or ole color -- ~~[Bug 54978](https://bugs.winehq.org/show_bug.cgi?id=54978)~~ — vbscript fails to compile Sub when End Sub on same line -- ~~[Bug 55042](https://bugs.winehq.org/show_bug.cgi?id=55042)~~ — IDictionary::Add() fails to add entries with numerical keys that have the same hashes -- ~~[Bug 55052](https://bugs.winehq.org/show_bug.cgi?id=55052)~~ — For loop where right bound is string coercion issue -- ~~[Bug 55185](https://bugs.winehq.org/show_bug.cgi?id=55185)~~ — vbscript round does not handle numdecimalplaces argument -- ~~[Bug 55931](https://bugs.winehq.org/show_bug.cgi?id=55931)~~ — vbscript: empty MOD 100000 returns garbage instead of 0 -- ~~[Bug 55969](https://bugs.winehq.org/show_bug.cgi?id=55969)~~ — vbscript fails to return TypeName for Nothing -- ~~[Bug 56139](https://bugs.winehq.org/show_bug.cgi?id=56139)~~ — scrrun: Dictionary does not allow storing at key Undefined -- ~~[Bug 56464](https://bugs.winehq.org/show_bug.cgi?id=56464)~~ — vbscript: Join on array with "empty" items fails -- ~~[Bug 56781](https://bugs.winehq.org/show_bug.cgi?id=56781)~~ — scrrun: Dictionary setting item to object fails -- ~~[Bug 57563](https://bugs.winehq.org/show_bug.cgi?id=57563)~~ — vbscript: mid() throws when passed VT_EMPTY instead of returning empty string +The following Wine bugs have been fixed in upstream Wine: + +- [Bug 53644](https://bugs.winehq.org/show_bug.cgi?id=53644) — vbscript can not compile classes with lists of private / public / dim declarations [10.1](https://gitlab.winehq.org/wine/wine/-/merge_requests/7068) +- [Bug 53670](https://bugs.winehq.org/show_bug.cgi?id=53670) — vbscript can not compile if expressions with reversed gte, lte, (=>, =<) [7.22](https://gitlab.winehq.org/wine/wine/-/merge_requests/1534) +- [Bug 53676](https://bugs.winehq.org/show_bug.cgi?id=53676) — vbscript can not exec_script - invalid number of arguments for Randomize [7.21](https://gitlab.winehq.org/wine/wine/-/merge_requests/1246) +- [Bug 53678](https://bugs.winehq.org/show_bug.cgi?id=53678) — vbscript can not compile CaseClausules that do not use a colon [8.0-rc1](https://gitlab.winehq.org/wine/wine/-/merge_requests/1611) +- [Bug 53766](https://bugs.winehq.org/show_bug.cgi?id=53766) — vbscript fails to handle SAFEARRAY assignment, access, UBounds, LBounds [Invalid] +- [Bug 53767](https://bugs.winehq.org/show_bug.cgi?id=53767) — vbscript fails to handle ReDim when variable is not yet created [10.16](https://gitlab.winehq.org/wine/wine/-/merge_requests/8998) +- [Bug 53782](https://bugs.winehq.org/show_bug.cgi?id=53782) — vbscript can not compile ReDim with list of variables [7.22](https://gitlab.winehq.org/wine/wine/-/merge_requests/1328) +- [Bug 53783](https://bugs.winehq.org/show_bug.cgi?id=53783) — vbscript can not compile private const expressions [8.0-rc1](https://gitlab.winehq.org/wine/wine/-/merge_requests/1561) +- [Bug 53807](https://bugs.winehq.org/show_bug.cgi?id=53807) — vbscript fails to redim original array in function when passed byref [7.22](https://gitlab.winehq.org/wine/wine/-/merge_requests/1495) +- [Bug 53866](https://bugs.winehq.org/show_bug.cgi?id=53866) — vbscript fails to handle SAFEARRAY in for...each [Invalid] +- [Bug 53867](https://bugs.winehq.org/show_bug.cgi?id=53867) — vbscript fails to retrieve property array by index [7.22](https://gitlab.winehq.org/wine/wine/-/merge_requests/1409) +- [Bug 53868](https://bugs.winehq.org/show_bug.cgi?id=53868) — vbscript fails to return TypeName for VT_DISPATCH [7.22](https://gitlab.winehq.org/wine/wine/-/merge_requests/1347) +- [Bug 53873](https://bugs.winehq.org/show_bug.cgi?id=53873) — vbscript fails to compile Else If when If is on same line [7.22](https://gitlab.winehq.org/wine/wine/-/merge_requests/1385) +- [Bug 53888](https://bugs.winehq.org/show_bug.cgi?id=53888) — vbscript does not allow Mid on non VT_BSTR [7.21](https://gitlab.winehq.org/wine/wine/-/merge_requests/1288) +- [Bug 53889](https://bugs.winehq.org/show_bug.cgi?id=53889) — does not support Get_Item call on IDispatch objects [11.5](https://gitlab.winehq.org/wine/wine/-/merge_requests/10367) +- [Bug 54234](https://bugs.winehq.org/show_bug.cgi?id=54234) — vbscript fails to compile when colon follows Else in If...Else [8.2](https://gitlab.winehq.org/wine/wine/-/merge_requests/2142) +- [Bug 54456](https://bugs.winehq.org/show_bug.cgi?id=54456) — vbscript memory leak in For Each with SafeArray as group [8.2](https://gitlab.winehq.org/wine/wine/-/merge_requests/2141) +- [Bug 54457](https://bugs.winehq.org/show_bug.cgi?id=54457) — vbscript memory leaks in interp_redim_preserve [8.2](https://gitlab.winehq.org/wine/wine/-/merge_requests/2132) +- [Bug 54458](https://bugs.winehq.org/show_bug.cgi?id=54458) — vbscript memory leaks in Global_Split [8.2](https://gitlab.winehq.org/wine/wine/-/merge_requests/2131) +- [Bug 54489](https://bugs.winehq.org/show_bug.cgi?id=54489) — vbscript Abs on BSTR returns invalid value [8.2](https://gitlab.winehq.org/wine/wine/-/merge_requests/2175) +- [Bug 54490](https://bugs.winehq.org/show_bug.cgi?id=54490) — vbscript fails to compile when statement follows ElseIf [8.2](https://gitlab.winehq.org/wine/wine/-/merge_requests/2188) +- [Bug 54493](https://bugs.winehq.org/show_bug.cgi?id=54493) — vbscript fails to compile concat when used without space and expression begins with H [8.2](https://gitlab.winehq.org/wine/wine/-/merge_requests/2214) +- [Bug 54731](https://bugs.winehq.org/show_bug.cgi?id=54731) — vbscript: stack_pop_bool doesn't support floats or ole color [9.0-rc1](https://gitlab.winehq.org/wine/wine/-/merge_requests/3132) +- [Bug 54978](https://bugs.winehq.org/show_bug.cgi?id=54978) — vbscript fails to compile Sub when End Sub on same line [8.12](https://gitlab.winehq.org/wine/wine/-/merge_requests/3206) +- [Bug 55037](https://bugs.winehq.org/show_bug.cgi?id=55037) — colon on new line after Then fails [11.5](https://gitlab.winehq.org/wine/wine/-/merge_requests/10311) +- [Bug 55042](https://bugs.winehq.org/show_bug.cgi?id=55042) — IDictionary::Add() fails to add entries with numerical keys that have the same hashes [8.11](https://gitlab.winehq.org/wine/wine/-/merge_requests/3064) +- [Bug 55052](https://bugs.winehq.org/show_bug.cgi?id=55052) — For loop where right bound is string coercion issue [9.0-rc1](https://gitlab.winehq.org/wine/wine/-/merge_requests/4615) +- [Bug 55006](https://bugs.winehq.org/show_bug.cgi?id=55006) — single line if else without else body fails compilation [11.5](https://gitlab.winehq.org/wine/wine/-/merge_requests/10310) +- [Bug 55185](https://bugs.winehq.org/show_bug.cgi?id=55185) — vbscript round does not handle numdecimalplaces argument [9.0-rc1](https://gitlab.winehq.org/wine/wine/-/merge_requests/4569) +- [Bug 55931](https://bugs.winehq.org/show_bug.cgi?id=55931) — vbscript: empty MOD 100000 returns garbage instead of 0 [9.0-rc1](https://gitlab.winehq.org/wine/wine/-/merge_requests/4515) +- [Bug 55969](https://bugs.winehq.org/show_bug.cgi?id=55969) — vbscript fails to return TypeName for Nothing [9.0-rc1](https://gitlab.winehq.org/wine/wine/-/merge_requests/4564) +- [Bug 56139](https://bugs.winehq.org/show_bug.cgi?id=56139) — scrrun: Dictionary does not allow storing at key Undefined [9.3](https://gitlab.winehq.org/wine/wine/-/merge_requests/4778) +- [Bug 56464](https://bugs.winehq.org/show_bug.cgi?id=56464) — vbscript: Join on array with "empty" items fails [10.2](https://gitlab.winehq.org/wine/wine/-/merge_requests/7304) +- [Bug 56480](https://bugs.winehq.org/show_bug.cgi?id=56480) — underscore line continue issues [11.5](https://gitlab.winehq.org/wine/wine/-/merge_requests/10312) +- [Bug 56781](https://bugs.winehq.org/show_bug.cgi?id=56781) — scrrun: Dictionary setting item to object fails [9.11](https://gitlab.winehq.org/wine/wine/-/merge_requests/5795) +- [Bug 56931](https://bugs.winehq.org/show_bug.cgi?id=56931) — Const used before declaration fails (explicit) [11.5](https://gitlab.winehq.org/wine/wine/-/merge_requests/10302) +- [Bug 57563](https://bugs.winehq.org/show_bug.cgi?id=57563) — vbscript: mid() throws when passed VT_EMPTY instead of returning empty string [10.1](https://gitlab.winehq.org/wine/wine/-/merge_requests/7049) +- [Bug 58248](https://bugs.winehq.org/show_bug.cgi?id=58248) — Me(Idx) fails to compile [11.5](https://gitlab.winehq.org/wine/wine/-/merge_requests/10371) Additionally, support was added for commands that Wine's VBScript engine had marked as `E_NOTIMPL`: -- `Execute` -- `ExecuteGlobal` -- `Eval` -- `GetRef` +- `Execute` [MR](https://gitlab.winehq.org/wine/wine/-/merge_requests/10368) +- `ExecuteGlobal` [MR](https://gitlab.winehq.org/wine/wine/-/merge_requests/10368) +- `Eval` [MR](https://gitlab.winehq.org/wine/wine/-/merge_requests/10368) +- `GetRef` [MR](https://gitlab.winehq.org/wine/wine/-/merge_requests/10444) ## Known Open Issues The following Wine bugs are still open and may require workarounds: -- [Bug 53844](https://bugs.winehq.org/show_bug.cgi?id=53844) — invoke_vbdisp not handling let property correctly for VT_DISPATCH arguments -- [Bug 53877](https://bugs.winehq.org/show_bug.cgi?id=53877) — compile_assignment assertion when assigning multidimensional array by indices -- [Bug 53889](https://bugs.winehq.org/show_bug.cgi?id=53889) — does not support Get_Item call on IDispatch objects -- [Bug 54177](https://bugs.winehq.org/show_bug.cgi?id=54177) — fails to compile sub call when argument expression contains multiplication -- [Bug 54221](https://bugs.winehq.org/show_bug.cgi?id=54221) — missing support for GetRef -- [Bug 54291](https://bugs.winehq.org/show_bug.cgi?id=54291) — stuck in endless for loop when UBound on Empty and On Error Resume Next -- [Bug 55006](https://bugs.winehq.org/show_bug.cgi?id=55006) — single line if else without else body fails compilation -- [Bug 55037](https://bugs.winehq.org/show_bug.cgi?id=55037) — colon on new line after Then fails -- [Bug 55093](https://bugs.winehq.org/show_bug.cgi?id=55093) — if boolean condition should work without braces -- [Bug 56280](https://bugs.winehq.org/show_bug.cgi?id=56280) — string coerced to Integer instead of Long -- [Bug 56281](https://bugs.winehq.org/show_bug.cgi?id=56281) — string number converted to ascii value instead of parsed value -- [Bug 56480](https://bugs.winehq.org/show_bug.cgi?id=56480) — underscore line continue issues -- [Bug 56931](https://bugs.winehq.org/show_bug.cgi?id=56931) — Const used before declaration fails (explicit) -- [Bug 57511](https://bugs.winehq.org/show_bug.cgi?id=57511) — For loop where loop var is not defined throws error without context -- [Bug 58051](https://bugs.winehq.org/show_bug.cgi?id=58051) — Dictionary direct Keys/Items access causes parse error -- [Bug 58056](https://bugs.winehq.org/show_bug.cgi?id=58056) — directly indexing a Split returns Empty -- [Bug 58248](https://bugs.winehq.org/show_bug.cgi?id=58248) — Me(Idx) fails to compile +- [Bug 53844](https://bugs.winehq.org/show_bug.cgi?id=53844) — invoke_vbdisp not handling let property correctly for VT_DISPATCH arguments [11.6](https://gitlab.winehq.org/wine/wine/-/merge_requests/10373) +- [Bug 53877](https://bugs.winehq.org/show_bug.cgi?id=53877) — compile_assignment assertion when assigning multidimensional array by indices [MR](https://gitlab.winehq.org/wine/wine/-/merge_requests/10363) +- [Bug 54177](https://bugs.winehq.org/show_bug.cgi?id=54177) — fails to compile sub call when argument expression contains multiplication [MR](https://gitlab.winehq.org/wine/wine/-/merge_requests/10244) +- [Bug 54221](https://bugs.winehq.org/show_bug.cgi?id=54221) — missing support for GetRef [MR](https://gitlab.winehq.org/wine/wine/-/merge_requests/10444) +- [Bug 54291](https://bugs.winehq.org/show_bug.cgi?id=54291) — stuck in endless for loop when UBound on Empty and On Error Resume Next [MR](https://gitlab.winehq.org/wine/wine/-/merge_requests/10366) +- [Bug 55093](https://bugs.winehq.org/show_bug.cgi?id=55093) — if boolean condition should work without braces [MR](https://gitlab.winehq.org/wine/wine/-/merge_requests/10317) +- [Bug 56280](https://bugs.winehq.org/show_bug.cgi?id=56280) — string coerced to Integer instead of Long [MR](https://gitlab.winehq.org/wine/wine/-/merge_requests/8635) +- [Bug 56281](https://bugs.winehq.org/show_bug.cgi?id=56281) — string number converted to ascii value instead of parsed value [MR](https://gitlab.winehq.org/wine/wine/-/merge_requests/10314) +- [Bug 57511](https://bugs.winehq.org/show_bug.cgi?id=57511) — For loop where loop var is not defined throws error without context [MR](https://gitlab.winehq.org/wine/wine/-/merge_requests/10374) +- [Bug 58051](https://bugs.winehq.org/show_bug.cgi?id=58051) — Dictionary direct Keys/Items access causes parse error [MR](https://gitlab.winehq.org/wine/wine/-/merge_requests/10362) +- [Bug 58056](https://bugs.winehq.org/show_bug.cgi?id=58056) — directly indexing a Split returns Empty [MR](https://gitlab.winehq.org/wine/wine/-/merge_requests/10308) ## VBScript Quirks and Workarounds @@ -340,48 +340,6 @@ If isGIOn <> (Not IsOff) Then See: [Bug 55093](https://bugs.winehq.org/show_bug.cgi?id=55093) -### `Else..End If` on the same line without a colon - -```vbscript -' does not work -else keygrad1 = 0 end if - -' workaround -else - keygrad1 = 0 -end if -``` - -### Colon on a new line after `Then` - -```vbscript -' does not work -If Keycode = StartGameKey Then - :pupevent 800 -End If - -' workaround — remove the colon -If Keycode = StartGameKey Then - pupevent 800 -End If -``` - -See: [Bug 55037](https://bugs.winehq.org/show_bug.cgi?id=55037) - -### Constants must be defined before use - -```vbscript -' does not work -Dim x -x = data -Const data = 1 - -' workaround -Const data = 1 -Dim x -x = data -``` - ### Setting values in a 2D array This is one of the most common issues. It can be automatically patched by [vpxtool](https://github.com/francisdb/vpxtool). @@ -407,20 +365,6 @@ dim roachxy : roachxy = EVAL("roachxy" & xx) dy = -1*(roachxy(1)(roachstep) - roachxy(1)(roachstep-1)) ``` -### For loop coercion issue when right bound is a string - -```vbscript -' loops incorrectly when num is a string -Dim i, num -num = "16" -For i = 0 To num - -' workaround -For i = 0 To CInt(num) -``` - -See: [Bug 55052](https://bugs.winehq.org/show_bug.cgi?id=55052) - ### Execute fails when object does not exist ```vbscript @@ -435,20 +379,6 @@ For i = 0 To 127 Next ``` -### Trailing `Else` without `End If` - -```vbscript -' does not work -If FlasherOnG = False then FlasherTimer3.Enabled = 1: Else -FlasherTimer4.Enabled = 0 - -' workaround -If FlasherOnG = False then FlasherTimer3.Enabled = 1 -FlasherTimer4.Enabled = 0 -``` - -See: [Bug 55006](https://bugs.winehq.org/show_bug.cgi?id=55006) - ## Acknowledgments Wine and the people who support the VBScript engine: diff --git a/src/wine.c b/src/wine.c index 87384ae..bb71225 100644 --- a/src/wine.c +++ b/src/wine.c @@ -964,8 +964,9 @@ BOOL WINAPI GetCursorPos(POINT *pt) UINT WINAPI GetCurrentDirectoryA(UINT buflen, LPSTR buf) { - getcwd(buf, buflen); - return 0; + if (!getcwd(buf, buflen)) + return 0; + return strlen(buf); } BOOL WINAPI SetCurrentDirectoryA(LPCSTR buf) diff --git a/wine/dlls/kernelbase/locale.c b/wine/dlls/kernelbase/locale.c index 40f7c79..a2f5751 100644 --- a/wine/dlls/kernelbase/locale.c +++ b/wine/dlls/kernelbase/locale.c @@ -27,7 +27,6 @@ #include #include "ntstatus.h" -#define WIN32_NO_STATUS #define WINNORMALIZEAPI #include "windef.h" #include "winbase.h" diff --git a/wine/dlls/oleaut32/oleaut32_oaidl.h b/wine/dlls/oleaut32/oleaut32_oaidl.h index 9c98ff9..c772edd 100644 --- a/wine/dlls/oleaut32/oleaut32_oaidl.h +++ b/wine/dlls/oleaut32/oleaut32_oaidl.h @@ -1,4 +1,4 @@ -/*** Autogenerated by WIDL 11.1 from dlls/oleaut32/oleaut32_oaidl.idl - Do not edit ***/ +/*** Autogenerated by WIDL 11.5 from dlls/oleaut32/oleaut32_oaidl.idl - Do not edit ***/ #ifdef _WIN32 #ifndef __REQUIRED_RPCNDR_H_VERSION__ diff --git a/wine/dlls/scrrun/scrrun.h b/wine/dlls/scrrun/scrrun.h index d29657c..7654751 100644 --- a/wine/dlls/scrrun/scrrun.h +++ b/wine/dlls/scrrun/scrrun.h @@ -1,4 +1,4 @@ -/*** Autogenerated by WIDL 11.1 from dlls/scrrun/scrrun.idl - Do not edit ***/ +/*** Autogenerated by WIDL 11.5 from dlls/scrrun/scrrun.idl - Do not edit ***/ #ifdef _WIN32 #ifndef __REQUIRED_RPCNDR_H_VERSION__ diff --git a/wine/dlls/vbscript/compile.c b/wine/dlls/vbscript/compile.c index 1e1b580..c9885c6 100644 --- a/wine/dlls/vbscript/compile.c +++ b/wine/dlls/vbscript/compile.c @@ -1201,10 +1201,11 @@ static HRESULT compile_const_statement(compile_ctx_t *ctx, const_statement_t *st do { decl = next_decl; - if(lookup_const_decls(ctx, decl->name, FALSE) || lookup_args_name(ctx, decl->name) - || lookup_dim_decls(ctx, decl->name)) { - FIXME("%s redefined\n", debugstr_w(decl->name)); - return E_FAIL; + if(!lookup_const_decls(ctx, decl->name, FALSE)) { + if(lookup_args_name(ctx, decl->name) || lookup_dim_decls(ctx, decl->name)) { + FIXME("%s redefined\n", debugstr_w(decl->name)); + return E_FAIL; + } } if(ctx->func->type == FUNC_GLOBAL) { @@ -1223,8 +1224,10 @@ static HRESULT compile_const_statement(compile_ctx_t *ctx, const_statement_t *st } next_decl = decl->next; - decl->next = ctx->const_decls; - ctx->const_decls = decl; + if(!lookup_const_decls(ctx, decl->name, FALSE)) { + decl->next = ctx->const_decls; + ctx->const_decls = decl; + } } while(next_decl); return S_OK; @@ -1359,6 +1362,107 @@ static HRESULT compile_retval_statement(compile_ctx_t *ctx, retval_statement_t * return S_OK; } +static HRESULT collect_const_decls(compile_ctx_t *ctx, statement_t *stat) +{ + HRESULT hres; + + while(stat) { + switch(stat->type) { + case STAT_CONST: { + const_statement_t *const_stat = (const_statement_t*)stat; + const_decl_t *decl; + + for(decl = const_stat->decls; decl; decl = decl->next) { + const_decl_t *new_decl; + + if(lookup_const_decls(ctx, decl->name, FALSE)) + break; /* already collected */ + + if(lookup_args_name(ctx, decl->name) || lookup_dim_decls(ctx, decl->name)) { + FIXME("%s redefined\n", debugstr_w(decl->name)); + return E_FAIL; + } + + new_decl = compiler_alloc(ctx->code, sizeof(*new_decl)); + if(!new_decl) + return E_OUTOFMEMORY; + new_decl->name = decl->name; + new_decl->value_expr = decl->value_expr; + new_decl->next = ctx->const_decls; + ctx->const_decls = new_decl; + } + break; + } + case STAT_IF: { + if_statement_t *if_stat = (if_statement_t*)stat; + elseif_decl_t *elseif; + + hres = collect_const_decls(ctx, if_stat->if_stat); + if(FAILED(hres)) + return hres; + for(elseif = if_stat->elseifs; elseif; elseif = elseif->next) { + hres = collect_const_decls(ctx, elseif->stat); + if(FAILED(hres)) + return hres; + } + hres = collect_const_decls(ctx, if_stat->else_stat); + if(FAILED(hres)) + return hres; + break; + } + case STAT_WHILE: + case STAT_WHILELOOP: + case STAT_DOWHILE: + case STAT_DOUNTIL: + case STAT_UNTIL: { + while_statement_t *while_stat = (while_statement_t*)stat; + hres = collect_const_decls(ctx, while_stat->body); + if(FAILED(hres)) + return hres; + break; + } + case STAT_FORTO: { + forto_statement_t *forto_stat = (forto_statement_t*)stat; + hres = collect_const_decls(ctx, forto_stat->body); + if(FAILED(hres)) + return hres; + break; + } + case STAT_FOREACH: { + foreach_statement_t *foreach_stat = (foreach_statement_t*)stat; + hres = collect_const_decls(ctx, foreach_stat->body); + if(FAILED(hres)) + return hres; + break; + } + case STAT_SELECT: { + select_statement_t *select_stat = (select_statement_t*)stat; + case_clausule_t *clause; + for(clause = select_stat->case_clausules; clause; clause = clause->next) { + hres = collect_const_decls(ctx, clause->stat); + if(FAILED(hres)) + return hres; + } + break; + } + case STAT_WITH: { + with_statement_t *with_stat = (with_statement_t*)stat; + hres = collect_const_decls(ctx, with_stat->body); + if(FAILED(hres)) + return hres; + break; + } + case STAT_FUNC: + /* Don't recurse into sub/function bodies; they are compiled separately */ + break; + default: + break; + } + stat = stat->next; + } + return S_OK; +} + static HRESULT compile_statement(compile_ctx_t *ctx, statement_ctx_t *stat_ctx, statement_t *stat) { HRESULT hres; @@ -1531,6 +1635,11 @@ static HRESULT compile_func(compile_ctx_t *ctx, statement_t *stat, function_t *f ctx->func = func; ctx->dim_decls = ctx->dim_decls_tail = NULL; ctx->const_decls = NULL; + + hres = collect_const_decls(ctx, stat); + if(FAILED(hres)) + return hres; + hres = compile_statement(ctx, NULL, stat); ctx->func = NULL; if(FAILED(hres)) diff --git a/wine/dlls/vbscript/global.c b/wine/dlls/vbscript/global.c index 3e248a6..3cabad2 100644 --- a/wine/dlls/vbscript/global.c +++ b/wine/dlls/vbscript/global.c @@ -3025,7 +3025,7 @@ static HRESULT Global_Split(BuiltinDisp *This, VARIANT *args, unsigned args_cnt, if(V_VT(args+1) != VT_BSTR) { hres = to_string(args+1, &delimiter); if(FAILED(hres)) - goto error; + goto done; }else { delimiter = V_BSTR(args+1); } @@ -3035,10 +3035,10 @@ static HRESULT Global_Split(BuiltinDisp *This, VARIANT *args, unsigned args_cnt, if(args_cnt > 2) { hres = to_int(args+2, &max); if(FAILED(hres)) - goto error; + goto done; if (max < -1) { hres = MAKE_VBSERROR(VBSE_ILLEGAL_FUNC_CALL); - goto error; + goto done; } }else { max = -1; @@ -3047,10 +3047,10 @@ static HRESULT Global_Split(BuiltinDisp *This, VARIANT *args, unsigned args_cnt, if(args_cnt == 4) { hres = to_int(args+3, &mode); if(FAILED(hres)) - goto error; + goto done; if (mode != 0 && mode != 1) { hres = MAKE_VBSERROR(VBSE_ILLEGAL_FUNC_CALL); - goto error; + goto done; } }else { mode = 0; @@ -3059,12 +3059,22 @@ static HRESULT Global_Split(BuiltinDisp *This, VARIANT *args, unsigned args_cnt, start = 0; len = SysStringLen(string); + + if(!len) { + bounds.lLbound = 0; + bounds.cElements = 0; + sa = SafeArrayCreate(VT_VARIANT, 1, &bounds); + if(!sa) + hres = E_OUTOFMEMORY; + goto done; + } + count = 0; indices = malloc( indices_max * sizeof(int)); if(!indices) { hres = E_OUTOFMEMORY; - goto error; + goto done; } while(1) { @@ -3084,7 +3094,7 @@ static HRESULT Global_Split(BuiltinDisp *This, VARIANT *args, unsigned args_cnt, new_indices = realloc(indices, indices_max * 2 * sizeof(int)); if(!new_indices) { hres = E_OUTOFMEMORY; - goto error; + goto done; } indices = new_indices; indices_max *= 2; @@ -3101,11 +3111,11 @@ static HRESULT Global_Split(BuiltinDisp *This, VARIANT *args, unsigned args_cnt, sa = SafeArrayCreate( VT_VARIANT, 1, &bounds); if (!sa) { hres = E_OUTOFMEMORY; - goto error; + goto done; } hres = SafeArrayAccessData(sa, (void**)&data); if(FAILED(hres)) { - goto error; + goto done; } start = 0; @@ -3121,7 +3131,7 @@ static HRESULT Global_Split(BuiltinDisp *This, VARIANT *args, unsigned args_cnt, } SafeArrayUnaccessData(sa); -error: +done: if(SUCCEEDED(hres) && res) { V_VT(res) = VT_ARRAY|VT_VARIANT; V_ARRAY(res) = sa; diff --git a/wine/dlls/vbscript/interp.c b/wine/dlls/vbscript/interp.c index 317c0c8..e45ae51 100644 --- a/wine/dlls/vbscript/interp.c +++ b/wine/dlls/vbscript/interp.c @@ -472,14 +472,12 @@ static HRESULT stack_assume_disp(exec_ctx_t *ctx, unsigned n, IDispatch **disp) if(V_VT(v) != VT_DISPATCH && (disp || V_VT(v) != VT_UNKNOWN)) { if(V_VT(v) != (VT_VARIANT|VT_BYREF)) { - FIXME("not supported type: %s\n", debugstr_variant(v)); - return E_FAIL; + return MAKE_VBSERROR(VBSE_OBJECT_REQUIRED); } ref = V_VARIANTREF(v); if(V_VT(ref) != VT_DISPATCH && (disp || V_VT(ref) != VT_UNKNOWN)) { - FIXME("not disp %s\n", debugstr_variant(ref)); - return E_FAIL; + return MAKE_VBSERROR(VBSE_OBJECT_REQUIRED); } V_VT(v) = V_VT(ref); @@ -655,30 +653,15 @@ static HRESULT do_icall(exec_ctx_t *ctx, VARIANT *res, BSTR identifier, unsigned return hres; break; case REF_OBJ: -#ifndef __LIBWINEVBS__ if(arg_cnt) { - FIXME("arguments on object\n"); - return E_NOTIMPL; + vbstack_to_dp(ctx, arg_cnt, FALSE, &dp); + hres = disp_call(ctx->script, ref.u.obj, DISPID_VALUE, &dp, res); + if(FAILED(hres)) + return hres; + break; } -#endif if(res) { -#ifdef __LIBWINEVBS__ - if (arg_cnt) { - vbstack_to_dp(ctx, arg_cnt, FALSE, &dp); - - hres = IDispatch_Invoke(ref.u.obj, DISPID_VALUE, &IID_NULL, - LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, &dp, res, - NULL, NULL); - - if(FAILED(hres)) - return hres; - - IDispatch_AddRef(V_DISPATCH(res)); - - break; - } -#endif IDispatch_AddRef(ref.u.obj); V_VT(res) = VT_DISPATCH; V_DISPATCH(res) = ref.u.obj; @@ -911,10 +894,8 @@ static HRESULT assign_ident(exec_ctx_t *ctx, BSTR name, WORD flags, DISPPARAMS * break; } - if(!(V_VT(v) & VT_ARRAY)) { - FIXME("array assign on type %d\n", V_VT(v)); - return E_FAIL; - } + if(!(V_VT(v) & VT_ARRAY)) + return DISP_E_TYPEMISMATCH; switch(V_VT(v)) { case VT_ARRAY|VT_BYREF|VT_VARIANT: @@ -963,10 +944,8 @@ static HRESULT assign_ident(exec_ctx_t *ctx, BSTR name, WORD flags, DISPPARAMS * }else { VARIANT *new_var; - if(arg_cnt(dp)) { - FIXME("arg_cnt %d not supported\n", arg_cnt(dp)); - return E_NOTIMPL; - } + if(arg_cnt(dp)) + return DISP_E_TYPEMISMATCH; TRACE("creating variable %s\n", debugstr_w(name)); hres = add_dynamic_var(ctx, name, FALSE, &new_var); @@ -1572,9 +1551,8 @@ static HRESULT interp_newenum(exec_ctx_t *ctx) break; } default: - FIXME("Unsupported for %s\n", debugstr_variant(v.v)); release_val(&v); - return E_NOTIMPL; + return MAKE_VBSERROR(VBSE_NOT_ENUM); } return S_OK; @@ -1593,8 +1571,7 @@ static HRESULT interp_enumnext(exec_ctx_t *ctx) TRACE("\n"); if(V_VT(stack_top(ctx, 0)) == VT_EMPTY) { - FIXME("uninitialized\n"); - return E_FAIL; + return MAKE_VBSERROR(VBSE_NOT_ENUM); } assert(V_VT(stack_top(ctx, 0)) == VT_UNKNOWN); @@ -2491,7 +2468,7 @@ static HRESULT interp_incc(exec_ctx_t *ctx) #ifdef __LIBWINEVBS__ if(V_VT(stack_top(ctx, 0)) == VT_EMPTY) - return MAKE_VBSERROR(92); + return MAKE_VBSERROR(VBSE_FOR_LOOP_NOT_INITIALIZED); #endif hres = lookup_identifier(ctx, ident, VBDISP_LET, &ref); diff --git a/wine/dlls/vbscript/lex.c b/wine/dlls/vbscript/lex.c index 46a8a8c..3f393eb 100644 --- a/wine/dlls/vbscript/lex.c +++ b/wine/dlls/vbscript/lex.c @@ -507,7 +507,7 @@ static int parse_next_token(void *lval, unsigned *loc, parser_ctx_t *ctx) * Parser can't predict if bracket is part of argument expression or an argument * in call expression. We predict it here instead. */ - if(ctx->last_token == tIdentifier || ctx->last_token == ')') + if(ctx->last_token == tIdentifier || ctx->last_token == ')' || ctx->last_token == tME) return '('; return tEXPRLBRACKET; #else @@ -531,7 +531,7 @@ static int parse_next_token(void *lval, unsigned *loc, parser_ctx_t *ctx) * not call parens. Detect this when: identifier/')' precedes '(' with a space, * and a binary-only operator (*, /, \, ^, &) follows the matching ')'. */ - if(ctx->last_token == tIdentifier || ctx->last_token == ')') { + if(ctx->last_token == tIdentifier || ctx->last_token == ')' || ctx->last_token == tME) { if(paren_pos > ctx->code && (paren_pos[-1] == ' ' || paren_pos[-1] == '\t') && ctx->is_statement_ctx) { const WCHAR *p = ctx->ptr; diff --git a/wine/dlls/vbscript/parser.y b/wine/dlls/vbscript/parser.y index 4ee0b9c..63a4de9 100644 --- a/wine/dlls/vbscript/parser.y +++ b/wine/dlls/vbscript/parser.y @@ -137,7 +137,7 @@ static statement_t *link_statements(statement_t*,statement_t*); %token tDate %type Statement SimpleStatement StatementNl StatementsNl StatementsNl_opt BodyStatements IfStatement Else_opt -%type GlobalDimDeclaration +%type GlobalDimDeclaration StatementsBody StatementsBody_opt %type Expression LiteralExpression PrimaryExpression EqualityExpression CallExpression ExpressionNl_opt %type ConcatExpression AdditiveExpression ModExpression IntdivExpression MultiplicativeExpression ExpExpression %type NotExpression UnaryExpression AndExpression OrExpression XorExpression EqvExpression SignExpression @@ -306,11 +306,13 @@ Step_opt | tSTEP Expression { $$ = $2; } IfStatement - : tIF Expression tTHEN tNL StatementsNl_opt ElseIfs_opt Else_opt tEND tIF - { $$ = new_if_statement(ctx, @$, $2, $5, $6, $7); CHECK_ERROR; } + : tIF Expression tTHEN tNL StSep_opt StatementsNl_opt ElseIfs_opt Else_opt tEND tIF + { $$ = new_if_statement(ctx, @$, $2, $6, $7, $8); CHECK_ERROR; } | tIF Expression tTHEN Statement EndIf_opt { $$ = new_if_statement(ctx, @$, $2, $4, NULL, NULL); CHECK_ERROR; } | tIF Expression tTHEN Statement tELSE Statement EndIf_opt - { $$ = new_if_statement(ctx, @$, $2, $4, NULL, $6); CHECK_ERROR; } + { $$ = new_if_statement(ctx, @$, $2, $4, NULL, $6); CHECK_ERROR; } + | tIF Expression tTHEN Statement tELSE EndIf_opt + { $$ = new_if_statement(ctx, @$, $2, $4, NULL, NULL); CHECK_ERROR; } EndIf_opt : /* empty */ @@ -325,12 +327,26 @@ ElseIfs | ElseIf ElseIfs { $1->next = $2; $$ = $1; } ElseIf - : tELSEIF Expression tTHEN StSep_opt StatementsNl_opt + : tELSEIF Expression tTHEN StSep StatementsNl_opt { $$ = new_elseif_decl(ctx, @$, $2, $5); } + | tELSEIF Expression tTHEN StatementsBody_opt + { $$ = new_elseif_decl(ctx, @$, $2, $4); } Else_opt : /* empty */ { $$ = NULL; } - | tELSE StSep_opt StatementsNl_opt { $$ = $3; } + | tELSE StSep StatementsBody_opt { $$ = $3; } + | tELSE StatementsBody { $$ = $2; } + +StatementsBody_opt + : /* empty */ { $$ = NULL; } + | SimpleStatement { $$ = $1; } + | SimpleStatement StSep StatementsBody_opt + { $1->next = $3; $$ = $1; } + +StatementsBody + : SimpleStatement { $$ = $1; } + | SimpleStatement StSep StatementsBody_opt + { $1->next = $3; $$ = $1; } CaseClausules : /* empty */ { $$ = NULL; } @@ -730,7 +746,7 @@ static call_expression_t *make_call_expression(parser_ctx_t *ctx, expression_t * { call_expression_t *call_expr; - if(callee_expr->type == EXPR_MEMBER) + if(callee_expr->type == EXPR_MEMBER || callee_expr->type == EXPR_ME) return new_call_expression(ctx, callee_expr, arguments); if(callee_expr->type != EXPR_CALL) { FIXME("Unhandled for expr type %u\n", callee_expr->type); @@ -746,6 +762,7 @@ static call_expression_t *make_call_expression(parser_ctx_t *ctx, expression_t * if(call_expr->args->next) { FIXME("Invalid syntax: invalid use of parentheses for arguments\n"); ctx->hres = E_FAIL; + ctx->error_loc = ctx->ptr - ctx->code; return NULL; } @@ -755,22 +772,21 @@ static call_expression_t *make_call_expression(parser_ctx_t *ctx, expression_t * if(!arguments) return call_expr; -#ifndef __LIBWINEVBS__ if(arguments->type != EXPR_NOARG) { +#ifdef __LIBWINEVBS__ FIXME("Invalid syntax: missing comma\n"); ctx->hres = E_FAIL; return NULL; - } #else - if(arguments->type != EXPR_NOARG) { + /* 'f (x) + expr, ...' — combine bracketed arg with the +/- expression. */ expression_t *remaining = arguments->next; call_expr->args = new_binary_expression(ctx, EXPR_ADD, call_expr->args, arguments); if(!call_expr->args) return NULL; call_expr->args->next = remaining; return call_expr; - } #endif + } call_expr->args->next = arguments->next; return call_expr; @@ -1236,10 +1252,8 @@ HRESULT parse_script(parser_ctx_t *ctx, const WCHAR *code, const WCHAR *delimite ctx->hres = S_OK; ctx->error_loc = -1; ctx->last_token = tNL; -#ifdef __LIBWINEVBS__ ctx->is_statement_ctx = TRUE; ctx->paren_depth = 0; -#endif ctx->last_nl = 0; ctx->stats = ctx->stats_tail = NULL; ctx->class_decls = NULL; diff --git a/wine/dlls/vbscript/vbdisp.c b/wine/dlls/vbscript/vbdisp.c index 28d6d54..d572eb5 100644 --- a/wine/dlls/vbscript/vbdisp.c +++ b/wine/dlls/vbscript/vbdisp.c @@ -1863,6 +1863,7 @@ void map_vbs_exception(EXCEPINFO *ei) case DISP_E_NONAMEDARGS: vbse_number = VBSE_NAMED_ARGS_NOT_SUPPORTED; break; case DISP_E_BADVARTYPE: vbse_number = VBSE_INVALID_TYPELIB_VARIABLE; break; case DISP_E_OVERFLOW: vbse_number = VBSE_OVERFLOW; break; + case DISP_E_DIVBYZERO: vbse_number = VBSE_DIVISION_BY_ZERO; break; case DISP_E_BADINDEX: vbse_number = VBSE_OUT_OF_BOUNDS; break; case DISP_E_UNKNOWNLCID: vbse_number = VBSE_LOCALE_SETTING_NOT_SUPPORTED; break; case DISP_E_ARRAYISLOCKED: vbse_number = VBSE_ARRAY_LOCKED; break; diff --git a/wine/dlls/vbscript/vbscript.c b/wine/dlls/vbscript/vbscript.c index 06f5e37..12a7853 100644 --- a/wine/dlls/vbscript/vbscript.c +++ b/wine/dlls/vbscript/vbscript.c @@ -863,7 +863,7 @@ static HRESULT WINAPI VBScript_GetScriptDispatch(IActiveScript *iface, LPCOLESTR } script_obj = This->ctx->script_obj; - if(pstrItemName) { + if(pstrItemName && *pstrItemName) { named_item_t *item = lookup_named_item(This->ctx, pstrItemName, 0); if(!item) return E_INVALIDARG; if(item->script_obj) script_obj = item->script_obj; diff --git a/wine/dlls/vbscript/vbscript_classes.h b/wine/dlls/vbscript/vbscript_classes.h index ab5fe6c..1ba1621 100644 --- a/wine/dlls/vbscript/vbscript_classes.h +++ b/wine/dlls/vbscript/vbscript_classes.h @@ -1,4 +1,4 @@ -/*** Autogenerated by WIDL 11.1 from dlls/vbscript/vbscript_classes.idl - Do not edit ***/ +/*** Autogenerated by WIDL 11.5 from dlls/vbscript/vbscript_classes.idl - Do not edit ***/ #ifdef _WIN32 #ifndef __REQUIRED_RPCNDR_H_VERSION__ diff --git a/wine/dlls/vbscript/vbscript_defs.h b/wine/dlls/vbscript/vbscript_defs.h index 139b712..80eda1c 100644 --- a/wine/dlls/vbscript/vbscript_defs.h +++ b/wine/dlls/vbscript/vbscript_defs.h @@ -241,6 +241,7 @@ #define VBSE_OUT_OF_MEMORY 7 #define VBSE_OUT_OF_BOUNDS 9 #define VBSE_ARRAY_LOCKED 10 +#define VBSE_DIVISION_BY_ZERO 11 #define VBSE_TYPE_MISMATCH 13 #define VBSE_FILE_NOT_FOUND 53 #define VBSE_IO_ERROR 57 @@ -251,8 +252,12 @@ #define VBSE_PATH_FILE_ACCESS 75 #define VBSE_PATH_NOT_FOUND 76 #define VBSE_OBJECT_VARIABLE_NOT_SET 91 +#ifdef __LIBWINEVBS__ +#define VBSE_FOR_LOOP_NOT_INITIALIZED 92 +#endif #define VBSE_ILLEGAL_NULL_USE 94 #define VBSE_CANT_CREATE_TMP_FILE 322 +#define VBSE_OBJECT_REQUIRED 424 #define VBSE_CANT_CREATE_OBJECT 429 #define VBSE_OLE_NOT_SUPPORTED 430 #define VBSE_OLE_FILE_NOT_FOUND 432 diff --git a/wine/dlls/vbscript/vbscript_main.c b/wine/dlls/vbscript/vbscript_main.c index 28fe102..2281c27 100644 --- a/wine/dlls/vbscript/vbscript_main.c +++ b/wine/dlls/vbscript/vbscript_main.c @@ -58,6 +58,9 @@ BSTR get_vbscript_string(int id) case VBSE_ARRAY_LOCKED: swprintf(buf, ARRAY_SIZE(buf), L"VBSE_ARRAY_LOCKED"); break; + case VBSE_DIVISION_BY_ZERO: + swprintf(buf, ARRAY_SIZE(buf), L"VBSE_DIVISION_BY_ZERO"); + break; case VBSE_TYPE_MISMATCH: swprintf(buf, ARRAY_SIZE(buf), L"VBSE_TYPE_MISMATCH"); break; @@ -88,12 +91,18 @@ BSTR get_vbscript_string(int id) case VBSE_OBJECT_VARIABLE_NOT_SET: swprintf(buf, ARRAY_SIZE(buf), L"VBSE_OBJECT_VARIABLE_NOT_SET"); break; + case VBSE_FOR_LOOP_NOT_INITIALIZED: + swprintf(buf, ARRAY_SIZE(buf), L"VBSE_FOR_LOOP_NOT_INITIALIZED"); + break; case VBSE_ILLEGAL_NULL_USE: swprintf(buf, ARRAY_SIZE(buf), L"VBSE_ILLEGAL_NULL_USE"); break; case VBSE_CANT_CREATE_TMP_FILE: swprintf(buf, ARRAY_SIZE(buf), L"VBSE_CANT_CREATE_TMP_FILE"); break; + case VBSE_OBJECT_REQUIRED: + swprintf(buf, ARRAY_SIZE(buf), L"VBSE_OBJECT_REQUIRED"); + break; case VBSE_CANT_CREATE_OBJECT: swprintf(buf, ARRAY_SIZE(buf), L"VBSE_CANT_CREATE_OBJECT"); break; diff --git a/wine/dlls/vbscript/vbsglobal.h b/wine/dlls/vbscript/vbsglobal.h index 69a7ace..d6284ce 100644 --- a/wine/dlls/vbscript/vbsglobal.h +++ b/wine/dlls/vbscript/vbsglobal.h @@ -1,4 +1,4 @@ -/*** Autogenerated by WIDL 11.1 from dlls/vbscript/vbsglobal.idl - Do not edit ***/ +/*** Autogenerated by WIDL 11.5 from dlls/vbscript/vbsglobal.idl - Do not edit ***/ #ifdef _WIN32 #ifndef __REQUIRED_RPCNDR_H_VERSION__ diff --git a/wine/dlls/vbscript/vbsregexp55.h b/wine/dlls/vbscript/vbsregexp55.h index b2a7223..2a3f7c7 100644 --- a/wine/dlls/vbscript/vbsregexp55.h +++ b/wine/dlls/vbscript/vbsregexp55.h @@ -1,4 +1,4 @@ -/*** Autogenerated by WIDL 11.1 from dlls/vbscript/vbsregexp55.idl - Do not edit ***/ +/*** Autogenerated by WIDL 11.5 from dlls/vbscript/vbsregexp55.idl - Do not edit ***/ #ifdef _WIN32 #ifndef __REQUIRED_RPCNDR_H_VERSION__ diff --git a/wine/include/activdbg.h b/wine/include/activdbg.h index c05e060..894561d 100644 --- a/wine/include/activdbg.h +++ b/wine/include/activdbg.h @@ -1,4 +1,4 @@ -/*** Autogenerated by WIDL 11.1 from include/activdbg.idl - Do not edit ***/ +/*** Autogenerated by WIDL 11.5 from include/activdbg.idl - Do not edit ***/ #ifdef _WIN32 #ifndef __REQUIRED_RPCNDR_H_VERSION__ diff --git a/wine/include/activscp.h b/wine/include/activscp.h index 1449bb5..245d218 100644 --- a/wine/include/activscp.h +++ b/wine/include/activscp.h @@ -1,4 +1,4 @@ -/*** Autogenerated by WIDL 11.1 from include/activscp.idl - Do not edit ***/ +/*** Autogenerated by WIDL 11.5 from include/activscp.idl - Do not edit ***/ #ifdef _WIN32 #ifndef __REQUIRED_RPCNDR_H_VERSION__ diff --git a/wine/include/apisetcconv.h b/wine/include/apisetcconv.h new file mode 100644 index 0000000..5c8601b --- /dev/null +++ b/wine/include/apisetcconv.h @@ -0,0 +1,105 @@ +/** + * This file is part of the mingw-w64 runtime package. + * No warranty is given; refer to the file DISCLAIMER within this package. + */ + +#ifndef _APISETCCONV_ +#define _APISETCCONV_ + +#ifndef CMAPI +#ifndef _CFGMGR32_ +#define CMAPI DECLSPEC_IMPORT +#else +#define CMAPI +#endif +#endif + +#ifndef CREDUIAPI +#ifndef _CREDUI_ +#define CREDUIAPI DECLSPEC_IMPORT +#else +#define CREDUIAPI +#endif +#endif + +#ifndef WINABLEAPI +#ifndef _USER32_ +#define WINABLEAPI DECLSPEC_IMPORT +#else +#define WINABLEAPI +#endif +#endif + +#ifndef WINADVAPI +#ifndef _ADVAPI32_ +#define WINADVAPI DECLSPEC_IMPORT +#else +#define WINADVAPI +#endif +#endif + +#ifndef WINBASEAPI +#ifndef _KERNEL32_ +#define WINBASEAPI DECLSPEC_IMPORT +#else +#define WINBASEAPI +#endif +#endif + +#ifndef WINUSERAPI +#if !defined(_USER32_) && !defined(WINE_UNIX_LIB) +#define WINUSERAPI DECLSPEC_IMPORT +#else +#define WINUSERAPI DECLSPEC_EXPORT +#endif +#endif + +#ifndef ZAWPROXYAPI +#ifndef _ZAWPROXY_ +#define ZAWPROXYAPI DECLSPEC_IMPORT +#else +#define ZAWPROXYAPI +#endif +#endif + +#ifndef WINCFGMGR32API +#ifndef _SETUPAPI_ +#define WINCFGMGR32API DECLSPEC_IMPORT +#else +#define WINCFGMGR32API +#endif +#endif + +#ifndef WINDEVQUERYAPI +#ifndef _CFGMGR32_ +#define WINDEVQUERYAPI DECLSPEC_IMPORT +#else +#define WINDEVQUERYAPI +#endif +#endif + +#ifndef WINSWDEVICEAPI +#ifndef _CFGMGR32_ +#define WINSWDEVICEAPI DECLSPEC_IMPORT +#else +#define WINSWDEVICEAPI +#endif +#endif + +#ifndef WINPATHCCHAPI +#ifndef STATIC_PATHCCH +#define WINPATHCCHAPI WINBASEAPI +#else +#define WINPATHCCHAPI +#endif +#endif + +#ifndef WINSTORAGEAPI +#ifndef _WINSTORAGEAPI_ +#define WINSTORAGEAPI DECLSPEC_IMPORT +#else +#define WINSTORAGEAPI +#endif +#endif + +#endif /* _APISETCCONV_ */ diff --git a/wine/include/atliface.h b/wine/include/atliface.h index 2d14936..85de8df 100644 --- a/wine/include/atliface.h +++ b/wine/include/atliface.h @@ -1,4 +1,4 @@ -/*** Autogenerated by WIDL 11.1 from include/atliface.idl - Do not edit ***/ +/*** Autogenerated by WIDL 11.5 from include/atliface.idl - Do not edit ***/ #ifdef _WIN32 #ifndef __REQUIRED_RPCNDR_H_VERSION__ diff --git a/wine/include/basetsd.h b/wine/include/basetsd.h index b3587da..ddd079c 100644 --- a/wine/include/basetsd.h +++ b/wine/include/basetsd.h @@ -73,17 +73,6 @@ extern "C" { # endif #endif -/* FIXME: DECLSPEC_ALIGN should be declared only in winnt.h, but we need it here too */ -#ifndef DECLSPEC_ALIGN -# ifdef __GNUC__ -# define DECLSPEC_ALIGN(x) __attribute__((aligned(x))) -# elif __has_declspec_attribute(align) && !defined(MIDL_PASS) -# define DECLSPEC_ALIGN(x) __declspec(align(x)) -# else -# define DECLSPEC_ALIGN(x) -# endif -#endif - typedef signed char INT8, *PINT8; typedef signed short INT16, *PINT16; typedef signed int INT32, *PINT32; @@ -94,18 +83,18 @@ typedef signed int LONG32, *PLONG32; typedef unsigned int ULONG32, *PULONG32; typedef unsigned int DWORD32, *PDWORD32; -#ifdef _MSC_VER +#if defined(_MSC_VER) || defined(__MINGW32__) || !defined(__GNUC__) typedef signed __int64 INT64; typedef unsigned __int64 UINT64; typedef signed __int64 LONG64; typedef unsigned __int64 ULONG64; typedef unsigned __int64 DWORD64; #else -typedef signed __int64 DECLSPEC_ALIGN(8) INT64; -typedef unsigned __int64 DECLSPEC_ALIGN(8) UINT64; -typedef signed __int64 DECLSPEC_ALIGN(8) LONG64; -typedef unsigned __int64 DECLSPEC_ALIGN(8) ULONG64; -typedef unsigned __int64 DECLSPEC_ALIGN(8) DWORD64; +typedef signed __int64 __attribute__((aligned(8))) INT64; +typedef unsigned __int64 __attribute__((aligned(8))) UINT64; +typedef signed __int64 __attribute__((aligned(8))) LONG64; +typedef unsigned __int64 __attribute__((aligned(8))) ULONG64; +typedef unsigned __int64 __attribute__((aligned(8))) DWORD64; #endif typedef INT64 *PINT64; typedef UINT64 *PUINT64; diff --git a/wine/include/combaseapi.h b/wine/include/combaseapi.h index 7343a72..60c9645 100644 --- a/wine/include/combaseapi.h +++ b/wine/include/combaseapi.h @@ -37,6 +37,10 @@ extern "C" { #endif +#define CLSCTX_ALL (CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER) +#define CLSCTX_INPROC (CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER) +#define CLSCTX_SERVER (CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER) + typedef struct tagServerInformation { DWORD dwServerPid; @@ -51,6 +55,7 @@ enum AgileReferenceOptions }; HRESULT WINAPI CoDecodeProxy(DWORD client_pid, UINT64 proxy_addr, ServerInformation *server_info); +HRESULT WINAPI CoRegisterActivationFilter(IActivationFilter *filter); HRESULT WINAPI RoGetAgileReference(enum AgileReferenceOptions options, REFIID riid, IUnknown *obj, IAgileReference **agile_reference); #ifdef __cplusplus diff --git a/wine/include/comcat.h b/wine/include/comcat.h index 70d6dba..6e3dc0b 100644 --- a/wine/include/comcat.h +++ b/wine/include/comcat.h @@ -1,4 +1,4 @@ -/*** Autogenerated by WIDL 11.1 from include/comcat.idl - Do not edit ***/ +/*** Autogenerated by WIDL 11.5 from include/comcat.idl - Do not edit ***/ #ifdef _WIN32 #ifndef __REQUIRED_RPCNDR_H_VERSION__ diff --git a/wine/include/dispex.h b/wine/include/dispex.h index 6119500..96dbdcb 100644 --- a/wine/include/dispex.h +++ b/wine/include/dispex.h @@ -1,4 +1,4 @@ -/*** Autogenerated by WIDL 11.1 from include/dispex.idl - Do not edit ***/ +/*** Autogenerated by WIDL 11.5 from include/dispex.idl - Do not edit ***/ #ifdef _WIN32 #ifndef __REQUIRED_RPCNDR_H_VERSION__ diff --git a/wine/include/docobj.h b/wine/include/docobj.h index 74677b3..bda2e6d 100644 --- a/wine/include/docobj.h +++ b/wine/include/docobj.h @@ -1,4 +1,4 @@ -/*** Autogenerated by WIDL 11.1 from include/docobj.idl - Do not edit ***/ +/*** Autogenerated by WIDL 11.5 from include/docobj.idl - Do not edit ***/ #ifdef _WIN32 #ifndef __REQUIRED_RPCNDR_H_VERSION__ diff --git a/wine/include/guiddef.h b/wine/include/guiddef.h index 9b712e1..e322c27 100644 --- a/wine/include/guiddef.h +++ b/wine/include/guiddef.h @@ -152,17 +152,41 @@ typedef GUID FMTID,*LPFMTID; #endif /* ndef __IID_DEFINED__ */ +#ifndef _REFGUID_DEFINED #ifdef __cplusplus #define REFGUID const GUID & -#define REFCLSID const CLSID & -#define REFIID const IID & -#define REFFMTID const FMTID & #else #define REFGUID const GUID* __MIDL_CONST -#define REFCLSID const CLSID* __MIDL_CONST +#endif +#define _REFGUID_DEFINED +#endif + +#ifndef _REFIID_DEFINED +#ifdef __cplusplus +#define REFIID const IID & +#else #define REFIID const IID* __MIDL_CONST +#endif +#define _REFIID_DEFINED +#endif + +#ifndef _REFCLSID_DEFINED +#ifdef __cplusplus +#define REFCLSID const CLSID & +#else +#define REFCLSID const CLSID* __MIDL_CONST +#endif +#define _REFCLSID_DEFINED +#endif + +#ifndef _REFFMTID_DEFINED +#ifdef __cplusplus +#define REFFMTID const FMTID & +#else #define REFFMTID const FMTID* __MIDL_CONST #endif +#define _REFFMTID_DEFINED +#endif #ifdef __cplusplus #define IsEqualGUID(rguid1, rguid2) (!memcmp(&(rguid1), &(rguid2), sizeof(GUID))) diff --git a/wine/include/libloaderapi.h b/wine/include/libloaderapi.h index abb848f..7818ec5 100644 --- a/wine/include/libloaderapi.h +++ b/wine/include/libloaderapi.h @@ -19,6 +19,10 @@ #ifndef _APISETLIBLOADER_ #define _APISETLIBLOADER_ +#include +#include +#include + #ifdef __cplusplus extern "C" { #endif diff --git a/wine/include/minwinbase.h b/wine/include/minwinbase.h index 8971d4a..bc2fc12 100644 --- a/wine/include/minwinbase.h +++ b/wine/include/minwinbase.h @@ -33,13 +33,15 @@ typedef RTL_CRITICAL_SECTION_DEBUG CRITICAL_SECTION_DEBUG; typedef PRTL_CRITICAL_SECTION_DEBUG PCRITICAL_SECTION_DEBUG; typedef PRTL_CRITICAL_SECTION_DEBUG LPCRITICAL_SECTION_DEBUG; -/* The security attributes structure */ +#ifndef _SECURITY_ATTRIBUTES_ +#define _SECURITY_ATTRIBUTES_ typedef struct _SECURITY_ATTRIBUTES { DWORD nLength; LPVOID lpSecurityDescriptor; BOOL bInheritHandle; } SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES; +#endif #ifndef _FILETIME_ #define _FILETIME_ diff --git a/wine/include/minwindef.h b/wine/include/minwindef.h index 3cb2548..95e682f 100644 --- a/wine/include/minwindef.h +++ b/wine/include/minwindef.h @@ -115,14 +115,14 @@ extern "C" { #ifndef _fastcall #define _fastcall __ONLY_IN_WINELIB(__stdcall) #endif -#ifndef cdecl -#define cdecl __ONLY_IN_WINELIB(__cdecl) -#endif #ifndef _cdecl #define _cdecl __ONLY_IN_WINELIB(__cdecl) #endif #endif /* _MSC_VER */ +#ifndef cdecl +#define cdecl __ONLY_IN_WINELIB(__cdecl) +#endif #ifndef pascal #define pascal __ONLY_IN_WINELIB(__stdcall) #endif diff --git a/wine/include/mshtmhst.h b/wine/include/mshtmhst.h index c15f18a..51e96d2 100644 --- a/wine/include/mshtmhst.h +++ b/wine/include/mshtmhst.h @@ -1,4 +1,4 @@ -/*** Autogenerated by WIDL 11.1 from include/mshtmhst.idl - Do not edit ***/ +/*** Autogenerated by WIDL 11.5 from include/mshtmhst.idl - Do not edit ***/ #ifdef _WIN32 #ifndef __REQUIRED_RPCNDR_H_VERSION__ diff --git a/wine/include/msxml.h b/wine/include/msxml.h index f80f700..6b5864c 100644 --- a/wine/include/msxml.h +++ b/wine/include/msxml.h @@ -1,4 +1,4 @@ -/*** Autogenerated by WIDL 11.1 from include/msxml.idl - Do not edit ***/ +/*** Autogenerated by WIDL 11.5 from include/msxml.idl - Do not edit ***/ #ifdef _WIN32 #ifndef __REQUIRED_RPCNDR_H_VERSION__ diff --git a/wine/include/ntstatus.h b/wine/include/ntstatus.h index 19de99b..d65970b 100644 --- a/wine/include/ntstatus.h +++ b/wine/include/ntstatus.h @@ -18,11 +18,72 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#ifndef __WINE_NTSTATUS_H -#define __WINE_NTSTATUS_H +#ifndef _NTSTATUS_ +#define _NTSTATUS_ #ifndef WIN32_NO_STATUS +#ifdef _WINNT_ /* some status defines are duplicated in winnt.h */ +#undef STATUS_WAIT_0 +#undef STATUS_ABANDONED_WAIT_0 +#undef STATUS_USER_APC +#undef STATUS_TIMEOUT +#undef STATUS_PENDING +#undef STATUS_SEGMENT_NOTIFICATION +#undef STATUS_FATAL_APP_EXIT +#undef STATUS_GUARD_PAGE_VIOLATION +#undef STATUS_DATATYPE_MISALIGNMENT +#undef STATUS_BREAKPOINT +#undef STATUS_SINGLE_STEP +#undef STATUS_LONGJUMP +#undef STATUS_UNWIND_CONSOLIDATE +#undef STATUS_ACCESS_VIOLATION +#undef STATUS_IN_PAGE_ERROR +#undef STATUS_INVALID_HANDLE +#undef STATUS_NO_MEMORY +#undef STATUS_ILLEGAL_INSTRUCTION +#undef STATUS_NONCONTINUABLE_EXCEPTION +#undef STATUS_INVALID_DISPOSITION +#undef STATUS_ARRAY_BOUNDS_EXCEEDED +#undef STATUS_FLOAT_DENORMAL_OPERAND +#undef STATUS_FLOAT_DIVIDE_BY_ZERO +#undef STATUS_FLOAT_INEXACT_RESULT +#undef STATUS_FLOAT_INVALID_OPERATION +#undef STATUS_FLOAT_OVERFLOW +#undef STATUS_FLOAT_STACK_CHECK +#undef STATUS_FLOAT_UNDERFLOW +#undef STATUS_INTEGER_DIVIDE_BY_ZERO +#undef STATUS_INTEGER_OVERFLOW +#undef STATUS_PRIVILEGED_INSTRUCTION +#undef STATUS_STACK_OVERFLOW +#undef STATUS_DLL_NOT_FOUND +#undef STATUS_ORDINAL_NOT_FOUND +#undef STATUS_ENTRYPOINT_NOT_FOUND +#undef STATUS_CONTROL_C_EXIT +#undef STATUS_DLL_INIT_FAILED +#undef STATUS_FLOAT_MULTIPLE_FAULTS +#undef STATUS_FLOAT_MULTIPLE_TRAPS +#undef STATUS_REG_NAT_CONSUMPTION +#undef STATUS_HEAP_CORRUPTION +#undef STATUS_STACK_BUFFER_OVERRUN +#undef STATUS_INVALID_CRUNTIME_PARAMETER +#undef STATUS_ASSERTION_FAILURE +#undef STATUS_SXS_EARLY_DEACTIVATION +#undef STATUS_SXS_INVALID_DEACTIVATION +#undef DBG_EXCEPTION_HANDLED +#undef DBG_CONTINUE +#undef DBG_REPLY_LATER +#undef DBG_TERMINATE_THREAD +#undef DBG_TERMINATE_PROCESS +#undef DBG_CONTROL_C +#undef DBG_PRINTEXCEPTION_C +#undef DBG_RIPEXCEPTION +#undef DBG_CONTROL_BREAK +#undef DBG_COMMAND_EXCEPTION +#undef DBG_PRINTEXCEPTION_WIDE_C +#undef DBG_EXCEPTION_NOT_HANDLED +#endif + /* * Exception codes */ @@ -2918,4 +2979,4 @@ #endif /* WIN32_NO_STATUS */ -#endif /* __WINE_NTSTATUS_H */ +#endif /* _NTSTATUS_ */ diff --git a/wine/include/oaidl.h b/wine/include/oaidl.h index 875e439..fe0d58b 100644 --- a/wine/include/oaidl.h +++ b/wine/include/oaidl.h @@ -1,4 +1,4 @@ -/*** Autogenerated by WIDL 11.1 from include/oaidl.idl - Do not edit ***/ +/*** Autogenerated by WIDL 11.5 from include/oaidl.idl - Do not edit ***/ #ifdef _WIN32 #ifndef __REQUIRED_RPCNDR_H_VERSION__ diff --git a/wine/include/objidl.h b/wine/include/objidl.h index 44fd6f7..9b8e1a4 100644 --- a/wine/include/objidl.h +++ b/wine/include/objidl.h @@ -1,4 +1,4 @@ -/*** Autogenerated by WIDL 11.1 from include/objidl.idl - Do not edit ***/ +/*** Autogenerated by WIDL 11.5 from include/objidl.idl - Do not edit ***/ #ifdef _WIN32 #ifndef __REQUIRED_RPCNDR_H_VERSION__ @@ -402,6 +402,14 @@ interface IObjContext; #endif /* __cplusplus */ #endif +#ifndef __IActivationFilter_FWD_DEFINED__ +#define __IActivationFilter_FWD_DEFINED__ +typedef interface IActivationFilter IActivationFilter; +#ifdef __cplusplus +interface IActivationFilter; +#endif /* __cplusplus */ +#endif + #ifndef __IMallocSpy_FWD_DEFINED__ #define __IMallocSpy_FWD_DEFINED__ typedef interface IMallocSpy IMallocSpy; @@ -6257,6 +6265,95 @@ static inline void IObjContext_Reserved7(IObjContext* This) { #endif /* __IObjContext_INTERFACE_DEFINED__ */ +/***************************************************************************** + * IActivationFilter interface + */ +#ifndef __IActivationFilter_INTERFACE_DEFINED__ +#define __IActivationFilter_INTERFACE_DEFINED__ + +typedef enum tagACTIVATIONTYPE { + ACTIVATIONTYPE_UNCATEGORIZED = 0x0, + ACTIVATIONTYPE_FROM_MONIKER = 0x1, + ACTIVATIONTYPE_FROM_DATA = 0x2, + ACTIVATIONTYPE_FROM_STORAGE = 0x4, + ACTIVATIONTYPE_FROM_STREAM = 0x8, + ACTIVATIONTYPE_FROM_FILE = 0x10 +} ACTIVATIONTYPE; +DEFINE_GUID(IID_IActivationFilter, 0x00000017, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46); +#if defined(__cplusplus) && !defined(CINTERFACE) +MIDL_INTERFACE("00000017-0000-0000-c000-000000000046") +IActivationFilter : public IUnknown +{ + virtual HRESULT STDMETHODCALLTYPE HandleActivation( + DWORD dwActivationType, + REFCLSID rclsid, + CLSID *pReplacementClsId) = 0; + +}; +#ifdef __CRT_UUID_DECL +__CRT_UUID_DECL(IActivationFilter, 0x00000017, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46) +#endif +#else +typedef struct IActivationFilterVtbl { + BEGIN_INTERFACE + + /*** IUnknown methods ***/ + HRESULT (STDMETHODCALLTYPE *QueryInterface)( + IActivationFilter *This, + REFIID riid, + void **ppvObject); + + ULONG (STDMETHODCALLTYPE *AddRef)( + IActivationFilter *This); + + ULONG (STDMETHODCALLTYPE *Release)( + IActivationFilter *This); + + /*** IActivationFilter methods ***/ + HRESULT (STDMETHODCALLTYPE *HandleActivation)( + IActivationFilter *This, + DWORD dwActivationType, + REFCLSID rclsid, + CLSID *pReplacementClsId); + + END_INTERFACE +} IActivationFilterVtbl; + +interface IActivationFilter { + CONST_VTBL IActivationFilterVtbl* lpVtbl; +}; + +#ifdef COBJMACROS +#ifndef WIDL_C_INLINE_WRAPPERS +/*** IUnknown methods ***/ +#define IActivationFilter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) +#define IActivationFilter_AddRef(This) (This)->lpVtbl->AddRef(This) +#define IActivationFilter_Release(This) (This)->lpVtbl->Release(This) +/*** IActivationFilter methods ***/ +#define IActivationFilter_HandleActivation(This,dwActivationType,rclsid,pReplacementClsId) (This)->lpVtbl->HandleActivation(This,dwActivationType,rclsid,pReplacementClsId) +#else +/*** IUnknown methods ***/ +static inline HRESULT IActivationFilter_QueryInterface(IActivationFilter* This,REFIID riid,void **ppvObject) { + return This->lpVtbl->QueryInterface(This,riid,ppvObject); +} +static inline ULONG IActivationFilter_AddRef(IActivationFilter* This) { + return This->lpVtbl->AddRef(This); +} +static inline ULONG IActivationFilter_Release(IActivationFilter* This) { + return This->lpVtbl->Release(This); +} +/*** IActivationFilter methods ***/ +static inline HRESULT IActivationFilter_HandleActivation(IActivationFilter* This,DWORD dwActivationType,REFCLSID rclsid,CLSID *pReplacementClsId) { + return This->lpVtbl->HandleActivation(This,dwActivationType,rclsid,pReplacementClsId); +} +#endif +#endif + +#endif + + +#endif /* __IActivationFilter_INTERFACE_DEFINED__ */ + #endif /* defined USE_COM_CONTEXT_DEF */ #endif /* defined _OBJIDLBASE_ */ #ifndef __IRunningObjectTable_FWD_DEFINED__ diff --git a/wine/include/objidlbase.h b/wine/include/objidlbase.h index 85ecd53..7567a0b 100644 --- a/wine/include/objidlbase.h +++ b/wine/include/objidlbase.h @@ -1,4 +1,4 @@ -/*** Autogenerated by WIDL 11.1 from include/objidlbase.idl - Do not edit ***/ +/*** Autogenerated by WIDL 11.5 from include/objidlbase.idl - Do not edit ***/ #ifdef _WIN32 #ifndef __REQUIRED_RPCNDR_H_VERSION__ @@ -402,6 +402,14 @@ interface IObjContext; #endif /* __cplusplus */ #endif +#ifndef __IActivationFilter_FWD_DEFINED__ +#define __IActivationFilter_FWD_DEFINED__ +typedef interface IActivationFilter IActivationFilter; +#ifdef __cplusplus +interface IActivationFilter; +#endif /* __cplusplus */ +#endif + /* Headers for imported files */ #include @@ -5969,6 +5977,95 @@ static inline void IObjContext_Reserved7(IObjContext* This) { #endif /* __IObjContext_INTERFACE_DEFINED__ */ +/***************************************************************************** + * IActivationFilter interface + */ +#ifndef __IActivationFilter_INTERFACE_DEFINED__ +#define __IActivationFilter_INTERFACE_DEFINED__ + +typedef enum tagACTIVATIONTYPE { + ACTIVATIONTYPE_UNCATEGORIZED = 0x0, + ACTIVATIONTYPE_FROM_MONIKER = 0x1, + ACTIVATIONTYPE_FROM_DATA = 0x2, + ACTIVATIONTYPE_FROM_STORAGE = 0x4, + ACTIVATIONTYPE_FROM_STREAM = 0x8, + ACTIVATIONTYPE_FROM_FILE = 0x10 +} ACTIVATIONTYPE; +DEFINE_GUID(IID_IActivationFilter, 0x00000017, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46); +#if defined(__cplusplus) && !defined(CINTERFACE) +MIDL_INTERFACE("00000017-0000-0000-c000-000000000046") +IActivationFilter : public IUnknown +{ + virtual HRESULT STDMETHODCALLTYPE HandleActivation( + DWORD dwActivationType, + REFCLSID rclsid, + CLSID *pReplacementClsId) = 0; + +}; +#ifdef __CRT_UUID_DECL +__CRT_UUID_DECL(IActivationFilter, 0x00000017, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46) +#endif +#else +typedef struct IActivationFilterVtbl { + BEGIN_INTERFACE + + /*** IUnknown methods ***/ + HRESULT (STDMETHODCALLTYPE *QueryInterface)( + IActivationFilter *This, + REFIID riid, + void **ppvObject); + + ULONG (STDMETHODCALLTYPE *AddRef)( + IActivationFilter *This); + + ULONG (STDMETHODCALLTYPE *Release)( + IActivationFilter *This); + + /*** IActivationFilter methods ***/ + HRESULT (STDMETHODCALLTYPE *HandleActivation)( + IActivationFilter *This, + DWORD dwActivationType, + REFCLSID rclsid, + CLSID *pReplacementClsId); + + END_INTERFACE +} IActivationFilterVtbl; + +interface IActivationFilter { + CONST_VTBL IActivationFilterVtbl* lpVtbl; +}; + +#ifdef COBJMACROS +#ifndef WIDL_C_INLINE_WRAPPERS +/*** IUnknown methods ***/ +#define IActivationFilter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) +#define IActivationFilter_AddRef(This) (This)->lpVtbl->AddRef(This) +#define IActivationFilter_Release(This) (This)->lpVtbl->Release(This) +/*** IActivationFilter methods ***/ +#define IActivationFilter_HandleActivation(This,dwActivationType,rclsid,pReplacementClsId) (This)->lpVtbl->HandleActivation(This,dwActivationType,rclsid,pReplacementClsId) +#else +/*** IUnknown methods ***/ +static inline HRESULT IActivationFilter_QueryInterface(IActivationFilter* This,REFIID riid,void **ppvObject) { + return This->lpVtbl->QueryInterface(This,riid,ppvObject); +} +static inline ULONG IActivationFilter_AddRef(IActivationFilter* This) { + return This->lpVtbl->AddRef(This); +} +static inline ULONG IActivationFilter_Release(IActivationFilter* This) { + return This->lpVtbl->Release(This); +} +/*** IActivationFilter methods ***/ +static inline HRESULT IActivationFilter_HandleActivation(IActivationFilter* This,DWORD dwActivationType,REFCLSID rclsid,CLSID *pReplacementClsId) { + return This->lpVtbl->HandleActivation(This,dwActivationType,rclsid,pReplacementClsId); +} +#endif +#endif + +#endif + + +#endif /* __IActivationFilter_INTERFACE_DEFINED__ */ + #endif /* defined USE_COM_CONTEXT_DEF */ #endif /* defined _OBJIDLBASE_ */ /* Begin additional prototypes for all interfaces */ diff --git a/wine/include/objsafe.h b/wine/include/objsafe.h index 8faaccd..0a959fa 100644 --- a/wine/include/objsafe.h +++ b/wine/include/objsafe.h @@ -1,4 +1,4 @@ -/*** Autogenerated by WIDL 11.1 from include/objsafe.idl - Do not edit ***/ +/*** Autogenerated by WIDL 11.5 from include/objsafe.idl - Do not edit ***/ #ifdef _WIN32 #ifndef __REQUIRED_RPCNDR_H_VERSION__ diff --git a/wine/include/ocidl.h b/wine/include/ocidl.h index 55dc92d..225607b 100644 --- a/wine/include/ocidl.h +++ b/wine/include/ocidl.h @@ -1,4 +1,4 @@ -/*** Autogenerated by WIDL 11.1 from include/ocidl.idl - Do not edit ***/ +/*** Autogenerated by WIDL 11.5 from include/ocidl.idl - Do not edit ***/ #ifdef _WIN32 #ifndef __REQUIRED_RPCNDR_H_VERSION__ diff --git a/wine/include/oleidl.h b/wine/include/oleidl.h index 0c024a9..6d9dae2 100644 --- a/wine/include/oleidl.h +++ b/wine/include/oleidl.h @@ -1,4 +1,4 @@ -/*** Autogenerated by WIDL 11.1 from include/oleidl.idl - Do not edit ***/ +/*** Autogenerated by WIDL 11.5 from include/oleidl.idl - Do not edit ***/ #ifdef _WIN32 #ifndef __REQUIRED_RPCNDR_H_VERSION__ diff --git a/wine/include/processthreadsapi.h b/wine/include/processthreadsapi.h index c205824..16e0c45 100644 --- a/wine/include/processthreadsapi.h +++ b/wine/include/processthreadsapi.h @@ -19,6 +19,10 @@ #ifndef _PROCESSTHREADSAPI_H #define _PROCESSTHREADSAPI_H +#include +#include +#include + #ifdef __cplusplus extern "C" { #endif diff --git a/wine/include/propidl.h b/wine/include/propidl.h index 1e4bd57..ae44398 100644 --- a/wine/include/propidl.h +++ b/wine/include/propidl.h @@ -1,4 +1,4 @@ -/*** Autogenerated by WIDL 11.1 from include/propidl.idl - Do not edit ***/ +/*** Autogenerated by WIDL 11.5 from include/propidl.idl - Do not edit ***/ #ifdef _WIN32 #ifndef __REQUIRED_RPCNDR_H_VERSION__ diff --git a/wine/include/sal.h b/wine/include/sal.h index f30633e..7437ce4 100644 --- a/wine/include/sal.h +++ b/wine/include/sal.h @@ -49,6 +49,8 @@ #define _Deref_prepost_opt_z_ #define _Deref_ret_z_ +#define _Field_size_(size) +#define _Field_size_bytes_(size) #define _Field_range_(min, max) #define _In_ @@ -211,6 +213,8 @@ #define _Printf_format_string_ #define _Printf_format_string_params_(count) +#define _Struct_size_bytes_(size) + #define _Reserved_ #define _Result_nullonfailure_ @@ -237,6 +241,8 @@ #define _Success_(exp) +#define _Use_decl_annotations_ + #define _When_(exp1, exp2) #define __bcount(size) diff --git a/wine/include/servprov.h b/wine/include/servprov.h index 1fbb824..eb44ece 100644 --- a/wine/include/servprov.h +++ b/wine/include/servprov.h @@ -1,4 +1,4 @@ -/*** Autogenerated by WIDL 11.1 from include/servprov.idl - Do not edit ***/ +/*** Autogenerated by WIDL 11.5 from include/servprov.idl - Do not edit ***/ #ifdef _WIN32 #ifndef __REQUIRED_RPCNDR_H_VERSION__ diff --git a/wine/include/unknwn.h b/wine/include/unknwn.h index f78fae5..c157eb0 100644 --- a/wine/include/unknwn.h +++ b/wine/include/unknwn.h @@ -1,4 +1,4 @@ -/*** Autogenerated by WIDL 11.1 from include/unknwn.idl - Do not edit ***/ +/*** Autogenerated by WIDL 11.5 from include/unknwn.idl - Do not edit ***/ #ifdef _WIN32 #ifndef __REQUIRED_RPCNDR_H_VERSION__ diff --git a/wine/include/urlmon.h b/wine/include/urlmon.h index 735e31f..26df2be 100644 --- a/wine/include/urlmon.h +++ b/wine/include/urlmon.h @@ -1,4 +1,4 @@ -/*** Autogenerated by WIDL 11.1 from include/urlmon.idl - Do not edit ***/ +/*** Autogenerated by WIDL 11.5 from include/urlmon.idl - Do not edit ***/ #ifdef _WIN32 #ifndef __REQUIRED_RPCNDR_H_VERSION__ diff --git a/wine/include/winbase.h b/wine/include/winbase.h index 4e71f15..25879f3 100644 --- a/wine/include/winbase.h +++ b/wine/include/winbase.h @@ -25,22 +25,7 @@ extern "C" { #endif -#ifndef WINBASEAPI -#ifdef _KERNEL32_ -#define WINBASEAPI -#else -#define WINBASEAPI DECLSPEC_IMPORT -#endif -#endif - -#ifndef WINADVAPI -#ifdef _ADVAPI32_ -#define WINADVAPI -#else -#define WINADVAPI DECLSPEC_IMPORT -#endif -#endif - +#include #include #include #include @@ -2444,7 +2429,7 @@ WINBASEAPI void WINAPI SwitchToFiber(LPVOID); WINBASEAPI BOOL WINAPI SwitchToThread(void); WINBASEAPI BOOL WINAPI SystemTimeToFileTime(const SYSTEMTIME*,LPFILETIME); WINBASEAPI BOOL WINAPI TerminateJobObject(HANDLE,UINT); -WINBASEAPI BOOL WINAPI TerminateProcess(HANDLE,DWORD); +WINBASEAPI BOOL WINAPI TerminateProcess(HANDLE,UINT); WINBASEAPI BOOL WINAPI TerminateThread(HANDLE,DWORD); WINBASEAPI DWORD WINAPI TlsAlloc(void); WINBASEAPI BOOL WINAPI TlsFree(DWORD); @@ -2624,10 +2609,12 @@ static inline LPSTR WINAPI lstrcatA( LPSTR dst, LPCSTR src ) #ifndef __LIBWINEVBS__ /* strncpy/wcsncpy don't do what you think, don't use them */ #undef strncpy -#undef wcsncpy #define strncpy(d,s,n) error do_not_use_strncpy_use_lstrcpynA_or_memcpy_instead +#ifdef __WINE_WCHAR_H +#undef wcsncpy #define wcsncpy(d,s,n) error do_not_use_wcsncpy_use_lstrcpynW_or_memcpy_instead #endif +#endif #endif /* !defined(__WINESRC__) || defined(WINE_NO_INLINE_STRING) */ diff --git a/wine/include/winnls.h b/wine/include/winnls.h index 185a02a..9424ca3 100644 --- a/wine/include/winnls.h +++ b/wine/include/winnls.h @@ -934,6 +934,7 @@ WINBASEAPI BOOL WINAPI GetNLSVersionEx(NLS_FUNCTION,LPCWSTR,NLSVERSIONINF WINBASEAPI INT WINAPI GetNumberFormatA(LCID,DWORD,LPCSTR,const NUMBERFMTA*,LPSTR,INT); WINBASEAPI INT WINAPI GetNumberFormatW(LCID,DWORD,LPCWSTR,const NUMBERFMTW*,LPWSTR,INT); #define GetNumberFormat WINELIB_NAME_AW(GetNumberFormat) +WINBASEAPI INT WINAPI GetNumberFormatEx(LPCWSTR,DWORD,LPCWSTR,const NUMBERFMTW*,LPWSTR,INT); WINBASEAPI UINT WINAPI GetOEMCP(void); WINBASEAPI BOOL WINAPI GetProcessPreferredUILanguages(DWORD,PULONG,PZZWSTR,PULONG); WINBASEAPI BOOL WINAPI GetStringTypeA(LCID,DWORD,LPCSTR,INT,LPWORD); diff --git a/wine/include/winnt.h b/wine/include/winnt.h index 5752321..1f4dc89 100644 --- a/wine/include/winnt.h +++ b/wine/include/winnt.h @@ -507,7 +507,7 @@ typedef ULONG UCSCHAR; /* 'Extended/Wide' numerical types */ #ifndef _ULONGLONG_ # define _ULONGLONG_ -# ifdef _MSC_VER +# if defined(_MSC_VER) || defined(__MINGW32__) typedef signed __int64 LONGLONG; typedef unsigned __int64 ULONGLONG; # else @@ -628,7 +628,7 @@ typedef DWORD FLONG; /* Defines */ -#ifndef WIN32_NO_STATUS +#if !defined(WIN32_NO_STATUS) && !defined(UMDF_USING_NTSTATUS) && !defined(_NTSTATUS_) #define STATUS_WAIT_0 ((DWORD) 0x00000000) #define STATUS_ABANDONED_WAIT_0 ((DWORD) 0x00000080) @@ -1507,7 +1507,11 @@ typedef struct _KNONVOLATILE_CONTEXT_POINTERS #define XSTATE_AVX512_ZMM_H 6 #define XSTATE_AVX512_ZMM 7 #define XSTATE_IPT 8 +#define XSTATE_PASID 10 #define XSTATE_CET_U 11 +#define XSTATE_CET_S 12 +#define XSTATE_AMX_TILE_CONFIG 17 +#define XSTATE_AMX_TILE_DATA 18 #define XSTATE_LWP 62 #define MAXIMUM_XSTATE_FEATURES 64 @@ -1515,6 +1519,16 @@ typedef struct _KNONVOLATILE_CONTEXT_POINTERS #define XSTATE_MASK_LEGACY_SSE (1 << XSTATE_LEGACY_SSE) #define XSTATE_MASK_LEGACY (XSTATE_MASK_LEGACY_FLOATING_POINT | XSTATE_MASK_LEGACY_SSE) #define XSTATE_MASK_GSSE (1 << XSTATE_GSSE) +#define XSTATE_MASK_AVX XSTATE_MASK_GSSE +#define XSTATE_MASK_MPX ((1 << XSTATE_MPX_BNDREGS) | (1 << XSTATE_MPX_BNDCSR)) +#define XSTATE_MASK_AVX512 ((1 << XSTATE_AVX512_KMASK) | (1 << XSTATE_AVX512_ZMM_H) | (1 << XSTATE_AVX512_ZMM)) +#define XSTATE_MASK_IPT (1 << XSTATE_IPT) +#define XSTATE_MASK_PASID (1 << XSTATE_PASID) +#define XSTATE_MASK_CET_U (1 << XSTATE_CET_U) +#define XSTATE_MASK_CET_S (1 << XSTATE_CET_S) +#define XSTATE_MASK_AMX_TILE_CONFIG (1 << XSTATE_AMX_TILE_CONFIG) +#define XSTATE_MASK_AMX_TILE_DATA (1 << XSTATE_AMX_TILE_DATA) +#define XSTATE_MASK_LWP ((UINT64)1 << XSTATE_LWP) typedef struct _XSTATE_FEATURE { @@ -2397,6 +2411,13 @@ typedef void (CALLBACK *PTERMINATION_HANDLER)(BOOLEAN,DWORD64); #define EXCEPTION_COLLIDED_UNWIND 0x40 #define EXCEPTION_SOFTWARE_ORIGINATE 0x80 +#define EXCEPTION_UNWIND (EXCEPTION_UNWINDING |EXCEPTION_EXIT_UNWIND \ + | EXCEPTION_TARGET_UNWIND | EXCEPTION_COLLIDED_UNWIND) + +#define IS_UNWINDING(flags) ((flags & EXCEPTION_UNWIND) != 0) +#define IS_DISPATCHING(flags) ((flags & EXCEPTION_UNWIND) == 0) +#define IS_TARGET_UNWIND(flags) (flags & EXCEPTION_TARGET_UNWIND) + /* * The exception record used by Win32 to give additional information * about exception to exception handlers. @@ -2471,6 +2492,64 @@ typedef struct _EXCEPTION_REGISTRATION_RECORD typedef LONG (CALLBACK *PVECTORED_EXCEPTION_HANDLER)(PEXCEPTION_POINTERS ExceptionInfo); +/* duplicate the contents of rtlsupportapi.h */ +#ifndef _APISETRTLSUPPORT_ +#define _APISETRTLSUPPORT_ + +NTSYSAPI void WINAPI RtlCaptureContext(CONTEXT*); +NTSYSAPI void WINAPI RtlCaptureContext2(CONTEXT*); +NTSYSAPI USHORT WINAPI RtlCaptureStackBackTrace(ULONG,ULONG,void**,ULONG*); +NTSYSAPI void WINAPI RtlGetCallersAddress(void**,void**); +NTSYSAPI void WINAPI RtlRaiseException(EXCEPTION_RECORD*); +NTSYSAPI void CDECL RtlRestoreContext(CONTEXT*,EXCEPTION_RECORD*); +NTSYSAPI void WINAPI RtlUnwind(void*,void*,EXCEPTION_RECORD*,void*); +NTSYSAPI void* WINAPI RtlPcToFileHeader(void*,void**); +NTSYSAPI ULONG WINAPI RtlWalkFrameChain(void**,ULONG,ULONG); + +#ifndef __i386__ + +#define UNWIND_HISTORY_TABLE_SIZE 12 + +typedef struct _UNWIND_HISTORY_TABLE_ENTRY +{ + ULONG_PTR ImageBase; + PRUNTIME_FUNCTION FunctionEntry; +} UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY; + +typedef struct _UNWIND_HISTORY_TABLE +{ + DWORD Count; + BYTE LocalHint; + BYTE GlobalHint; + BYTE Search; + BYTE Once; + ULONG_PTR LowAddress; + ULONG_PTR HighAddress; + UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE]; +} UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE; + +typedef PRUNTIME_FUNCTION (CALLBACK *PGET_RUNTIME_FUNCTION_CALLBACK)(DWORD_PTR,PVOID); + +#define RTL_VIRTUAL_UNWIND2_VALIDATE_PAC 0x0001 + +NTSYSAPI BOOLEAN CDECL RtlAddFunctionTable(RUNTIME_FUNCTION*,ULONG,ULONG_PTR); +NTSYSAPI LONG WINAPI RtlAddGrowableFunctionTable(void**,PRUNTIME_FUNCTION,ULONG,ULONG,ULONG_PTR,ULONG_PTR); +NTSYSAPI BOOLEAN CDECL RtlDeleteFunctionTable(RUNTIME_FUNCTION*); +NTSYSAPI void WINAPI RtlDeleteGrowableFunctionTable(void*); +NTSYSAPI void WINAPI RtlGrowFunctionTable(void*,ULONG); +NTSYSAPI BOOLEAN CDECL RtlInstallFunctionTableCallback(ULONG_PTR,ULONG_PTR,ULONG,PGET_RUNTIME_FUNCTION_CALLBACK,PVOID,PCWSTR); +NTSYSAPI PRUNTIME_FUNCTION WINAPI RtlLookupFunctionEntry(ULONG_PTR,ULONG_PTR*,UNWIND_HISTORY_TABLE*); +NTSYSAPI PRUNTIME_FUNCTION WINAPI RtlLookupFunctionTable(ULONG_PTR,ULONG_PTR*,ULONG*); +NTSYSAPI void WINAPI RtlUnwindEx(void*,void*,EXCEPTION_RECORD*,void*,CONTEXT*,UNWIND_HISTORY_TABLE*); +NTSYSAPI PEXCEPTION_ROUTINE WINAPI RtlVirtualUnwind(ULONG,ULONG_PTR,ULONG_PTR,RUNTIME_FUNCTION*,CONTEXT*,void**,ULONG_PTR*,KNONVOLATILE_CONTEXT_POINTERS*); +NTSYSAPI LONG WINAPI RtlVirtualUnwind2(ULONG,ULONG_PTR,ULONG_PTR,RUNTIME_FUNCTION*,CONTEXT*,BOOLEAN*,void**,ULONG_PTR*,KNONVOLATILE_CONTEXT_POINTERS*,ULONG_PTR*,ULONG_PTR*,PEXCEPTION_ROUTINE*,ULONG); +#ifdef __x86_64__ +NTSYSAPI BOOLEAN WINAPI RtlIsEcCode(ULONG_PTR); +#endif + +#endif /* __i386__ */ +#endif /* _APISETRTLSUPPORT_ */ + typedef struct _NT_TIB { struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList; @@ -2485,6 +2564,28 @@ typedef struct _NT_TIB struct _NT_TIB *Self; } NT_TIB, *PNT_TIB; +typedef struct _NT_TIB32 +{ + ULONG ExceptionList; /* 0000 */ + ULONG StackBase; /* 0004 */ + ULONG StackLimit; /* 0008 */ + ULONG SubSystemTib; /* 000c */ + ULONG FiberData; /* 0010 */ + ULONG ArbitraryUserPointer; /* 0014 */ + ULONG Self; /* 0018 */ +} NT_TIB32; + +typedef struct _NT_TIB64 +{ + ULONG64 ExceptionList; /* 0000 */ + ULONG64 StackBase; /* 0008 */ + ULONG64 StackLimit; /* 0010 */ + ULONG64 SubSystemTib; /* 0018 */ + ULONG64 FiberData; /* 0020 */ + ULONG64 ArbitraryUserPointer; /* 0028 */ + ULONG64 Self; /* 0030 */ +} NT_TIB64; + struct _TEB; #ifndef __LIBWINEVBS__ @@ -4575,7 +4676,7 @@ typedef DWORD SECURITY_INFORMATION, *PSECURITY_INFORMATION; typedef WORD SECURITY_DESCRIPTOR_CONTROL, *PSECURITY_DESCRIPTOR_CONTROL; /* The security descriptor structure */ -typedef struct { +typedef struct _SECURITY_DESCRIPTOR_RELATIVE { BYTE Revision; BYTE Sbz1; SECURITY_DESCRIPTOR_CONTROL Control; @@ -4585,7 +4686,7 @@ typedef struct { DWORD Dacl; } SECURITY_DESCRIPTOR_RELATIVE, *PISECURITY_DESCRIPTOR_RELATIVE; -typedef struct { +typedef struct _SECURITY_DESCRIPTOR { BYTE Revision; BYTE Sbz1; SECURITY_DESCRIPTOR_CONTROL Control; @@ -6300,7 +6401,6 @@ NTSYSAPI VOID WINAPI RtlRunOnceInitialize(PRTL_RUN_ONCE); NTSYSAPI DWORD WINAPI RtlRunOnceExecuteOnce(PRTL_RUN_ONCE,PRTL_RUN_ONCE_INIT_FN,PVOID,PVOID*); NTSYSAPI DWORD WINAPI RtlRunOnceBeginInitialize(PRTL_RUN_ONCE, DWORD, PVOID*); NTSYSAPI DWORD WINAPI RtlRunOnceComplete(PRTL_RUN_ONCE, DWORD, PVOID); -NTSYSAPI WORD WINAPI RtlCaptureStackBackTrace(DWORD,DWORD,void**,DWORD*); typedef struct _RTL_BARRIER { DWORD Reserved1; @@ -7043,7 +7143,9 @@ typedef enum _FIRMWARE_TYPE /* Intrinsic functions */ #define BitScanForward _BitScanForward +#define BitScanForward64 _BitScanForward64 #define BitScanReverse _BitScanReverse +#define BitScanReverse64 _BitScanReverse64 #define InterlockedAdd _InlineInterlockedAdd #define InterlockedAnd _InterlockedAnd #define InterlockedAnd64 _InterlockedAnd64 @@ -7104,6 +7206,16 @@ DECLSPEC_NORETURN void __fastfail(unsigned int); #pragma intrinsic(_InterlockedXor) #pragma intrinsic(__fastfail) +#if defined(_WIN64) || __has_builtin(_BitScanForward64) +BOOLEAN _BitScanForward64(unsigned long*,unsigned __int64); +#pragma intrinsic(_BitScanForward64) +#endif + +#if defined(_WIN64) || __has_builtin(_BitScanReverse64) +BOOLEAN _BitScanReverse64(unsigned long*,unsigned __int64); +#pragma intrinsic(_BitScanReverse64) +#endif + #if !defined(__i386__) || __has_builtin(_InterlockedAnd64) __int64 _InterlockedAnd64(__int64 volatile *, __int64); #pragma intrinsic(_InterlockedAnd64) @@ -7335,12 +7447,24 @@ static FORCEINLINE BOOLEAN WINAPI BitScanForward(DWORD *index, DWORD mask) return mask != 0; } +static FORCEINLINE BOOLEAN WINAPI BitScanForward64(DWORD *index, DWORD64 mask) +{ + *index = __builtin_ctzll( mask ); + return mask != 0; +} + static FORCEINLINE BOOLEAN WINAPI BitScanReverse(DWORD *index, DWORD mask) { *index = 31 - __builtin_clz( mask ); return mask != 0; } +static FORCEINLINE BOOLEAN WINAPI BitScanReverse64(DWORD *index, DWORD64 mask) +{ + *index = 63 - __builtin_clzll( mask ); + return mask != 0; +} + static FORCEINLINE LONG WINAPI InterlockedAdd( LONG volatile *dest, LONG val ) { return __sync_add_and_fetch( dest, val ); @@ -7552,6 +7676,7 @@ static FORCEINLINE void WriteNoFence64( LONG64 volatile *dest, LONG64 value ) #endif } +#ifdef __LIBWINVBS__ #ifndef __MINGW32__ static FORCEINLINE DECLSPEC_NORETURN void __fastfail(unsigned int code) { @@ -7566,6 +7691,7 @@ static FORCEINLINE DECLSPEC_NORETURN void __fastfail(unsigned int code) #endif } #endif +#endif #endif /* __GNUC__ */ @@ -7708,6 +7834,9 @@ static FORCEINLINE DWORD64 UnsignedMultiply128( DWORD64 a, DWORD64 b, DWORD64 *h } #endif +#define Int32x32To64(a,b) ((INT64)(INT)(a) * (INT64)(INT)(b)) +#define UInt32x32To64(a,b) ((UINT64)(UINT)(a) * (UINT64)(UINT)(b)) + #ifdef __cplusplus } #endif diff --git a/wine/include/winternl.h b/wine/include/winternl.h index b907030..b989fe9 100644 --- a/wine/include/winternl.h +++ b/wine/include/winternl.h @@ -659,27 +659,6 @@ typedef struct _TEB /*********************************************************************** * The 32-bit/64-bit version of the PEB and TEB for WoW64 */ -typedef struct _NT_TIB32 -{ - ULONG ExceptionList; /* 0000 */ - ULONG StackBase; /* 0004 */ - ULONG StackLimit; /* 0008 */ - ULONG SubSystemTib; /* 000c */ - ULONG FiberData; /* 0010 */ - ULONG ArbitraryUserPointer; /* 0014 */ - ULONG Self; /* 0018 */ -} NT_TIB32; - -typedef struct _NT_TIB64 -{ - ULONG64 ExceptionList; /* 0000 */ - ULONG64 StackBase; /* 0008 */ - ULONG64 StackLimit; /* 0010 */ - ULONG64 SubSystemTib; /* 0018 */ - ULONG64 FiberData; /* 0020 */ - ULONG64 ArbitraryUserPointer; /* 0028 */ - ULONG64 Self; /* 0030 */ -} NT_TIB64; typedef struct _CLIENT_ID32 { @@ -1820,6 +1799,24 @@ typedef struct _FILE_IO_COMPLETION_NOTIFICATION_INFORMATION { #define FILE_SKIP_SET_EVENT_ON_HANDLE 0x2 #define FILE_SKIP_SET_USER_EVENT_ON_FAST_IO 0x4 +typedef struct _FILE_ID_EXTD_DIRECTORY_INFORMATION +{ + ULONG NextEntryOffset; + ULONG FileIndex; + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER EndOfFile; + LARGE_INTEGER AllocationSize; + ULONG FileAttributes; + ULONG FileNameLength; + ULONG EaSize; + ULONG ReparsePointTag; + FILE_ID_128 FileId; + WCHAR FileName[ANYSIZE_ARRAY]; +} FILE_ID_EXTD_DIRECTORY_INFORMATION, *PFILE_ID_EXTD_DIRECTORY_INFORMATION; + typedef struct _FILE_ID_EXTD_BOTH_DIRECTORY_INFORMATION { ULONG NextEntryOffset; @@ -2451,8 +2448,11 @@ typedef enum _MEMORY_INFORMATION_CLASS { MemoryBadInformationAllProcesses = 13, MemoryImageExtensionInformation = 14, #ifdef __WINESRC__ - MemoryWineUnixFuncs = 1000, - MemoryWineUnixWow64Funcs, + MemoryWineLoadUnixLib = 1000, + MemoryWineLoadUnixLibWow64, + MemoryWineLoadUnixLibByName, + MemoryWineLoadUnixLibByNameWow64, + MemoryWineUnloadUnixLib, #endif } MEMORY_INFORMATION_CLASS; @@ -4809,7 +4809,7 @@ NTSYSAPI NTSTATUS WINAPI NtSetInformationVirtualMemory(HANDLE,VIRTUAL_MEMORY_IN NTSYSAPI NTSTATUS WINAPI NtSetIntervalProfile(ULONG,KPROFILE_SOURCE); NTSYSAPI NTSTATUS WINAPI NtSetIoCompletion(HANDLE,ULONG_PTR,ULONG_PTR,NTSTATUS,SIZE_T); NTSYSAPI NTSTATUS WINAPI NtSetIoCompletionEx(HANDLE,HANDLE,ULONG_PTR,ULONG_PTR,NTSTATUS,SIZE_T); -NTSYSAPI NTSTATUS WINAPI NtSetLdtEntries(ULONG,LDT_ENTRY,ULONG,LDT_ENTRY); +NTSYSAPI NTSTATUS WINAPI NtSetLdtEntries(ULONG,ULONG,ULONG,ULONG,ULONG,ULONG); NTSYSAPI NTSTATUS WINAPI NtSetLowEventPair(HANDLE); NTSYSAPI NTSTATUS WINAPI NtSetLowWaitHighEventPair(HANDLE); NTSYSAPI NTSTATUS WINAPI NtSetLowWaitHighThread(VOID); diff --git a/wine/include/winuser.h b/wine/include/winuser.h index c983f78..32b07b3 100644 --- a/wine/include/winuser.h +++ b/wine/include/winuser.h @@ -1566,7 +1566,7 @@ typedef struct tagMSG POINT pt; } MSG, *PMSG, *LPMSG; -#define POINTSTOPOINT(pt, pts) { (pt).x = (pts).x; (pt).y = (pts).y; } +#define POINTSTOPOINT(pt, pts) { (pt).x = ((short *)&(pts))[0]; (pt).y = ((short *)&(pts))[1]; } #define POINTTOPOINTS(pt) (MAKELONG((short)((pt).x), (short)((pt).y))) #define MAKELPARAM(low,high) ((LPARAM)(DWORD)MAKELONG(low,high)) diff --git a/wine/include/wtypes.h b/wine/include/wtypes.h index 6e4a058..a496830 100644 --- a/wine/include/wtypes.h +++ b/wine/include/wtypes.h @@ -1,4 +1,4 @@ -/*** Autogenerated by WIDL 11.1 from include/wtypes.idl - Do not edit ***/ +/*** Autogenerated by WIDL 11.5 from include/wtypes.idl - Do not edit ***/ #ifdef _WIN32 #ifndef __REQUIRED_RPCNDR_H_VERSION__ @@ -20,8 +20,7 @@ /* Headers for imported files */ -#include -#include +#include #ifdef __cplusplus extern "C" { @@ -36,30 +35,7 @@ extern "C" { extern RPC_IF_HANDLE IWinTypes_v0_1_c_ifspec; extern RPC_IF_HANDLE IWinTypes_v0_1_s_ifspec; #if 0 /* winnt.h */ -typedef byte BYTE; -typedef unsigned short WORD; -typedef ULONG DWORD; -typedef LONG BOOL; -typedef unsigned char UCHAR; -typedef int INT; -typedef unsigned int UINT; -typedef short SHORT; -typedef unsigned short USHORT; -typedef LONG LONG; -typedef ULONG ULONG; -typedef float FLOAT; -typedef void *PVOID; -typedef void *LPVOID; -typedef DWORD *LPDWORD; -typedef char CHAR; -typedef CHAR *LPSTR; -typedef const CHAR *LPCSTR; -typedef wchar_t WCHAR; -typedef WCHAR *LPWSTR; -typedef const WCHAR *LPCWSTR; -typedef boolean BOOLEAN; typedef DWORD COLORREF; -typedef void *HANDLE; typedef void *HMODULE; typedef void *HINSTANCE; typedef void *HRGN; @@ -76,57 +52,8 @@ typedef void *HKL; typedef void *HGDIOBJ; typedef HANDLE HDWP; typedef LONG_PTR LRESULT; -typedef LONG HRESULT; typedef DWORD LCID; typedef USHORT LANGID; -typedef UINT64 DWORDLONG; -typedef INT64 LONGLONG; -typedef UINT64 ULONGLONG; -typedef struct _LARGE_INTEGER { - LONGLONG QuadPart; -} LARGE_INTEGER; -typedef struct _ULARGE_INTEGER { - ULONGLONG QuadPart; -} ULARGE_INTEGER; -typedef struct _SID_IDENTIFIER_AUTHORITY { - UCHAR Value[6]; -} SID_IDENTIFIER_AUTHORITY; -typedef struct _SID_IDENTIFIER_AUTHORITY *PSID_IDENTIFIER_AUTHORITY; -typedef struct _SID { - UCHAR Revision; - UCHAR SubAuthorityCount; - SID_IDENTIFIER_AUTHORITY IdentifierAuthority; - ULONG SubAuthority[1]; -} SID; -typedef struct _SID *PISID; -typedef void *PSID; -typedef USHORT SECURITY_DESCRIPTOR_CONTROL; -typedef USHORT *PSECURITY_DESCRIPTOR_CONTROL; -typedef struct _ACL { - UCHAR AclRevision; - UCHAR Sbz1; - USHORT AclSize; - USHORT AceCount; - USHORT Sbz2; -} ACL; -typedef ACL *PACL; -typedef struct _SECURITY_DESCRIPTOR { - UCHAR Revision; - UCHAR Sbz1; - SECURITY_DESCRIPTOR_CONTROL Control; - PSID Owner; - PSID Group; - PACL Sacl; - PACL Dacl; -} SECURITY_DESCRIPTOR; -typedef struct _SECURITY_DESCRIPTOR *PISECURITY_DESCRIPTOR; -typedef struct _SECURITY_ATTRIBUTES { - DWORD nLength; - LPVOID lpSecurityDescriptor; - BOOL bInheritHandle; -} SECURITY_ATTRIBUTES; -typedef struct _SECURITY_ATTRIBUTES *PSECURITY_ATTRIBUTES; -typedef struct _SECURITY_ATTRIBUTES *LPSECURITY_ATTRIBUTES; typedef struct tagSIZE { LONG cx; LONG cy; @@ -168,11 +95,6 @@ typedef const RECTL *LPCRECTL; typedef UINT_PTR WPARAM; typedef LONG_PTR LPARAM; #endif /* winnt.h */ -#ifdef _MSC_VER -typedef double DOUBLE; -#else -typedef double DECLSPEC_ALIGN(8) DOUBLE; -#endif #ifndef _PALETTEENTRY_DEFINED #define _PALETTEENTRY_DEFINED typedef struct tagPALETTEENTRY { @@ -194,30 +116,6 @@ typedef struct tagLOGPALETTE { typedef struct tagLOGPALETTE *PLOGPALETTE; typedef struct tagLOGPALETTE *LPLOGPALETTE; #endif -#ifndef _SYSTEMTIME_ -#define _SYSTEMTIME_ -typedef struct _SYSTEMTIME { - WORD wYear; - WORD wMonth; - WORD wDayOfWeek; - WORD wDay; - WORD wHour; - WORD wMinute; - WORD wSecond; - WORD wMilliseconds; -} SYSTEMTIME; -typedef struct _SYSTEMTIME *PSYSTEMTIME; -typedef struct _SYSTEMTIME *LPSYSTEMTIME; -#endif -#ifndef _FILETIME_ -#define _FILETIME_ -typedef struct _FILETIME { - DWORD dwLowDateTime; - DWORD dwHighDateTime; -} FILETIME; -typedef struct _FILETIME *PFILETIME; -typedef struct _FILETIME *LPFILETIME; -#endif #ifndef _TEXTMETRIC_DEFINED #define _TEXTMETRIC_DEFINED typedef struct tagTEXTMETRICA { @@ -269,42 +167,6 @@ typedef struct tagTEXTMETRICW { typedef struct tagTEXTMETRICW *LPTEXTMETRICW; typedef struct tagTEXTMETRICW *PTEXTMETRICW; #endif -typedef WCHAR OLECHAR; -typedef OLECHAR *LPOLESTR; -typedef const OLECHAR *LPCOLESTR; -#ifndef __WINESRC__ -# if defined(WINE_UNICODE_NATIVE) || defined(__MINGW32__) || defined(_MSC_VER) -# define OLESTR(str) L##str -# else -# define OLESTR(str) u##str -# endif -#endif -typedef LONG SCODE; -typedef struct _COAUTHIDENTITY { - USHORT *User; - ULONG UserLength; - USHORT *Domain; - ULONG DomainLength; - USHORT *Password; - ULONG PasswordLength; - ULONG Flags; -} COAUTHIDENTITY; -typedef struct _COAUTHINFO { - DWORD dwAuthnSvc; - DWORD dwAuthzSvc; - LPWSTR pwszServerPrincName; - DWORD dwAuthnLevel; - DWORD dwImpersonationLevel; - COAUTHIDENTITY *pAuthIdentityData; - DWORD dwCapabilities; -} COAUTHINFO; -typedef enum tagMEMCTX { - MEMCTX_TASK = 1, - MEMCTX_SHARED = 2, - MEMCTX_MACSYSTEM = 3, - MEMCTX_UNKNOWN = -1, - MEMCTX_SAME = -2 -} MEMCTX; #ifndef _ROT_COMPARE_MAX_DEFINED #define _ROT_COMPARE_MAX_DEFINED #define ROT_COMPARE_MAX 2048 @@ -314,82 +176,6 @@ typedef enum tagMEMCTX { #define ROTFLAGS_REGISTRATIONKEEPSALIVE 0x1 #define ROTFLAGS_ALLOWANYCLIENT 0x2 #endif -typedef enum tagCLSCTX { - CLSCTX_INPROC_SERVER = 0x1, - CLSCTX_INPROC_HANDLER = 0x2, - CLSCTX_LOCAL_SERVER = 0x4, - CLSCTX_INPROC_SERVER16 = 0x8, - CLSCTX_REMOTE_SERVER = 0x10, - CLSCTX_INPROC_HANDLER16 = 0x20, - CLSCTX_INPROC_SERVERX86 = 0x40, - CLSCTX_INPROC_HANDLERX86 = 0x80, - CLSCTX_ESERVER_HANDLER = 0x100, - CLSCTX_NO_CODE_DOWNLOAD = 0x400, - CLSCTX_NO_CUSTOM_MARSHAL = 0x1000, - CLSCTX_ENABLE_CODE_DOWNLOAD = 0x2000, - CLSCTX_NO_FAILURE_LOG = 0x4000, - CLSCTX_DISABLE_AAA = 0x8000, - CLSCTX_ENABLE_AAA = 0x10000, - CLSCTX_FROM_DEFAULT_CONTEXT = 0x20000, - CLSCTX_ACTIVATE_X86_SERVER = 0x40000, - CLSCTX_ACTIVATE_32_BIT_SERVER = CLSCTX_ACTIVATE_X86_SERVER, - CLSCTX_ACTIVATE_64_BIT_SERVER = 0x80000, - CLSCTX_ENABLE_CLOAKING = 0x100000, - CLSCTX_APPCONTAINER = 0x400000, - CLSCTX_ACTIVATE_AAA_AS_IU = 0x800000, - CLSCTX_RESERVED6 = 0x1000000, - CLSCTX_ACTIVATE_ARM32_SERVER = 0x2000000, - CLSCTX_PS_DLL = 0x80000000 -} CLSCTX; -#define CLSCTX_INPROC (CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER) -#define CLSCTX_ALL (CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER) -#define CLSCTX_SERVER (CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER) -typedef enum tagMSHLFLAGS { - MSHLFLAGS_NORMAL = 0, - MSHLFLAGS_TABLESTRONG = 1, - MSHLFLAGS_TABLEWEAK = 2, - MSHLFLAGS_NOPING = 4 -} MSHLFLAGS; -typedef enum tagMSHCTX { - MSHCTX_LOCAL = 0, - MSHCTX_NOSHAREDMEM = 1, - MSHCTX_DIFFERENTMACHINE = 2, - MSHCTX_INPROC = 3, - MSHCTX_CROSSCTX = 4 -} MSHCTX; -typedef struct _BYTE_BLOB { - ULONG clSize; - byte abData[1]; -} BYTE_BLOB; -typedef BYTE_BLOB *UP_BYTE_BLOB; -typedef struct _FLAGGED_BYTE_BLOB { - ULONG fFlags; - ULONG clSize; - byte abData[1]; -} FLAGGED_BYTE_BLOB; -typedef FLAGGED_BYTE_BLOB *UP_FLAGGED_BYTE_BLOB; -typedef struct _FLAGGED_WORD_BLOB { - ULONG fFlags; - ULONG clSize; - unsigned short asData[1]; -} FLAGGED_WORD_BLOB; -typedef FLAGGED_WORD_BLOB *UP_FLAGGED_WORD_BLOB; -typedef struct _BYTE_SIZEDARR { - ULONG clSize; - byte *pData; -} BYTE_SIZEDARR; -typedef struct _SHORT_SIZEDARR { - ULONG clSize; - unsigned short *pData; -} WORD_SIZEDARR; -typedef struct _LONG_SIZEDARR { - ULONG clSize; - ULONG *pData; -} DWORD_SIZEDARR; -typedef struct _HYPER_SIZEDARR { - ULONG clSize; - hyper *pData; -} HYPER_SIZEDARR; #define WDT_INPROC_CALL (0x48746457) #define WDT_REMOTE_CALL (0x52746457) @@ -549,11 +335,6 @@ typedef struct tagMSG { typedef struct tagMSG *PMSG; typedef struct tagMSG *NPMSG; typedef struct tagMSG *LPMSG; -#endif -#if 0 -typedef GUID *REFGUID; -typedef IID *REFIID; -typedef CLSID *REFCLSID; typedef FMTID *REFFMTID; #endif typedef enum tagDVASPECT { @@ -644,16 +425,6 @@ typedef struct tagBSTRBLOB { BYTE *pData; } BSTRBLOB; typedef struct tagBSTRBLOB *LPBSTRBLOB; -#ifndef _tagBLOB_DEFINED -#define _tagBLOB_DEFINED -#define _BLOB_DEFINED -#define _LPBLOB_DEFINED -typedef struct tagBLOB { - ULONG cbSize; - BYTE *pBlobData; -} BLOB; -typedef struct tagBLOB *LPBLOB; -#endif typedef struct tagCLIPDATA { ULONG cbSize; LONG ulClipFmt; diff --git a/wine/include/wtypesbase.h b/wine/include/wtypesbase.h new file mode 100644 index 0000000..ed90aea --- /dev/null +++ b/wine/include/wtypesbase.h @@ -0,0 +1,438 @@ +/*** Autogenerated by WIDL 11.5 from include/wtypesbase.idl - Do not edit ***/ + +#ifdef _WIN32 +#ifndef __REQUIRED_RPCNDR_H_VERSION__ +#define __REQUIRED_RPCNDR_H_VERSION__ 475 +#endif +#include +#include +#endif + +#ifndef COM_NO_WINDOWS_H +#include +#include +#endif + +#ifndef __wtypesbase_h__ +#define __wtypesbase_h__ + +/* Forward declarations */ + +/* Headers for imported files */ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * This file is part of the mingw-w64 runtime package. + * No warranty is given; refer to the file DISCLAIMER within this package. + */ + + +/***************************************************************************** + * IWinTypesBase interface (v0.1) + */ +#ifndef __IWinTypesBase_INTERFACE_DEFINED__ +#define __IWinTypesBase_INTERFACE_DEFINED__ + +extern RPC_IF_HANDLE IWinTypesBase_v0_1_c_ifspec; +extern RPC_IF_HANDLE IWinTypesBase_v0_1_s_ifspec; + +#if 0 +typedef byte BYTE; +typedef unsigned short WORD; +typedef unsigned int UINT; +typedef int INT; +typedef LONG BOOL; +typedef LONG LONG; +typedef ULONG DWORD; +typedef void *HANDLE; +typedef WORD *LPWORD; +typedef DWORD *LPDWORD; +typedef char CHAR; +typedef CHAR *LPSTR; +typedef const CHAR *LPCSTR; +typedef wchar_t WCHAR; +typedef WCHAR TCHAR; +typedef WCHAR *LPWSTR; +typedef TCHAR *LPTSTR; +typedef const WCHAR *LPCWSTR; +typedef const TCHAR *LPCTSTR; +typedef HANDLE *LPHANDLE; +#endif + +#if !defined(OLE2ANSI) +typedef WCHAR OLECHAR; +typedef OLECHAR *LPOLESTR; +typedef const OLECHAR *LPCOLESTR; + +#ifndef __WINESRC__ +#if defined(WINE_UNICODE_NATIVE) || defined(__MINGW32__) || defined(_MSC_VER) +#define OLESTR(str) L##str +#else +#define OLESTR(str) u##str +#endif +#endif +#else +typedef char OLECHAR; +typedef LPSTR LPOLESTR; +typedef LPCSTR LPCOLESTR; + +#define OLESTR(str) str +#endif + +#ifndef _WINDEF_ +#ifndef _MINWINDEF_ +typedef void *PVOID; +typedef void *LPVOID; +typedef float FLOAT; +#endif +#endif +#ifdef _MSC_VER +typedef double DOUBLE; +#else +typedef double DECLSPEC_ALIGN(8) DOUBLE; +#endif + +#ifndef __LIBWINEVBS__ +typedef unsigned char UCHAR; +typedef short SHORT; +typedef unsigned short USHORT; +typedef DWORD ULONG; +#endif +#ifndef _DWORDLONG_ +typedef UINT64 DWORDLONG; +typedef DWORDLONG *PDWORDLONG; +#endif + +#ifndef _ULONGLONG_ +typedef INT64 LONGLONG; +typedef UINT64 ULONGLONG; +typedef LONGLONG *PLONGLONG; +typedef ULONGLONG *PULONGLONG; +#endif +#if 0 +typedef struct _LARGE_INTEGER { + LONGLONG QuadPart; +} LARGE_INTEGER; +typedef LARGE_INTEGER *PLARGE_INTEGER; +typedef struct _ULARGE_INTEGER { + ULONGLONG QuadPart; +} ULARGE_INTEGER; +#endif + +#ifndef _WINBASE_ +#ifndef _FILETIME_ +#define _FILETIME_ + +typedef struct _FILETIME { + DWORD dwLowDateTime; + DWORD dwHighDateTime; +} FILETIME; +typedef struct _FILETIME *PFILETIME; +typedef struct _FILETIME *LPFILETIME; +#endif + +#ifndef _SYSTEMTIME_ +#define _SYSTEMTIME_ + +typedef struct _SYSTEMTIME { + WORD wYear; + WORD wMonth; + WORD wDayOfWeek; + WORD wDay; + WORD wHour; + WORD wMinute; + WORD wSecond; + WORD wMilliseconds; +} SYSTEMTIME; +typedef struct _SYSTEMTIME *PSYSTEMTIME; +typedef struct _SYSTEMTIME *LPSYSTEMTIME; +#endif + +#ifndef _SECURITY_ATTRIBUTES_ +#define _SECURITY_ATTRIBUTES_ + +typedef struct _SECURITY_ATTRIBUTES { + DWORD nLength; + LPVOID lpSecurityDescriptor; + BOOL bInheritHandle; +} SECURITY_ATTRIBUTES; +typedef struct _SECURITY_ATTRIBUTES *PSECURITY_ATTRIBUTES; +typedef struct _SECURITY_ATTRIBUTES *LPSECURITY_ATTRIBUTES; +#endif + +#ifndef SECURITY_DESCRIPTOR_REVISION +typedef USHORT SECURITY_DESCRIPTOR_CONTROL; +typedef USHORT *PSECURITY_DESCRIPTOR_CONTROL; +typedef PVOID PSID; + +typedef struct _ACL { + UCHAR AclRevision; + UCHAR Sbz1; + USHORT AclSize; + USHORT AceCount; + USHORT Sbz2; +} ACL; + +typedef ACL *PACL; + +typedef struct _SECURITY_DESCRIPTOR { + UCHAR Revision; + UCHAR Sbz1; + SECURITY_DESCRIPTOR_CONTROL Control; + PSID Owner; + PSID Group; + PACL Sacl; + PACL Dacl; +} SECURITY_DESCRIPTOR; +typedef struct _SECURITY_DESCRIPTOR *PISECURITY_DESCRIPTOR; +#endif +#endif + +typedef struct _COAUTHIDENTITY { + USHORT *User; + ULONG UserLength; + USHORT *Domain; + ULONG DomainLength; + USHORT *Password; + ULONG PasswordLength; + ULONG Flags; +} COAUTHIDENTITY; + +typedef struct _COAUTHINFO { + DWORD dwAuthnSvc; + DWORD dwAuthzSvc; + LPWSTR pwszServerPrincName; + DWORD dwAuthnLevel; + DWORD dwImpersonationLevel; + COAUTHIDENTITY *pAuthIdentityData; + DWORD dwCapabilities; +} COAUTHINFO; + +typedef LONG SCODE; +typedef SCODE *PSCODE; + +#ifndef _HRESULT_DEFINED +#define _HRESULT_DEFINED +#ifdef __WIDL__ +typedef LONG HRESULT; +#else +typedef __LONG32 HRESULT; +#endif +#endif + +#ifndef __OBJECTID_DEFINED +#define __OBJECTID_DEFINED +#define _OBJECTID_DEFINED + +typedef struct _OBJECTID { + GUID Lineage; + ULONG Uniquifier; +} OBJECTID; +#endif + +#if 0 +typedef GUID *REFGUID; +typedef IID *REFIID; +typedef CLSID *REFCLSID; +#endif + +typedef enum tagMEMCTX { + MEMCTX_TASK = 1, + MEMCTX_SHARED = 2, + MEMCTX_MACSYSTEM = 3, + MEMCTX_UNKNOWN = -1, + MEMCTX_SAME = -2 +} MEMCTX; +#ifndef _ROTREGFLAGS_DEFINED +#define _ROTREGFLAGS_DEFINED + +#define ROTREGFLAGS_ALLOWANYCLIENT 0x1 +#endif + +#ifndef _APPIDREGFLAGS_DEFINED +#define _APPIDREGFLAGS_DEFINED + +#define APPIDREGFLAGS_ACTIVATE_IUSERVER_INDESKTOP 0x1 +#define APPIDREGFLAGS_SECURE_SERVER_PROCESS_SD_AND_BIND 0x2 +#define APPIDREGFLAGS_ISSUE_ACTIVATION_RPC_AT_IDENTIFY 0x4 +#define APPIDREGFLAGS_IUSERVER_UNMODIFIED_LOGON_TOKEN 0x8 +#define APPIDREGFLAGS_IUSERVER_SELF_SID_IN_LAUNCH_PERMISSION 0x10 +#define APPIDREGFLAGS_IUSERVER_ACTIVATE_IN_CLIENT_SESSION_ONLY 0x20 +#define APPIDREGFLAGS_RESERVED1 0x40 +#endif + +#ifndef _DCOMSCM_REMOTECALL_FLAGS_DEFINED +#define _DCOMSCM_REMOTECALL_FLAGS_DEFINED + +#define DCOMSCM_ACTIVATION_USE_ALL_AUTHNSERVICES 0x1 +#define DCOMSCM_ACTIVATION_DISALLOW_UNSECURE_CALL 0x2 +#define DCOMSCM_RESOLVE_USE_ALL_AUTHNSERVICES 0x4 +#define DCOMSCM_RESOLVE_DISALLOW_UNSECURE_CALL 0x8 +#define DCOMSCM_PING_USE_MID_AUTHNSERVICE 0x10 +#define DCOMSCM_PING_DISALLOW_UNSECURE_CALL 0x20 +#endif + +typedef enum tagCLSCTX { + CLSCTX_INPROC_SERVER = 0x1, + CLSCTX_INPROC_HANDLER = 0x2, + CLSCTX_LOCAL_SERVER = 0x4, + CLSCTX_INPROC_SERVER16 = 0x8, + CLSCTX_REMOTE_SERVER = 0x10, + CLSCTX_INPROC_HANDLER16 = 0x20, + CLSCTX_RESERVED1 = 0x40, + CLSCTX_RESERVED2 = 0x80, + CLSCTX_RESERVED3 = 0x100, + CLSCTX_RESERVED4 = 0x200, + CLSCTX_NO_CODE_DOWNLOAD = 0x400, + CLSCTX_RESERVED5 = 0x800, + CLSCTX_NO_CUSTOM_MARSHAL = 0x1000, + CLSCTX_ENABLE_CODE_DOWNLOAD = 0x2000, + CLSCTX_NO_FAILURE_LOG = 0x4000, + CLSCTX_DISABLE_AAA = 0x8000, + CLSCTX_ENABLE_AAA = 0x10000, + CLSCTX_FROM_DEFAULT_CONTEXT = 0x20000, + CLSCTX_ACTIVATE_32_BIT_SERVER = 0x40000, + CLSCTX_ACTIVATE_64_BIT_SERVER = 0x80000, + CLSCTX_ENABLE_CLOAKING = 0x100000, + CLSCTX_APPCONTAINER = 0x400000, + CLSCTX_ACTIVATE_AAA_AS_IU = 0x800000, + CLSCTX_PS_DLL = (int)0x80000000 +} CLSCTX; + +#define CLSCTX_VALID_MASK (CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER | CLSCTX_INPROC_SERVER16 | CLSCTX_REMOTE_SERVER | CLSCTX_NO_CODE_DOWNLOAD | CLSCTX_NO_CUSTOM_MARSHAL | CLSCTX_ENABLE_CODE_DOWNLOAD | CLSCTX_NO_FAILURE_LOG | CLSCTX_DISABLE_AAA | CLSCTX_ENABLE_AAA | CLSCTX_FROM_DEFAULT_CONTEXT | CLSCTX_ACTIVATE_32_BIT_SERVER | CLSCTX_ACTIVATE_64_BIT_SERVER | CLSCTX_ENABLE_CLOAKING | CLSCTX_APPCONTAINER | CLSCTX_ACTIVATE_AAA_AS_IU | CLSCTX_PS_DLL) + +typedef enum tagMSHLFLAGS { + MSHLFLAGS_NORMAL = 0, + MSHLFLAGS_TABLESTRONG = 1, + MSHLFLAGS_TABLEWEAK = 2, + MSHLFLAGS_NOPING = 4, + MSHLFLAGS_RESERVED1 = 8, + MSHLFLAGS_RESERVED2 = 16, + MSHLFLAGS_RESERVED3 = 32, + MSHLFLAGS_RESERVED4 = 64 +} MSHLFLAGS; + +typedef enum tagMSHCTX { + MSHCTX_LOCAL = 0, + MSHCTX_NOSHAREDMEM = 1, + MSHCTX_DIFFERENTMACHINE = 2, + MSHCTX_INPROC = 3, + MSHCTX_CROSSCTX = 4 +} MSHCTX; + +typedef struct _BYTE_BLOB { + ULONG clSize; + byte abData[1]; +} BYTE_BLOB; + +typedef BYTE_BLOB *UP_BYTE_BLOB; + +typedef struct _WORD_BLOB { + ULONG clSize; + unsigned short asData[1]; +} WORD_BLOB; + +typedef WORD_BLOB *UP_WORD_BLOB; + +typedef struct _DWORD_BLOB { + ULONG clSize; + ULONG alData[1]; +} DWORD_BLOB; + +typedef DWORD_BLOB *UP_DWORD_BLOB; + +typedef struct _FLAGGED_BYTE_BLOB { + ULONG fFlags; + ULONG clSize; + byte abData[1]; +} FLAGGED_BYTE_BLOB; + +typedef FLAGGED_BYTE_BLOB *UP_FLAGGED_BYTE_BLOB; + +typedef struct _FLAGGED_WORD_BLOB { + ULONG fFlags; + ULONG clSize; + unsigned short asData[1]; +} FLAGGED_WORD_BLOB; + +typedef FLAGGED_WORD_BLOB *UP_FLAGGED_WORD_BLOB; + +typedef struct _BYTE_SIZEDARR { + ULONG clSize; + byte *pData; +} BYTE_SIZEDARR; + +typedef struct _SHORT_SIZEDARR { + ULONG clSize; + unsigned short *pData; +} WORD_SIZEDARR; + +typedef struct _LONG_SIZEDARR { + ULONG clSize; + ULONG *pData; +} DWORD_SIZEDARR; + +typedef struct _HYPER_SIZEDARR { + ULONG clSize; + hyper *pData; +} HYPER_SIZEDARR; + +#endif /* __IWinTypesBase_INTERFACE_DEFINED__ */ + + +#ifndef __LIBWINEVBS__ +typedef boolean BOOLEAN; +#endif +#ifndef _tagBLOB_DEFINED +#define _tagBLOB_DEFINED +#define _BLOB_DEFINED +#define _LPBLOB_DEFINED + +typedef struct tagBLOB { + ULONG cbSize; + BYTE *pBlobData; +} BLOB; +typedef struct tagBLOB *LPBLOB; +#endif + +#ifndef SID_IDENTIFIER_AUTHORITY_DEFINED +#define SID_IDENTIFIER_AUTHORITY_DEFINED +typedef struct _SID_IDENTIFIER_AUTHORITY { + UCHAR Value[6]; +} SID_IDENTIFIER_AUTHORITY; +typedef struct _SID_IDENTIFIER_AUTHORITY *PSID_IDENTIFIER_AUTHORITY; +#endif + +#ifndef SID_DEFINED +#define SID_DEFINED + +typedef struct _SID { + BYTE Revision; + BYTE SubAuthorityCount; + SID_IDENTIFIER_AUTHORITY IdentifierAuthority; + ULONG SubAuthority[1]; +} SID; +typedef struct _SID *PISID; + +typedef struct _SID_AND_ATTRIBUTES { + SID *Sid; + DWORD Attributes; +} SID_AND_ATTRIBUTES; +typedef struct _SID_AND_ATTRIBUTES *PSID_AND_ATTRIBUTES; +#endif +/* Begin additional prototypes for all interfaces */ + + +/* End additional prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif /* __wtypesbase_h__ */ diff --git a/wine/wine-afba987dda1430dc0d9f36fc6f27cd3584bce79e.patch b/wine/wine-1dbc94083d1b508c3708c857b1715f9d379aa78a.patch similarity index 95% rename from wine/wine-afba987dda1430dc0d9f36fc6f27cd3584bce79e.patch rename to wine/wine-1dbc94083d1b508c3708c857b1715f9d379aa78a.patch index 99dae06..a787bdd 100644 --- a/wine/wine-afba987dda1430dc0d9f36fc6f27cd3584bce79e.patch +++ b/wine/wine-1dbc94083d1b508c3708c857b1715f9d379aa78a.patch @@ -58,7 +58,7 @@ /* Eliminate Microsoft C/C++ compiler warning 4715 */ #ifdef _MSC_VER -@@ -2475,6 +2487,7 @@ +@@ -2576,6 +2588,7 @@ struct _TEB; @@ -66,7 +66,7 @@ #ifdef WINE_UNIX_LIB # ifdef __GNUC__ NTSYSAPI struct _TEB * WINAPI NtCurrentTeb(void) __attribute__((pure)); -@@ -2536,6 +2549,13 @@ +@@ -2637,6 +2650,13 @@ #elif !defined(RC_INVOKED) # error You must define NtCurrentTeb() for your architecture #endif @@ -80,22 +80,49 @@ #ifdef NONAMELESSUNION #define GetCurrentFiber() (((NT_TIB *)NtCurrentTeb())->u.FiberData) -@@ -7532,6 +7552,7 @@ +@@ -7656,6 +7676,8 @@ #endif } ++#ifdef __LIBWINVBS__ +#ifndef __MINGW32__ static FORCEINLINE DECLSPEC_NORETURN void __fastfail(unsigned int code) { #if defined(__x86_64__) || defined(__i386__) -@@ -7544,6 +7565,7 @@ +@@ -7668,6 +7690,8 @@ for (;;) __asm__ __volatile__( "udf #0xfb" :: "r" (val) : "memory" ); #endif } ++#endif +#endif #endif /* __GNUC__ */ +--- wine/include/wtypesbase.h ++++ libwinevbs/include/wtypesbase.h +@@ -98,10 +98,12 @@ + typedef double DECLSPEC_ALIGN(8) DOUBLE; + #endif + ++#ifndef __LIBWINEVBS__ + typedef unsigned char UCHAR; + typedef short SHORT; + typedef unsigned short USHORT; + typedef DWORD ULONG; ++#endif + #ifndef _DWORDLONG_ + typedef UINT64 DWORDLONG; + typedef DWORDLONG *PDWORDLONG; +@@ -384,7 +386,9 @@ + #endif /* __IWinTypesBase_INTERFACE_DEFINED__ */ + + ++#ifndef __LIBWINEVBS__ + typedef boolean BOOLEAN; ++#endif + #ifndef _tagBLOB_DEFINED + #define _tagBLOB_DEFINED + #define _BLOB_DEFINED --- wine/include/windef.h +++ libwinevbs/include/windef.h @@ -178,6 +178,15 @@ @@ -222,21 +249,23 @@ /* --- wine/include/winbase.h +++ libwinevbs/include/winbase.h -@@ -2621,11 +2621,13 @@ +@@ -2606,12 +2606,14 @@ return strcat( dst, src ); } +#ifndef __LIBWINEVBS__ /* strncpy/wcsncpy don't do what you think, don't use them */ #undef strncpy - #undef wcsncpy #define strncpy(d,s,n) error do_not_use_strncpy_use_lstrcpynA_or_memcpy_instead + #ifdef __WINE_WCHAR_H + #undef wcsncpy #define wcsncpy(d,s,n) error do_not_use_wcsncpy_use_lstrcpynW_or_memcpy_instead +#endif + #endif #endif /* !defined(__WINESRC__) || defined(WINE_NO_INLINE_STRING) */ - # libwinevbs-only: wine-afba987dda1430dc0d9f36fc6f27cd3584bce79e.patch +# libwinevbs-only: wine-1dbc94083d1b508c3708c857b1715f9d379aa78a.patch --- wine/dlls/atl/atl.c +++ libwinevbs/dlls/atl/atl.c @@ -967,6 +967,7 @@ @@ -254,7 +283,7 @@ +#endif --- wine/dlls/kernelbase/locale.c +++ libwinevbs/dlls/kernelbase/locale.c -@@ -595,6 +595,7 @@ +@@ -594,6 +594,7 @@ static const NLS_LOCALE_LCID_INDEX *find_lcid_entry( LCID lcid ) { @@ -262,7 +291,7 @@ int min = 0, max = locale_table->nb_lcids - 1; while (min <= max) -@@ -604,6 +605,7 @@ +@@ -603,6 +604,7 @@ else if (lcid > lcids_index[pos].id) min = pos + 1; else return &lcids_index[pos]; } @@ -270,7 +299,7 @@ return NULL; } -@@ -661,6 +663,7 @@ +@@ -660,6 +662,7 @@ static const struct sortguid *get_language_sort( const WCHAR *name ) { @@ -278,7 +307,7 @@ const NLS_LOCALE_LCNAME_INDEX *entry; const NLS_LOCALE_DATA *locale; WCHAR guidstr[39]; -@@ -712,6 +715,9 @@ +@@ -711,6 +714,9 @@ if (!ret) ret = &sort.guids[0]; locale_sorts[entry - lcnames_index] = ret; return ret; @@ -288,7 +317,7 @@ } -@@ -1628,7 +1634,11 @@ +@@ -1627,7 +1633,11 @@ if (id != CAL_GREGORIAN && type != CAL_ITWODIGITYEARMAX) { @@ -300,7 +329,7 @@ for (i = 0; i < ids[0]; i++) if (ids[1 + i] == id) break; if (i == ids[0]) goto invalid; } -@@ -2120,7 +2130,11 @@ +@@ -2119,7 +2129,11 @@ if (pos >> 13) { if (get_char_props( norm_info, ch ) != 0xbf) return NULL; @@ -312,7 +341,7 @@ len = pos >> 13; } else -@@ -2135,7 +2149,11 @@ +@@ -2134,7 +2148,11 @@ for ( ; pos < end; pos++) { if (pairs[pos].src != (WCHAR)ch) continue; @@ -324,7 +353,7 @@ len = pairs[pos].dst >> 13; break; } -@@ -2152,7 +2170,11 @@ +@@ -2151,7 +2169,11 @@ static WCHAR compose_chars( WCHAR ch1, WCHAR ch2 ) { const USHORT *table = (const USHORT *)norm_info + norm_info->comp_hash; @@ -336,7 +365,7 @@ unsigned int hash, start, end, i; WCHAR ch[3]; -@@ -2197,6 +2219,11 @@ +@@ -2196,6 +2218,11 @@ { static const CPTABLEINFO utf7_cpinfo = { CP_UTF7, 5, '?', 0xfffd, '?', '?' }; static const CPTABLEINFO utf8_cpinfo = { CP_UTF8, 4, '?', 0xfffd, '?', '?' }; @@ -348,7 +377,7 @@ unsigned int i; USHORT *ptr; SIZE_T size; -@@ -3830,6 +3857,7 @@ +@@ -3829,6 +3856,7 @@ static int compare_string( const struct sortguid *sortid, DWORD flags, const WCHAR *src1, int srclen1, const WCHAR *src2, int srclen2 ) { @@ -356,7 +385,7 @@ struct sortkey_state s1; struct sortkey_state s2; BYTE primary1[32]; -@@ -3890,6 +3918,12 @@ +@@ -3889,6 +3917,12 @@ free_sortkey_state( &s1 ); free_sortkey_state( &s2 ); return ret; @@ -369,7 +398,7 @@ } -@@ -4332,7 +4366,11 @@ +@@ -4331,7 +4365,11 @@ if (id == ENUM_ALL_CALENDARS) { count = locale_strings[locale->scalendartype]; @@ -381,7 +410,7 @@ } else if (id <= CAL_UMALQURA) { -@@ -4410,7 +4448,11 @@ +@@ -4409,7 +4447,11 @@ return FALSE; } @@ -393,7 +422,7 @@ switch (flags & ~LOCALE_USE_CP_ACP) { -@@ -4747,7 +4789,9 @@ +@@ -4746,7 +4788,9 @@ return 0; } @@ -403,7 +432,7 @@ if (!str1 || !str2) { -@@ -4865,6 +4909,7 @@ +@@ -4864,6 +4908,7 @@ case LOCALE_CUSTOM_UI_DEFAULT: break; default: @@ -411,7 +440,7 @@ if (lcid == user_lcid || lcid == system_lcid) break; if (!(entry = find_lcid_entry( lcid ))) { -@@ -4873,6 +4918,7 @@ +@@ -4872,6 +4917,7 @@ return 0; } locale = locale_strings + entry->name + 1; @@ -419,7 +448,7 @@ break; } -@@ -5792,6 +5838,7 @@ +@@ -5791,6 +5837,7 @@ BOOL WINAPI DECLSPEC_HOTPATCH GetFileMUIInfo( DWORD flags, const WCHAR *path, FILEMUIINFO *info, DWORD *size ) { @@ -427,7 +456,7 @@ DWORD off, mui_size, type = MUI_FILETYPE_NOT_LANGUAGE_NEUTRAL; struct mui_resource *mui = NULL; HMODULE hmod; -@@ -5946,6 +5993,9 @@ +@@ -5945,6 +5992,9 @@ FreeLibrary( hmod ); return TRUE; @@ -843,55 +872,7 @@ * DllGetClassObject (scrrun.@) --- wine/dlls/vbscript/compile.c +++ libwinevbs/dlls/vbscript/compile.c -@@ -864,7 +864,7 @@ - static HRESULT compile_forto_statement(compile_ctx_t *ctx, forto_statement_t *stat) - { - statement_ctx_t loop_ctx = {2}; -- unsigned step_instr, body_label, instr; -+ unsigned step_instr, instr; - BSTR identifier; - HRESULT hres; - -@@ -909,28 +909,20 @@ - if(!loop_ctx.for_end_label) - return E_OUTOFMEMORY; - -- body_label = alloc_label(ctx); -- if(!body_label) -- return E_OUTOFMEMORY; -- -- if(!emit_catch_jmp(ctx, 2, body_label)) -- return E_OUTOFMEMORY; -- - step_instr = push_instr(ctx, OP_step); - if(!step_instr) - return E_OUTOFMEMORY; - instr_ptr(ctx, step_instr)->arg2.bstr = identifier; - instr_ptr(ctx, step_instr)->arg1.uint = loop_ctx.for_end_label; - -- if(!emit_catch_jmp(ctx, 0, loop_ctx.for_end_label)) -+ if(!emit_catch(ctx, 2)) - return E_OUTOFMEMORY; - -- label_set_addr(ctx, body_label); -- - hres = compile_statement(ctx, &loop_ctx, stat->body); - if(FAILED(hres)) - return hres; - -+ /* FIXME: Error handling can't be done compatible with native using OP_incc here. */ - instr = push_instr(ctx, OP_incc); - if(!instr) - return E_OUTOFMEMORY; -@@ -946,6 +938,7 @@ - - label_set_addr(ctx, loop_ctx.for_end_label); - -+ /* FIXME: reconsider after OP_incc fixup. */ - if(!emit_catch(ctx, 0)) - return E_OUTOFMEMORY; - -@@ -1081,7 +1074,9 @@ +@@ -1074,7 +1074,9 @@ break; case EXPR_CALL: call_expr = (call_expression_t*)left; @@ -901,7 +882,7 @@ member_expr = (member_expression_t*)call_expr->call_expr; break; default: -@@ -1904,15 +1899,23 @@ +@@ -2006,15 +2008,23 @@ for(i = 0; i < var_cnt; i++) { if(lookup_script_identifier(ctx, script, vars[i].name)) { @@ -1224,14 +1205,16 @@ function_t *func_iter, **new_funcs; --- wine/dlls/vbscript/vbscript_defs.h +++ libwinevbs/dlls/vbscript/vbscript_defs.h -@@ -251,7 +251,6 @@ +@@ -252,6 +252,9 @@ #define VBSE_PATH_FILE_ACCESS 75 #define VBSE_PATH_NOT_FOUND 76 #define VBSE_OBJECT_VARIABLE_NOT_SET 91 --#define VBSE_FOR_LOOP_NOT_INITIALIZED 92 ++#ifdef __LIBWINEVBS__ ++#define VBSE_FOR_LOOP_NOT_INITIALIZED 92 ++#endif #define VBSE_ILLEGAL_NULL_USE 94 #define VBSE_CANT_CREATE_TMP_FILE 322 - #define VBSE_CANT_CREATE_OBJECT 429 + #define VBSE_OBJECT_REQUIRED 424 --- wine/dlls/vbscript/lex.c +++ libwinevbs/dlls/vbscript/lex.c @@ -94,6 +94,34 @@ @@ -1315,7 +1298,7 @@ /* NOTE: * We resolve empty brackets in lexer instead of parser to avoid complex conflicts @@ -468,6 +510,55 @@ - if(ctx->last_token == tIdentifier || ctx->last_token == ')') + if(ctx->last_token == tIdentifier || ctx->last_token == ')' || ctx->last_token == tME) return '('; return tEXPRLBRACKET; +#else @@ -1339,7 +1322,7 @@ + * not call parens. Detect this when: identifier/')' precedes '(' with a space, + * and a binary-only operator (*, /, \, ^, &) follows the matching ')'. + */ -+ if(ctx->last_token == tIdentifier || ctx->last_token == ')') { ++ if(ctx->last_token == tIdentifier || ctx->last_token == ')' || ctx->last_token == tME) { + if(paren_pos > ctx->code && (paren_pos[-1] == ' ' || paren_pos[-1] == '\t') + && ctx->is_statement_ctx) { + const WCHAR *p = ctx->ptr; @@ -1413,7 +1396,7 @@ } --- wine/dlls/vbscript/interp.c +++ libwinevbs/dlls/vbscript/interp.c -@@ -629,6 +629,12 @@ +@@ -627,6 +627,12 @@ return variant_call(ctx, ref.u.v, arg_cnt, res); if(!res) { @@ -1426,38 +1409,7 @@ FIXME("REF_VAR no res\n"); return E_NOTIMPL; } -@@ -649,12 +655,30 @@ - return hres; - break; - case REF_OBJ: -+#ifndef __LIBWINEVBS__ - if(arg_cnt) { - FIXME("arguments on object\n"); - return E_NOTIMPL; - } -+#endif - - if(res) { -+#ifdef __LIBWINEVBS__ -+ if (arg_cnt) { -+ vbstack_to_dp(ctx, arg_cnt, FALSE, &dp); -+ -+ hres = IDispatch_Invoke(ref.u.obj, DISPID_VALUE, &IID_NULL, -+ LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, &dp, res, -+ NULL, NULL); -+ -+ if(FAILED(hres)) -+ return hres; -+ -+ IDispatch_AddRef(V_DISPATCH(res)); -+ -+ break; -+ } -+#endif - IDispatch_AddRef(ref.u.obj); - V_VT(res) = VT_DISPATCH; - V_DISPATCH(res) = ref.u.obj; -@@ -809,6 +833,34 @@ +@@ -810,6 +816,34 @@ return stack_push(ctx, &v); } @@ -1492,7 +1444,7 @@ static HRESULT assign_value(exec_ctx_t *ctx, VARIANT *dst, VARIANT *src, WORD flags) { VARIANT value; -@@ -1331,11 +1383,13 @@ +@@ -1328,11 +1362,13 @@ v = V_VARIANTREF(v); } @@ -1506,17 +1458,7 @@ hres = array_bounds_from_stack(ctx, dim_cnt, &bounds); if(FAILED(hres)) -@@ -1434,9 +1488,6 @@ - - TRACE("%s\n", debugstr_w(ident)); - -- if(V_VT(stack_top(ctx, 0)) == VT_EMPTY) -- return MAKE_VBSERROR(VBSE_FOR_LOOP_NOT_INITIALIZED); -- - V_VT(&zero) = VT_I2; - V_I2(&zero) = 0; - hres = VarCmp(stack_top(ctx, 0), &zero, ctx->script->lcid, 0); -@@ -1671,6 +1722,20 @@ +@@ -1663,6 +1699,20 @@ }else { named_item_t *item; disp = NULL; @@ -1537,7 +1479,7 @@ LIST_FOR_EACH_ENTRY(item, &ctx->script->named_items, named_item_t, entry) { if(!(item->flags & SCRIPTITEM_GLOBALMEMBERS)) continue; disp = item->disp; -@@ -1948,8 +2013,53 @@ +@@ -1940,8 +1990,53 @@ { TRACE("%s %s\n", debugstr_variant(l), debugstr_variant(r)); @@ -1591,14 +1533,14 @@ return VarCmp(l, r, ctx->script->lcid, 0); } -@@ -2378,6 +2488,11 @@ +@@ -2370,6 +2465,11 @@ HRESULT hres; TRACE("\n"); + +#ifdef __LIBWINEVBS__ + if(V_VT(stack_top(ctx, 0)) == VT_EMPTY) -+ return MAKE_VBSERROR(92); ++ return MAKE_VBSERROR(VBSE_FOR_LOOP_NOT_INITIALIZED); +#endif hres = lookup_identifier(ctx, ident, VBDISP_LET, &ref); @@ -1645,7 +1587,7 @@ void release_named_item(named_item_t*); --- wine/dlls/vbscript/vbscript_main.c +++ libwinevbs/dlls/vbscript/vbscript_main.c -@@ -39,7 +39,115 @@ +@@ -39,7 +39,124 @@ BSTR get_vbscript_string(int id) { WCHAR buf[512]; @@ -1668,6 +1610,9 @@ + case VBSE_ARRAY_LOCKED: + swprintf(buf, ARRAY_SIZE(buf), L"VBSE_ARRAY_LOCKED"); + break; ++ case VBSE_DIVISION_BY_ZERO: ++ swprintf(buf, ARRAY_SIZE(buf), L"VBSE_DIVISION_BY_ZERO"); ++ break; + case VBSE_TYPE_MISMATCH: + swprintf(buf, ARRAY_SIZE(buf), L"VBSE_TYPE_MISMATCH"); + break; @@ -1698,12 +1643,18 @@ + case VBSE_OBJECT_VARIABLE_NOT_SET: + swprintf(buf, ARRAY_SIZE(buf), L"VBSE_OBJECT_VARIABLE_NOT_SET"); + break; ++ case VBSE_FOR_LOOP_NOT_INITIALIZED: ++ swprintf(buf, ARRAY_SIZE(buf), L"VBSE_FOR_LOOP_NOT_INITIALIZED"); ++ break; + case VBSE_ILLEGAL_NULL_USE: + swprintf(buf, ARRAY_SIZE(buf), L"VBSE_ILLEGAL_NULL_USE"); + break; + case VBSE_CANT_CREATE_TMP_FILE: + swprintf(buf, ARRAY_SIZE(buf), L"VBSE_CANT_CREATE_TMP_FILE"); + break; ++ case VBSE_OBJECT_REQUIRED: ++ swprintf(buf, ARRAY_SIZE(buf), L"VBSE_OBJECT_REQUIRED"); ++ break; + case VBSE_CANT_CREATE_OBJECT: + swprintf(buf, ARRAY_SIZE(buf), L"VBSE_CANT_CREATE_OBJECT"); + break; @@ -1761,7 +1712,7 @@ return SysAllocString(buf); } -@@ -258,6 +366,7 @@ +@@ -258,6 +375,7 @@ /****************************************************************** * DllMain (vbscript.@) */ @@ -1769,7 +1720,7 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv) { TRACE("(%p %ld %p)\n", hInstDLL, fdwReason, lpv); -@@ -276,10 +385,12 @@ +@@ -276,10 +394,12 @@ return TRUE; } @@ -1782,44 +1733,39 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) { if(IsEqualGUID(&CLSID_VBScript, rclsid)) { -@@ -293,3 +404,4 @@ +@@ -293,3 +413,4 @@ FIXME("%s %s %p\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv); return CLASS_E_CLASSNOTAVAILABLE; } +#endif --- wine/dlls/vbscript/parser.y +++ libwinevbs/dlls/vbscript/parser.y -@@ -755,11 +755,22 @@ - if(!arguments) +@@ -773,9 +773,19 @@ return call_expr; -+#ifndef __LIBWINEVBS__ if(arguments->type != EXPR_NOARG) { ++#ifdef __LIBWINEVBS__ FIXME("Invalid syntax: missing comma\n"); ctx->hres = E_FAIL; return NULL; - } +#else -+ if(arguments->type != EXPR_NOARG) { ++ /* 'f (x) + expr, ...' — combine bracketed arg with the +/- expression. */ + expression_t *remaining = arguments->next; + call_expr->args = new_binary_expression(ctx, EXPR_ADD, call_expr->args, arguments); + if(!call_expr->args) + return NULL; + call_expr->args->next = remaining; + return call_expr; -+ } +#endif + } call_expr->args->next = arguments->next; - return call_expr; -@@ -1225,6 +1236,10 @@ +@@ -1242,6 +1252,8 @@ ctx->hres = S_OK; ctx->error_loc = -1; ctx->last_token = tNL; -+#ifdef __LIBWINEVBS__ + ctx->is_statement_ctx = TRUE; + ctx->paren_depth = 0; -+#endif ctx->last_nl = 0; ctx->stats = ctx->stats_tail = NULL; ctx->class_decls = NULL; @@ -2502,7 +2448,7 @@ } static HRESULT Global_TypeName(BuiltinDisp *This, VARIANT *arg, unsigned args_cnt, VARIANT *res) -@@ -3075,6 +3373,7 @@ +@@ -3085,6 +3383,7 @@ static HRESULT Global_FormatNumber(BuiltinDisp *This, VARIANT *args, unsigned args_cnt, VARIANT *res) { @@ -2510,7 +2456,7 @@ union { struct -@@ -3103,8 +3402,90 @@ +@@ -3113,8 +3412,90 @@ if (FAILED(hres)) return hres; return return_bstr(res, str); @@ -2601,7 +2547,7 @@ static HRESULT Global_FormatCurrency(BuiltinDisp *This, VARIANT *args, unsigned args_cnt, VARIANT *res) { union -@@ -3323,26 +3704,145 @@ +@@ -3333,26 +3714,145 @@ static HRESULT Global_Eval(BuiltinDisp *This, VARIANT *arg, unsigned args_cnt, VARIANT *res) {