winehq.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2025
February
January
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
January
2004
December
November
October
September
August
July
June
May
April
March
February
January
2003
December
November
October
September
August
July
June
May
April
March
February
January
2002
December
November
October
September
August
July
June
May
April
March
February
January
2001
December
November
October
September
August
July
June
May
April
March
February
List overview
wine-commits
March 2020
----- 2025 -----
February 2025
January 2025
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
January 2004
----- 2003 -----
December 2003
November 2003
October 2003
September 2003
August 2003
July 2003
June 2003
May 2003
April 2003
March 2003
February 2003
January 2003
----- 2002 -----
December 2002
November 2002
October 2002
September 2002
August 2002
July 2002
June 2002
May 2002
April 2002
March 2002
February 2002
January 2002
----- 2001 -----
December 2001
November 2001
October 2001
September 2001
August 2001
July 2001
June 2001
May 2001
April 2001
March 2001
February 2001
wine-commits@winehq.org
1 participants
996 discussions
Start a n
N
ew thread
Piotr Caban : msvcrt: Optimize _strnicmp_l implementation.
by Alexandre Julliard
09 Mar '20
09 Mar '20
Module: wine Branch: master Commit: 471425c16d66af6421a43c2ea8b54bbc2dccc0be URL:
https://source.winehq.org/git/wine.git/?a=commit;h=471425c16d66af6421a43c2e…
Author: Piotr Caban <piotr(a)codeweavers.com> Date: Mon Mar 9 13:54:29 2020 +0100 msvcrt: Optimize _strnicmp_l implementation. Wine-Bug:
https://bugs.winehq.org/show_bug.cgi?id=48723
Signed-off-by: Piotr Caban <piotr(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/msvcrt/string.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/dlls/msvcrt/string.c b/dlls/msvcrt/string.c index e091ef5f46..8183feacc0 100644 --- a/dlls/msvcrt/string.c +++ b/dlls/msvcrt/string.c @@ -2310,6 +2310,7 @@ int __cdecl MSVCRT_strncmp(const char *str1, const char *str2, MSVCRT_size_t len int __cdecl MSVCRT__strnicmp_l(const char *s1, const char *s2, MSVCRT_size_t count, MSVCRT__locale_t locale) { + MSVCRT_pthreadlocinfo locinfo; int c1, c2; if(s1==NULL || s2==NULL) @@ -2318,9 +2319,26 @@ int __cdecl MSVCRT__strnicmp_l(const char *s1, const char *s2, if(!count) return 0; + if(!locale) + locinfo = get_locinfo(); + else + locinfo = locale->locinfo; + + if(!locinfo->lc_handle[MSVCRT_LC_CTYPE]) + { + do { + if ((c1 = *s1++) >= 'A' && c1 <= 'Z') + c1 -= 'A' - 'a'; + if ((c2 = *s2++) >= 'A' && c2 <= 'Z') + c2 -= 'A' - 'a'; + }while(--count && c1 && c1==c2); + + return c1-c2; + } + do { - c1 = MSVCRT__tolower_l(*s1++, locale); - c2 = MSVCRT__tolower_l(*s2++, locale); + c1 = MSVCRT__tolower_l((unsigned char)*s1++, locale); + c2 = MSVCRT__tolower_l((unsigned char)*s2++, locale); }while(--count && c1 && c1==c2); return c1-c2;
1
0
0
0
Gabriel Ivăncescu : jscript/tests: Add test for function constructor in named item context.
by Alexandre Julliard
09 Mar '20
09 Mar '20
Module: wine Branch: master Commit: b526077189c3b7295bc6140d6250371db9c0ab10 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=b526077189c3b7295bc6140d…
Author: Gabriel Ivăncescu <gabrielopcode(a)gmail.com> Date: Sat Mar 7 15:40:38 2020 +0200 jscript/tests: Add test for function constructor in named item context. Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com> Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/jscript/tests/jscript.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/dlls/jscript/tests/jscript.c b/dlls/jscript/tests/jscript.c index be1320fa62..5de933e935 100644 --- a/dlls/jscript/tests/jscript.c +++ b/dlls/jscript/tests/jscript.c @@ -1129,13 +1129,15 @@ static void test_named_items(void) static const WCHAR *context_idents[] = { L"testFunc", - L"testVar" + L"testVar", + L"testFuncConstr" }; static const WCHAR *context_code_test[] = { L"testFunc();", L"if(testVar != 42) throw new Error();", - L"if(Math.abs(-testVar) != 42) throw new Error();" + L"if(Math.abs(-testVar) != 42) throw new Error();", + L"if(testFuncConstr() != testVar) throw new Error();" }; IDispatchEx *dispex, *dispex2; IActiveScriptParse *parse; @@ -1302,7 +1304,8 @@ static void test_named_items(void) SET_EXPECT(GetIDsOfNames); hr = IActiveScriptParse_ParseScriptText(parse, L"" "var testVar = 42;\n" - "testVar_global = 5;\n", + "testVar_global = 5;\n" + "var testFuncConstr = new Function(\"return testVar;\");\n", L"codeOnlyItem", NULL, NULL, 0, 0, SCRIPTTEXT_ISPERSISTENT, NULL, NULL); ok(hr == S_OK, "ParseScriptText failed: %08x\n", hr); CHECK_CALLED(OnEnterScript);
1
0
0
0
Gabriel Ivăncescu : jscript: Retrieve the proper script dispatch from the named item in GetScriptDispatch.
by Alexandre Julliard
09 Mar '20
09 Mar '20
Module: wine Branch: master Commit: 335e0073c58ef2453dbd817e3ba08c4c2e18da63 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=335e0073c58ef2453dbd817e…
Author: Gabriel Ivăncescu <gabrielopcode(a)gmail.com> Date: Sat Mar 7 15:40:33 2020 +0200 jscript: Retrieve the proper script dispatch from the named item in GetScriptDispatch. Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com> Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/jscript/jscript.c | 10 +++++++++- dlls/jscript/tests/jscript.c | 5 +++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/dlls/jscript/jscript.c b/dlls/jscript/jscript.c index 6281b20548..aabad7ef8b 100644 --- a/dlls/jscript/jscript.c +++ b/dlls/jscript/jscript.c @@ -883,6 +883,7 @@ static HRESULT WINAPI JScript_GetScriptDispatch(IActiveScript *iface, LPCOLESTR IDispatch **ppdisp) { JScript *This = impl_from_IActiveScript(iface); + jsdisp_t *script_obj; TRACE("(%p)->(%s %p)\n", This, debugstr_w(pstrItemName), ppdisp); @@ -894,7 +895,14 @@ static HRESULT WINAPI JScript_GetScriptDispatch(IActiveScript *iface, LPCOLESTR return E_UNEXPECTED; } - *ppdisp = to_disp(This->ctx->global); + script_obj = This->ctx->global; + if(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; + } + + *ppdisp = to_disp(script_obj); IDispatch_AddRef(*ppdisp); return S_OK; } diff --git a/dlls/jscript/tests/jscript.c b/dlls/jscript/tests/jscript.c index 56b8cffb21..be1320fa62 100644 --- a/dlls/jscript/tests/jscript.c +++ b/dlls/jscript/tests/jscript.c @@ -1183,6 +1183,11 @@ static void test_named_items(void) ok(visible_named_item_ref == 0, "visible_named_item_ref = %u\n", visible_named_item_ref); ok(visible_code_named_item_ref == 0, "visible_code_named_item_ref = %u\n", visible_code_named_item_ref); + hr = IActiveScript_GetScriptDispatch(script, L"noContext", &disp); + ok(hr == E_INVALIDARG, "GetScriptDispatch returned: %08x\n", hr); + hr = IActiveScript_GetScriptDispatch(script, L"codeONLYItem", &disp); + ok(hr == E_INVALIDARG, "GetScriptDispatch returned: %08x\n", hr); + SET_EXPECT(GetItemInfo_global_code); hr = IActiveScript_AddNamedItem(script, L"globalCodeItem", SCRIPTITEM_GLOBALMEMBERS | SCRIPTITEM_CODEONLY); ok(hr == S_OK, "AddNamedItem failed: %08x\n", hr);
1
0
0
0
Gabriel Ivăncescu : jscript: Add stub implementation of separate script dispatches for named items.
by Alexandre Julliard
09 Mar '20
09 Mar '20
Module: wine Branch: master Commit: c2a5aa7d3791f867fb0e833dc3f43e3d6638dd3d URL:
https://source.winehq.org/git/wine.git/?a=commit;h=c2a5aa7d3791f867fb0e833d…
Author: Gabriel Ivăncescu <gabrielopcode(a)gmail.com> Date: Sat Mar 7 15:40:32 2020 +0200 jscript: Add stub implementation of separate script dispatches for named items. Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com> Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/jscript/engine.c | 7 +++++++ dlls/jscript/jscript.c | 34 ++++++++++++++++++++++++++++++++++ dlls/jscript/jscript.h | 2 ++ 3 files changed, 43 insertions(+) diff --git a/dlls/jscript/engine.c b/dlls/jscript/engine.c index ce7fbbc572..5b9689505c 100644 --- a/dlls/jscript/engine.c +++ b/dlls/jscript/engine.c @@ -2990,6 +2990,13 @@ HRESULT exec_source(script_ctx_t *ctx, DWORD flags, bytecode_t *bytecode, functi unsigned i; HRESULT hres; + if(bytecode->named_item) { + if(!bytecode->named_item->script_obj) { + hres = create_named_item_script_obj(ctx, bytecode->named_item); + if(FAILED(hres)) return hres; + } + } + if(!ctx->ei->enter_notified) { ctx->ei->enter_notified = TRUE; IActiveScriptSite_OnEnterScript(ctx->site); diff --git a/dlls/jscript/jscript.c b/dlls/jscript/jscript.c index 694ea8b71a..6281b20548 100644 --- a/dlls/jscript/jscript.c +++ b/dlls/jscript/jscript.c @@ -108,6 +108,22 @@ static inline BOOL is_started(script_ctx_t *ctx) || ctx->state == SCRIPTSTATE_DISCONNECTED; } +HRESULT create_named_item_script_obj(script_ctx_t *ctx, named_item_t *item) +{ + /* FIXME: Create a separate script dispatch instead of using the global */ + item->script_obj = ctx->global; + IDispatchEx_AddRef(&item->script_obj->IDispatchEx_iface); + return S_OK; +} + +static void release_named_item_script_obj(named_item_t *item) +{ + if(!item->script_obj) return; + + jsdisp_release(item->script_obj); + item->script_obj = NULL; +} + named_item_t *lookup_named_item(script_ctx_t *ctx, const WCHAR *item_name, unsigned flags) { named_item_t *item; @@ -115,6 +131,10 @@ named_item_t *lookup_named_item(script_ctx_t *ctx, const WCHAR *item_name, unsig LIST_FOR_EACH_ENTRY(item, &ctx->named_items, named_item_t, entry) { if((item->flags & flags) == flags && !wcscmp(item->name, item_name)) { + if(!item->script_obj && !(item->flags & SCRIPTITEM_GLOBALMEMBERS)) { + hr = create_named_item_script_obj(ctx, item); + if(FAILED(hr)) return NULL; + } if(!item->disp && (flags || !(item->flags & SCRIPTITEM_CODEONLY))) { IUnknown *unk; @@ -371,6 +391,15 @@ static void clear_persistent_code_list(JScript *This) } } +static void release_persistent_script_objs(JScript *This) +{ + bytecode_t *iter; + + LIST_FOR_EACH_ENTRY(iter, &This->persistent_code, bytecode_t, entry) + if(iter->named_item) + release_named_item_script_obj(iter->named_item); +} + static void exec_queued_code(JScript *This) { bytecode_t *iter; @@ -408,6 +437,7 @@ static void decrease_state(JScript *This, SCRIPTSTATE state) /* FALLTHROUGH */ case SCRIPTSTATE_INITIALIZED: clear_script_queue(This); + release_persistent_script_objs(This); while(!list_empty(&This->ctx->named_items)) { named_item_t *iter = LIST_ENTRY(list_head(&This->ctx->named_items), named_item_t, entry); @@ -415,6 +445,7 @@ static void decrease_state(JScript *This, SCRIPTSTATE state) list_remove(&iter->entry); if(iter->disp) IDispatch_Release(iter->disp); + release_named_item_script_obj(iter); release_named_item(iter); } @@ -827,6 +858,7 @@ static HRESULT WINAPI JScript_AddNamedItem(IActiveScript *iface, item->ref = 1; item->disp = disp; item->flags = dwFlags; + item->script_obj = NULL; item->name = heap_strdupW(pstrName); if(!item->name) { if(disp) @@ -1001,6 +1033,7 @@ static HRESULT WINAPI JScriptParse_ParseScriptText(IActiveScriptParse *iface, WARN("Unknown context %s\n", debugstr_w(pstrItemName)); return E_INVALIDARG; } + if(!item->script_obj) item = NULL; } enter_script(This->ctx, &ei); @@ -1103,6 +1136,7 @@ static HRESULT WINAPI JScriptParseProcedure_ParseProcedureText(IActiveScriptPars WARN("Unknown context %s\n", debugstr_w(pstrItemName)); return E_INVALIDARG; } + if(!item->script_obj) item = NULL; } enter_script(This->ctx, &ei); diff --git a/dlls/jscript/jscript.h b/dlls/jscript/jscript.h index f9d6992704..804f95eff0 100644 --- a/dlls/jscript/jscript.h +++ b/dlls/jscript/jscript.h @@ -205,6 +205,7 @@ typedef HRESULT (*builtin_setter_t)(script_ctx_t*,jsdisp_t*,jsval_t); HRESULT builtin_set_const(script_ctx_t*,jsdisp_t*,jsval_t) DECLSPEC_HIDDEN; typedef struct named_item_t { + jsdisp_t *script_obj; IDispatch *disp; unsigned ref; DWORD flags; @@ -213,6 +214,7 @@ typedef struct named_item_t { struct list entry; } named_item_t; +HRESULT create_named_item_script_obj(script_ctx_t*,named_item_t*) DECLSPEC_HIDDEN; named_item_t *lookup_named_item(script_ctx_t*,const WCHAR*,unsigned) DECLSPEC_HIDDEN; void release_named_item(named_item_t*) DECLSPEC_HIDDEN;
1
0
0
0
Gabriel Ivăncescu : jscript: Lookup the named item and keep a ref to it from the associated bytecode.
by Alexandre Julliard
09 Mar '20
09 Mar '20
Module: wine Branch: master Commit: f6201b4b119383d7e97ec3d412a2df0540734dfb URL:
https://source.winehq.org/git/wine.git/?a=commit;h=f6201b4b119383d7e97ec3d4…
Author: Gabriel Ivăncescu <gabrielopcode(a)gmail.com> Date: Sat Mar 7 15:40:31 2020 +0200 jscript: Lookup the named item and keep a ref to it from the associated bytecode. Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com> Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/jscript/compile.c | 10 +++++++++- dlls/jscript/engine.h | 3 ++- dlls/jscript/function.c | 3 ++- dlls/jscript/global.c | 2 +- dlls/jscript/jscript.c | 22 ++++++++++++++++++++-- dlls/jscript/tests/jscript.c | 3 +++ 6 files changed, 37 insertions(+), 6 deletions(-) diff --git a/dlls/jscript/compile.c b/dlls/jscript/compile.c index 61db10cd41..5ac93c9f2f 100644 --- a/dlls/jscript/compile.c +++ b/dlls/jscript/compile.c @@ -2250,6 +2250,8 @@ void release_bytecode(bytecode_t *code) for(i=0; i < code->str_cnt; i++) jsstr_release(code->str_pool[i]); + if(code->named_item) + release_named_item(code->named_item); heap_free(code->source); heap_pool_free(&code->heap); heap_free(code->bstr_pool); @@ -2485,7 +2487,8 @@ static HRESULT compile_arguments(compiler_ctx_t *ctx, const WCHAR *args) } HRESULT compile_script(script_ctx_t *ctx, const WCHAR *code, UINT64 source_context, unsigned start_line, - const WCHAR *args, const WCHAR *delimiter, BOOL from_eval, BOOL use_decode, bytecode_t **ret) + const WCHAR *args, const WCHAR *delimiter, BOOL from_eval, BOOL use_decode, + named_item_t *named_item, bytecode_t **ret) { compiler_ctx_t compiler = {0}; HRESULT hres; @@ -2526,6 +2529,11 @@ HRESULT compile_script(script_ctx_t *ctx, const WCHAR *code, UINT64 source_conte return DISP_E_EXCEPTION; } + if(named_item) { + compiler.code->named_item = named_item; + named_item->ref++; + } + *ret = compiler.code; return S_OK; } diff --git a/dlls/jscript/engine.h b/dlls/jscript/engine.h index 7be98c51db..fe6b2a06d0 100644 --- a/dlls/jscript/engine.h +++ b/dlls/jscript/engine.h @@ -181,6 +181,7 @@ struct _bytecode_t { heap_pool_t heap; function_code_t global_code; + named_item_t *named_item; WCHAR *source; UINT64 source_context; @@ -197,7 +198,7 @@ struct _bytecode_t { struct list entry; }; -HRESULT compile_script(script_ctx_t*,const WCHAR*,UINT64,unsigned,const WCHAR*,const WCHAR*,BOOL,BOOL,bytecode_t**) DECLSPEC_HIDDEN; +HRESULT compile_script(script_ctx_t*,const WCHAR*,UINT64,unsigned,const WCHAR*,const WCHAR*,BOOL,BOOL,named_item_t*,bytecode_t**) DECLSPEC_HIDDEN; void release_bytecode(bytecode_t*) DECLSPEC_HIDDEN; static inline bytecode_t *bytecode_addref(bytecode_t *code) diff --git a/dlls/jscript/function.c b/dlls/jscript/function.c index ef0de960ff..007aec0370 100644 --- a/dlls/jscript/function.c +++ b/dlls/jscript/function.c @@ -982,7 +982,8 @@ static HRESULT construct_function(script_ctx_t *ctx, unsigned argc, jsval_t *arg if(FAILED(hres)) return hres; - hres = compile_script(ctx, str, 0, 0, NULL, NULL, FALSE, FALSE, &code); + hres = compile_script(ctx, str, 0, 0, NULL, NULL, FALSE, FALSE, + ctx->call_ctx ? ctx->call_ctx->bytecode->named_item : NULL, &code); heap_free(str); if(FAILED(hres)) return hres; diff --git a/dlls/jscript/global.c b/dlls/jscript/global.c index e2758bfc66..2a1dcb2b84 100644 --- a/dlls/jscript/global.c +++ b/dlls/jscript/global.c @@ -204,7 +204,7 @@ HRESULT JSGlobal_eval(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned a return E_OUTOFMEMORY; TRACE("parsing %s\n", debugstr_jsval(argv[0])); - hres = compile_script(ctx, src, 0, 0, NULL, NULL, TRUE, FALSE, &code); + hres = compile_script(ctx, src, 0, 0, NULL, NULL, TRUE, FALSE, frame ? frame->bytecode->named_item : NULL, &code); if(FAILED(hres)) { WARN("parse (%s) failed: %08x\n", debugstr_jsval(argv[0]), hres); return hres; diff --git a/dlls/jscript/jscript.c b/dlls/jscript/jscript.c index 36d9f84d32..694ea8b71a 100644 --- a/dlls/jscript/jscript.c +++ b/dlls/jscript/jscript.c @@ -983,6 +983,7 @@ static HRESULT WINAPI JScriptParse_ParseScriptText(IActiveScriptParse *iface, DWORD dwFlags, VARIANT *pvarResult, EXCEPINFO *pexcepinfo) { JScript *This = impl_from_IActiveScriptParse(iface); + named_item_t *item = NULL; bytecode_t *code; jsexcept_t ei; HRESULT hres; @@ -994,9 +995,17 @@ static HRESULT WINAPI JScriptParse_ParseScriptText(IActiveScriptParse *iface, if(This->thread_id != GetCurrentThreadId() || This->ctx->state == SCRIPTSTATE_CLOSED) return E_UNEXPECTED; + if(pstrItemName) { + item = lookup_named_item(This->ctx, pstrItemName, 0); + if(!item) { + WARN("Unknown context %s\n", debugstr_w(pstrItemName)); + return E_INVALIDARG; + } + } + enter_script(This->ctx, &ei); hres = compile_script(This->ctx, pstrCode, dwSourceContextCookie, ulStartingLine, NULL, pstrDelimiter, - (dwFlags & SCRIPTTEXT_ISEXPRESSION) != 0, This->is_encode, &code); + (dwFlags & SCRIPTTEXT_ISEXPRESSION) != 0, This->is_encode, item, &code); if(FAILED(hres)) return leave_script(This->ctx, hres); @@ -1075,6 +1084,7 @@ static HRESULT WINAPI JScriptParseProcedure_ParseProcedureText(IActiveScriptPars CTXARG_T dwSourceContextCookie, ULONG ulStartingLineNumber, DWORD dwFlags, IDispatch **ppdisp) { JScript *This = impl_from_IActiveScriptParseProcedure2(iface); + named_item_t *item = NULL; bytecode_t *code; jsdisp_t *dispex; jsexcept_t ei; @@ -1087,9 +1097,17 @@ static HRESULT WINAPI JScriptParseProcedure_ParseProcedureText(IActiveScriptPars if(This->thread_id != GetCurrentThreadId() || This->ctx->state == SCRIPTSTATE_CLOSED) return E_UNEXPECTED; + if(pstrItemName) { + item = lookup_named_item(This->ctx, pstrItemName, 0); + if(!item) { + WARN("Unknown context %s\n", debugstr_w(pstrItemName)); + return E_INVALIDARG; + } + } + enter_script(This->ctx, &ei); hres = compile_script(This->ctx, pstrCode, dwSourceContextCookie, ulStartingLineNumber, pstrFormalParams, - pstrDelimiter, FALSE, This->is_encode, &code); + pstrDelimiter, FALSE, This->is_encode, item, &code); if(SUCCEEDED(hres)) hres = create_source_function(This->ctx, code, &code->global_code, NULL, &dispex); release_bytecode(code); diff --git a/dlls/jscript/tests/jscript.c b/dlls/jscript/tests/jscript.c index 8d4f6e1673..56b8cffb21 100644 --- a/dlls/jscript/tests/jscript.c +++ b/dlls/jscript/tests/jscript.c @@ -1267,6 +1267,9 @@ static void test_named_items(void) parse_script(parse, L"visibleItem.testCall();"); CHECK_CALLED(testCall); + hr = IActiveScriptParse_ParseScriptText(parse, L"function testFunc() { }", L"CodeOnlyItem", NULL, NULL, 0, 0, 0, NULL, NULL); + ok(hr == E_INVALIDARG, "ParseScriptText returned: %08x\n", hr); + SET_EXPECT(OnEnterScript); SET_EXPECT(GetIDsOfNames); SET_EXPECT(OnLeaveScript);
1
0
0
0
Dmitry Timoshkov : wbemdisp: Use pointer moniker instead of custom moniker implementation.
by Alexandre Julliard
09 Mar '20
09 Mar '20
Module: wine Branch: master Commit: 05dd8212388e395b95c2f84583742bc79daeca63 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=05dd8212388e395b95c2f845…
Author: Dmitry Timoshkov <dmitry(a)baikal.ru> Date: Mon Mar 9 10:58:37 2020 +0800 wbemdisp: Use pointer moniker instead of custom moniker implementation. Signed-off-by: Dmitry Timoshkov <dmitry(a)baikal.ru> Signed-off-by: Hans Leidekker <hans(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/wbemdisp/main.c | 246 +---------------------------------------- dlls/wbemdisp/tests/wbemdisp.c | 15 +++ 2 files changed, 17 insertions(+), 244 deletions(-) diff --git a/dlls/wbemdisp/main.c b/dlls/wbemdisp/main.c index b921e490fa..b3ee4de30c 100644 --- a/dlls/wbemdisp/main.c +++ b/dlls/wbemdisp/main.c @@ -36,248 +36,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(wbemdisp); static HINSTANCE instance; -struct moniker -{ - IMoniker IMoniker_iface; - LONG refs; - IUnknown *obj; -}; - -static inline struct moniker *impl_from_IMoniker( - IMoniker *iface ) -{ - return CONTAINING_RECORD( iface, struct moniker, IMoniker_iface ); -} - -static ULONG WINAPI moniker_AddRef( - IMoniker *iface ) -{ - struct moniker *moniker = impl_from_IMoniker( iface ); - return InterlockedIncrement( &moniker->refs ); -} - -static ULONG WINAPI moniker_Release( - IMoniker *iface ) -{ - struct moniker *moniker = impl_from_IMoniker( iface ); - LONG refs = InterlockedDecrement( &moniker->refs ); - if (!refs) - { - TRACE( "destroying %p\n", moniker ); - IUnknown_Release( moniker->obj ); - heap_free( moniker ); - } - return refs; -} - -static HRESULT WINAPI moniker_QueryInterface( - IMoniker *iface, REFIID riid, void **ppvObject ) -{ - struct moniker *moniker = impl_from_IMoniker( iface ); - - TRACE( "%p, %s, %p\n", moniker, debugstr_guid( riid ), ppvObject ); - - if (IsEqualGUID( riid, &IID_IMoniker ) || - IsEqualGUID( riid, &IID_IUnknown )) - { - *ppvObject = iface; - } - else - { - FIXME( "interface %s not implemented\n", debugstr_guid(riid) ); - return E_NOINTERFACE; - } - IMoniker_AddRef( iface ); - return S_OK; -} - -static HRESULT WINAPI moniker_GetClassID( - IMoniker *iface, CLSID *pClassID ) -{ - FIXME( "\n" ); - return E_NOTIMPL; -} - -static HRESULT WINAPI moniker_IsDirty( - IMoniker *iface ) -{ - FIXME( "\n" ); - return E_NOTIMPL; -} - -static HRESULT WINAPI moniker_Load( - IMoniker *iface, IStream *pStm ) -{ - FIXME( "\n" ); - return E_NOTIMPL; -} - -static HRESULT WINAPI moniker_Save( - IMoniker *iface, IStream *pStm, BOOL fClearDirty ) -{ - FIXME( "\n" ); - return E_NOTIMPL; -} - -static HRESULT WINAPI moniker_GetSizeMax( - IMoniker *iface, ULARGE_INTEGER *pcbSize ) -{ - FIXME( "\n" ); - return E_NOTIMPL; -} - -static HRESULT WINAPI moniker_BindToObject( - IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, REFIID riidResult, void **ppvResult ) -{ - struct moniker *moniker = impl_from_IMoniker( iface ); - - TRACE( "%p, %p, %p, %s, %p\n", iface, pbc, pmkToLeft, debugstr_guid(riidResult), ppvResult ); - return IUnknown_QueryInterface( moniker->obj, riidResult, ppvResult ); -} - -static HRESULT WINAPI moniker_BindToStorage( - IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, REFIID riid, void **ppvObj ) -{ - FIXME( "\n" ); - return E_NOTIMPL; -} - -static HRESULT WINAPI moniker_Reduce( - IMoniker *iface, IBindCtx *pbc, DWORD dwReduceHowFar, IMoniker **ppmkToLeft, IMoniker **ppmkReduced ) -{ - FIXME( "\n" ); - return E_NOTIMPL; -} - -static HRESULT WINAPI moniker_ComposeWith( - IMoniker *iface, IMoniker *pmkRight, BOOL fOnlyIfNotGeneric, IMoniker **ppmkComposite ) -{ - FIXME( "\n" ); - return E_NOTIMPL; -} - -static HRESULT WINAPI moniker_Enum( - IMoniker *iface, BOOL fForward, IEnumMoniker **ppenumMoniker ) -{ - FIXME( "\n" ); - return E_NOTIMPL; -} - -static HRESULT WINAPI moniker_IsEqual( - IMoniker *iface, IMoniker *pmkOtherMoniker ) -{ - FIXME( "\n" ); - return E_NOTIMPL; -} - -static HRESULT WINAPI moniker_Hash( - IMoniker *iface, DWORD *pdwHash ) -{ - FIXME( "\n" ); - return E_NOTIMPL; -} - -static HRESULT WINAPI moniker_IsRunning( - IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, IMoniker *pmkNewlyRunning ) -{ - FIXME( "\n" ); - return E_NOTIMPL; -} - -static HRESULT WINAPI moniker_GetTimeOfLastChange( - IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, FILETIME *pFileTime ) -{ - FIXME( "\n" ); - return E_NOTIMPL; -} - -static HRESULT WINAPI moniker_Inverse( - IMoniker *iface, IMoniker **ppmk ) -{ - FIXME( "\n" ); - return E_NOTIMPL; -} - -static HRESULT WINAPI moniker_CommonPrefixWith( - IMoniker *iface, IMoniker *pmkOther, IMoniker **ppmkPrefix ) -{ - FIXME( "\n" ); - return E_NOTIMPL; -} - -static HRESULT WINAPI moniker_RelativePathTo( - IMoniker *iface, IMoniker *pmkOther, IMoniker **ppmkRelPath ) -{ - FIXME( "\n" ); - return E_NOTIMPL; -} - -static HRESULT WINAPI moniker_GetDisplayName( - IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, LPOLESTR *ppszDisplayName ) -{ - FIXME( "\n" ); - return E_NOTIMPL; -} - -static HRESULT WINAPI moniker_ParseDisplayName( - IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, LPOLESTR pszDisplayName, ULONG *pchEaten, - IMoniker **ppmkOut ) -{ - FIXME( "\n" ); - return E_NOTIMPL; -} - -static HRESULT WINAPI moniker_IsSystemMoniker( - IMoniker *iface, DWORD *pdwMksys ) -{ - FIXME( "\n" ); - return E_NOTIMPL; -} - -static const IMonikerVtbl moniker_vtbl = -{ - moniker_QueryInterface, - moniker_AddRef, - moniker_Release, - moniker_GetClassID, - moniker_IsDirty, - moniker_Load, - moniker_Save, - moniker_GetSizeMax, - moniker_BindToObject, - moniker_BindToStorage, - moniker_Reduce, - moniker_ComposeWith, - moniker_Enum, - moniker_IsEqual, - moniker_Hash, - moniker_IsRunning, - moniker_GetTimeOfLastChange, - moniker_Inverse, - moniker_CommonPrefixWith, - moniker_RelativePathTo, - moniker_GetDisplayName, - moniker_ParseDisplayName, - moniker_IsSystemMoniker -}; - -static HRESULT Moniker_create( IUnknown *unk, IMoniker **obj ) -{ - struct moniker *moniker; - - TRACE( "%p, %p\n", unk, obj ); - - if (!(moniker = heap_alloc( sizeof(*moniker) ))) return E_OUTOFMEMORY; - moniker->IMoniker_iface.lpVtbl = &moniker_vtbl; - moniker->refs = 1; - moniker->obj = unk; - IUnknown_AddRef( moniker->obj ); - - *obj = &moniker->IMoniker_iface; - TRACE( "returning iface %p\n", *obj ); - return S_OK; -} - static HRESULT WINAPI WinMGMTS_QueryInterface(IParseDisplayName *iface, REFIID riid, void **ppv) { if(IsEqualGUID(riid, &IID_IUnknown)) { @@ -401,12 +159,12 @@ static HRESULT WINAPI WinMGMTS_ParseDisplayName(IParseDisplayName *iface, IBindC hr = ISWbemLocator_ConnectServer( locator, server, namespace, NULL, NULL, NULL, NULL, 0, NULL, &services ); if (hr != S_OK) goto done; - if (!relative || !*relative) Moniker_create( (IUnknown *)services, ppmkOut ); + if (!relative || !*relative) CreatePointerMoniker( (IUnknown *)services, ppmkOut ); else { hr = ISWbemServices_Get( services, relative, 0, NULL, &obj ); if (hr != S_OK) goto done; - hr = Moniker_create( (IUnknown *)obj, ppmkOut ); + hr = CreatePointerMoniker( (IUnknown *)obj, ppmkOut ); } done: diff --git a/dlls/wbemdisp/tests/wbemdisp.c b/dlls/wbemdisp/tests/wbemdisp.c index 57baf848cc..2bca6f9da6 100644 --- a/dlls/wbemdisp/tests/wbemdisp.c +++ b/dlls/wbemdisp/tests/wbemdisp.c @@ -28,6 +28,7 @@ DEFINE_GUID(CLSID_WINMGMTS,0x172bddf8,0xceea,0x11d1,0x8b,0x05,0x00,0x60,0x08,0x06,0xd9,0xb6); DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0); +DEFINE_OLEGUID(CLSID_PointerMoniker,0x306,0,0); static const LCID english = MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT); @@ -73,6 +74,7 @@ static void test_ParseDisplayName(void) BSTR str; ULONG i, eaten, count; HRESULT hr; + CLSID clsid; hr = CoCreateInstance( &CLSID_WINMGMTS, NULL, CLSCTX_INPROC_SERVER, &IID_IParseDisplayName, (void **)&displayname ); if (hr != S_OK) @@ -95,6 +97,10 @@ static void test_ParseDisplayName(void) ok( eaten == tests[i].eaten, "%u: got %u\n", i, eaten ); if (moniker) { + hr = IMoniker_GetClassID( moniker, &clsid ); + ok( hr == S_OK, "%u: got %x\n", i, hr ); + ok( IsEqualCLSID( &clsid, &CLSID_PointerMoniker ), "%u: got %s\n", i, wine_dbgstr_guid( &clsid ) ); + obj = NULL; hr = IMoniker_BindToObject( moniker, ctx, NULL, tests[i].iid, (void **)&obj ); ok( hr == S_OK, "%u: got %x\n", i, hr ); @@ -114,6 +120,10 @@ static void test_ParseDisplayName(void) { ISWbemServices *services = NULL; + hr = IMoniker_GetClassID( moniker, &clsid ); + ok( hr == S_OK, "%u: got %x\n", i, hr ); + ok( IsEqualCLSID( &clsid, &CLSID_PointerMoniker ), "got %s\n", wine_dbgstr_guid( &clsid ) ); + hr = IMoniker_BindToObject( moniker, ctx, NULL, &IID_IUnknown, (void **)&services ); ok( hr == S_OK, "got %x\n", hr ); if (services) @@ -259,6 +269,11 @@ static void test_ParseDisplayName(void) if (moniker) { ISWbemObject *sobj = NULL; + + hr = IMoniker_GetClassID( moniker, &clsid ); + ok( hr == S_OK, "%u: got %x\n", i, hr ); + ok( IsEqualCLSID( &clsid, &CLSID_PointerMoniker ), "got %s\n", wine_dbgstr_guid( &clsid ) ); + hr = IMoniker_BindToObject( moniker, ctx, NULL, &IID_ISWbemObject, (void **)&sobj ); ok( hr == S_OK, "got %x\n",hr ); if (sobj)
1
0
0
0
Dmitry Timoshkov : dnsapi/tests: Also test the "_ldap._tcp.deadbeef" query.
by Alexandre Julliard
09 Mar '20
09 Mar '20
Module: wine Branch: master Commit: 2cefc54fed4da224acfd18a0026ac2ed59fe4736 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=2cefc54fed4da224acfd18a0…
Author: Dmitry Timoshkov <dmitry(a)baikal.ru> Date: Mon Mar 9 10:58:27 2020 +0800 dnsapi/tests: Also test the "_ldap._tcp.deadbeef" query. Signed-off-by: Dmitry Timoshkov <dmitry(a)baikal.ru> Signed-off-by: Hans Leidekker <hans(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/dnsapi/tests/query.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/dlls/dnsapi/tests/query.c b/dlls/dnsapi/tests/query.c index 5ec5181bd0..237dfd6ae7 100644 --- a/dlls/dnsapi/tests/query.c +++ b/dlls/dnsapi/tests/query.c @@ -38,10 +38,13 @@ static void test_DnsQuery(void) DNS_RECORDW *rec; DNS_STATUS status; - wcscpy(domain, L"_ldap._tcp.deadbeef"); status = DnsQuery_W(L"", DNS_TYPE_SRV, DNS_QUERY_STANDARD, NULL, &rec, NULL); ok(status == DNS_ERROR_RCODE_NAME_ERROR || status == DNS_INFO_NO_RECORDS || status == ERROR_INVALID_NAME /* XP */, "got %u\n", status); + wcscpy(domain, L"_ldap._tcp.deadbeef"); + status = DnsQuery_W(domain, DNS_TYPE_SRV, DNS_QUERY_STANDARD, NULL, &rec, NULL); + ok(status == DNS_ERROR_RCODE_NAME_ERROR || status == DNS_INFO_NO_RECORDS || status == ERROR_INVALID_NAME /* XP */, "got %u\n", status); + wcscpy(domain, L"_ldap._tcp.dc._msdcs."); size = ARRAY_SIZE(domain) - wcslen(domain); ret = GetComputerNameExW(ComputerNameDnsDomain, domain + wcslen(domain), &size);
1
0
0
0
Zhiyi Zhang : wined3d: Pass a struct wined3d_adapter pointer to wined3d_check_depth_stencil_match().
by Alexandre Julliard
09 Mar '20
09 Mar '20
Module: wine Branch: master Commit: 2d1786c55a6269f282f9fe622eb3f869283ed370 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=2d1786c55a6269f282f9fe62…
Author: Zhiyi Zhang <zzhang(a)codeweavers.com> Date: Mon Mar 9 15:41:33 2020 +0800 wined3d: Pass a struct wined3d_adapter pointer to wined3d_check_depth_stencil_match(). Signed-off-by: Zhiyi Zhang <zzhang(a)codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/d3d8/directx.c | 9 ++++++++- dlls/d3d9/directx.c | 9 ++++++++- dlls/wined3d/directx.c | 16 +++++----------- dlls/wined3d/wined3d.spec | 2 +- include/wine/wined3d.h | 2 +- 5 files changed, 23 insertions(+), 15 deletions(-) diff --git a/dlls/d3d8/directx.c b/dlls/d3d8/directx.c index 13bf7b031c..e56246613f 100644 --- a/dlls/d3d8/directx.c +++ b/dlls/d3d8/directx.c @@ -323,13 +323,20 @@ static HRESULT WINAPI d3d8_CheckDepthStencilMatch(IDirect3D8 *iface, UINT adapte D3DFORMAT adapter_format, D3DFORMAT rt_format, D3DFORMAT ds_format) { struct d3d8 *d3d8 = impl_from_IDirect3D8(iface); + struct wined3d_adapter *wined3d_adapter; + unsigned int output_idx; HRESULT hr; TRACE("iface %p, adapter %u, device_type %#x, adapter_format %#x, rt_format %#x, ds_format %#x.\n", iface, adapter, device_type, adapter_format, rt_format, ds_format); + output_idx = adapter; + if (output_idx >= d3d8->wined3d_output_count) + return D3DERR_INVALIDCALL; + wined3d_mutex_lock(); - hr = wined3d_check_depth_stencil_match(d3d8->wined3d, adapter, device_type, + wined3d_adapter = wined3d_output_get_adapter(d3d8->wined3d_outputs[output_idx]); + hr = wined3d_check_depth_stencil_match(wined3d_adapter, device_type, wined3dformat_from_d3dformat(adapter_format), wined3dformat_from_d3dformat(rt_format), wined3dformat_from_d3dformat(ds_format)); wined3d_mutex_unlock(); diff --git a/dlls/d3d9/directx.c b/dlls/d3d9/directx.c index 4dbdaeef71..cd52a0e68f 100644 --- a/dlls/d3d9/directx.c +++ b/dlls/d3d9/directx.c @@ -349,13 +349,20 @@ static HRESULT WINAPI d3d9_CheckDepthStencilMatch(IDirect3D9Ex *iface, UINT adap D3DFORMAT adapter_format, D3DFORMAT rt_format, D3DFORMAT ds_format) { struct d3d9 *d3d9 = impl_from_IDirect3D9Ex(iface); + struct wined3d_adapter *wined3d_adapter; + unsigned int output_idx; HRESULT hr; TRACE("iface %p, adapter %u, device_type %#x, adapter_format %#x, rt_format %#x, ds_format %#x.\n", iface, adapter, device_type, adapter_format, rt_format, ds_format); + output_idx = adapter; + if (output_idx >= d3d9->wined3d_output_count) + return D3DERR_INVALIDCALL; + wined3d_mutex_lock(); - hr = wined3d_check_depth_stencil_match(d3d9->wined3d, adapter, device_type, + wined3d_adapter = wined3d_output_get_adapter(d3d9->wined3d_outputs[output_idx]); + hr = wined3d_check_depth_stencil_match(wined3d_adapter, device_type, wined3dformat_from_d3dformat(adapter_format), wined3dformat_from_d3dformat(rt_format), wined3dformat_from_d3dformat(ds_format)); wined3d_mutex_unlock(); diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c index 7419425d71..208e00b839 100644 --- a/dlls/wined3d/directx.c +++ b/dlls/wined3d/directx.c @@ -1444,24 +1444,18 @@ HRESULT CDECL wined3d_output_get_raster_status(const struct wined3d_output *outp return WINED3D_OK; } -HRESULT CDECL wined3d_check_depth_stencil_match(const struct wined3d *wined3d, - UINT adapter_idx, enum wined3d_device_type device_type, enum wined3d_format_id adapter_format_id, +HRESULT CDECL wined3d_check_depth_stencil_match(const struct wined3d_adapter *adapter, + enum wined3d_device_type device_type, enum wined3d_format_id adapter_format_id, enum wined3d_format_id render_target_format_id, enum wined3d_format_id depth_stencil_format_id) { const struct wined3d_format *rt_format; const struct wined3d_format *ds_format; - const struct wined3d_adapter *adapter; - TRACE("wined3d %p, adapter_idx %u, device_type %s, " - "adapter_format %s, render_target_format %s, depth_stencil_format %s.\n", - wined3d, adapter_idx, debug_d3ddevicetype(device_type), debug_d3dformat(adapter_format_id), + TRACE("adapter %p, device_type %s, adapter_format %s, render_target_format %s, " + "depth_stencil_format %s.\n", + adapter, debug_d3ddevicetype(device_type), debug_d3dformat(adapter_format_id), debug_d3dformat(render_target_format_id), debug_d3dformat(depth_stencil_format_id)); - if (adapter_idx >= wined3d->adapter_count) - return WINED3DERR_INVALIDCALL; - - adapter = wined3d->adapters[adapter_idx]; - rt_format = wined3d_get_format(adapter, render_target_format_id, WINED3D_BIND_RENDER_TARGET); ds_format = wined3d_get_format(adapter, depth_stencil_format_id, WINED3D_BIND_DEPTH_STENCIL); diff --git a/dlls/wined3d/wined3d.spec b/dlls/wined3d/wined3d.spec index 472cd907b3..3530a11f8d 100644 --- a/dlls/wined3d/wined3d.spec +++ b/dlls/wined3d/wined3d.spec @@ -2,7 +2,7 @@ @ stdcall wined3d_mutex_unlock() @ cdecl wined3d_calculate_format_pitch(ptr long long long) -@ cdecl wined3d_check_depth_stencil_match(ptr long long long long long) +@ cdecl wined3d_check_depth_stencil_match(ptr long long long long) @ cdecl wined3d_check_device_format(ptr long long long long long long long) @ cdecl wined3d_check_device_format_conversion(ptr long long long) @ cdecl wined3d_check_device_multisample_type(ptr long long long long long ptr) diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h index 09c6995de0..fbcc6bb332 100644 --- a/include/wine/wined3d.h +++ b/include/wine/wined3d.h @@ -2247,7 +2247,7 @@ void __stdcall wined3d_mutex_unlock(void); UINT __cdecl wined3d_calculate_format_pitch(const struct wined3d *wined3d, UINT adapter_idx, enum wined3d_format_id format_id, UINT width); -HRESULT __cdecl wined3d_check_depth_stencil_match(const struct wined3d *wined3d, UINT adapter_idx, +HRESULT __cdecl wined3d_check_depth_stencil_match(const struct wined3d_adapter *adapter, enum wined3d_device_type device_type, enum wined3d_format_id adapter_format_id, enum wined3d_format_id render_target_format_id, enum wined3d_format_id depth_stencil_format_id); HRESULT __cdecl wined3d_check_device_format(const struct wined3d *wined3d, UINT adaper_idx,
1
0
0
0
Zhiyi Zhang : wined3d: Introduce wined3d_output_get_adapter().
by Alexandre Julliard
09 Mar '20
09 Mar '20
Module: wine Branch: master Commit: 744ff73829e037e2fa64d7a5c0881f33424563bd URL:
https://source.winehq.org/git/wine.git/?a=commit;h=744ff73829e037e2fa64d7a5…
Author: Zhiyi Zhang <zzhang(a)codeweavers.com> Date: Mon Mar 9 15:41:17 2020 +0800 wined3d: Introduce wined3d_output_get_adapter(). Signed-off-by: Zhiyi Zhang <zzhang(a)codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/wined3d/directx.c | 7 +++++++ dlls/wined3d/wined3d.spec | 3 ++- include/wine/wined3d.h | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c index 8053f9dc53..7419425d71 100644 --- a/dlls/wined3d/directx.c +++ b/dlls/wined3d/directx.c @@ -1179,6 +1179,13 @@ HRESULT CDECL wined3d_output_find_closest_matching_mode(const struct wined3d_out return WINED3D_OK; } +struct wined3d_adapter * CDECL wined3d_output_get_adapter(const struct wined3d_output *output) +{ + TRACE("output %p.\n", output); + + return output->adapter; +} + HRESULT CDECL wined3d_output_get_display_mode(const struct wined3d_output *output, struct wined3d_display_mode *mode, enum wined3d_display_rotation *rotation) { diff --git a/dlls/wined3d/wined3d.spec b/dlls/wined3d/wined3d.spec index d8ffdee9ac..472cd907b3 100644 --- a/dlls/wined3d/wined3d.spec +++ b/dlls/wined3d/wined3d.spec @@ -157,12 +157,13 @@ @ cdecl wined3d_device_validate_device(ptr ptr) @ cdecl wined3d_output_find_closest_matching_mode(ptr ptr) +@ cdecl wined3d_output_get_adapter(ptr) @ cdecl wined3d_output_get_display_mode(ptr ptr ptr) @ cdecl wined3d_output_get_mode(ptr long long long ptr) @ cdecl wined3d_output_get_mode_count(ptr long long) @ cdecl wined3d_output_get_raster_status(ptr ptr) -@ cdecl wined3d_output_set_display_mode(ptr ptr) @ cdecl wined3d_output_release_ownership(ptr) +@ cdecl wined3d_output_set_display_mode(ptr ptr) @ cdecl wined3d_output_take_ownership(ptr long) @ cdecl wined3d_palette_create(ptr long long ptr ptr) diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h index 3e05852640..09c6995de0 100644 --- a/include/wine/wined3d.h +++ b/include/wine/wined3d.h @@ -2497,6 +2497,7 @@ HRESULT __cdecl wined3d_device_validate_device(const struct wined3d_device *devi HRESULT __cdecl wined3d_output_find_closest_matching_mode(const struct wined3d_output *output, struct wined3d_display_mode *mode); +struct wined3d_adapter * __cdecl wined3d_output_get_adapter(const struct wined3d_output *output); HRESULT __cdecl wined3d_output_get_display_mode(const struct wined3d_output *output, struct wined3d_display_mode *mode, enum wined3d_display_rotation *rotation); HRESULT __cdecl wined3d_output_get_mode(const struct wined3d_output *output,
1
0
0
0
Zhiyi Zhang : wined3d: Pass a struct wined3d_output pointer to wined3d_check_device_type().
by Alexandre Julliard
09 Mar '20
09 Mar '20
Module: wine Branch: master Commit: f9701d3777e894f2432a58c1011b3accef32df6b URL:
https://source.winehq.org/git/wine.git/?a=commit;h=f9701d3777e894f2432a58c1…
Author: Zhiyi Zhang <zzhang(a)codeweavers.com> Date: Mon Mar 9 15:40:53 2020 +0800 wined3d: Pass a struct wined3d_output pointer to wined3d_check_device_type(). Signed-off-by: Zhiyi Zhang <zzhang(a)codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/d3d8/directx.c | 8 +++++++- dlls/d3d9/directx.c | 8 +++++++- dlls/wined3d/directx.c | 27 +++++++++++++-------------- dlls/wined3d/wined3d.spec | 2 +- include/wine/wined3d.h | 7 ++++--- 5 files changed, 32 insertions(+), 20 deletions(-) diff --git a/dlls/d3d8/directx.c b/dlls/d3d8/directx.c index d515caffd2..13bf7b031c 100644 --- a/dlls/d3d8/directx.c +++ b/dlls/d3d8/directx.c @@ -213,16 +213,22 @@ static HRESULT WINAPI d3d8_CheckDeviceType(IDirect3D8 *iface, UINT adapter, D3DD D3DFORMAT display_format, D3DFORMAT backbuffer_format, BOOL windowed) { struct d3d8 *d3d8 = impl_from_IDirect3D8(iface); + unsigned int output_idx; HRESULT hr; TRACE("iface %p, adapter %u, device_type %#x, display_format %#x, backbuffer_format %#x, windowed %#x.\n", iface, adapter, device_type, display_format, backbuffer_format, windowed); + output_idx = adapter; + if (output_idx >= d3d8->wined3d_output_count) + return D3DERR_INVALIDCALL; + if (!windowed && display_format != D3DFMT_X8R8G8B8 && display_format != D3DFMT_R5G6B5) return WINED3DERR_NOTAVAILABLE; wined3d_mutex_lock(); - hr = wined3d_check_device_type(d3d8->wined3d, adapter, device_type, wined3dformat_from_d3dformat(display_format), + hr = wined3d_check_device_type(d3d8->wined3d, d3d8->wined3d_outputs[output_idx], device_type, + wined3dformat_from_d3dformat(display_format), wined3dformat_from_d3dformat(backbuffer_format), windowed); wined3d_mutex_unlock(); diff --git a/dlls/d3d9/directx.c b/dlls/d3d9/directx.c index 700c3cb145..4dbdaeef71 100644 --- a/dlls/d3d9/directx.c +++ b/dlls/d3d9/directx.c @@ -236,17 +236,23 @@ static HRESULT WINAPI d3d9_CheckDeviceType(IDirect3D9Ex *iface, UINT adapter, D3 D3DFORMAT display_format, D3DFORMAT backbuffer_format, BOOL windowed) { struct d3d9 *d3d9 = impl_from_IDirect3D9Ex(iface); + unsigned int output_idx; HRESULT hr; TRACE("iface %p, adapter %u, device_type %#x, display_format %#x, backbuffer_format %#x, windowed %#x.\n", iface, adapter, device_type, display_format, backbuffer_format, windowed); + output_idx = adapter; + if (output_idx >= d3d9->wined3d_output_count) + return D3DERR_INVALIDCALL; + /* Others than that not supported by d3d9, but reported by wined3d for ddraw. Filter them out. */ if (!windowed && display_format != D3DFMT_X8R8G8B8 && display_format != D3DFMT_R5G6B5) return WINED3DERR_NOTAVAILABLE; wined3d_mutex_lock(); - hr = wined3d_check_device_type(d3d9->wined3d, adapter, device_type, wined3dformat_from_d3dformat(display_format), + hr = wined3d_check_device_type(d3d9->wined3d, d3d9->wined3d_outputs[output_idx], device_type, + wined3dformat_from_d3dformat(display_format), wined3dformat_from_d3dformat(backbuffer_format), windowed); wined3d_mutex_unlock(); diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c index 3f46bb6a28..8053f9dc53 100644 --- a/dlls/wined3d/directx.c +++ b/dlls/wined3d/directx.c @@ -1783,19 +1783,17 @@ HRESULT CDECL wined3d_check_device_format_conversion(const struct wined3d_output return WINED3D_OK; } -HRESULT CDECL wined3d_check_device_type(const struct wined3d *wined3d, UINT adapter_idx, - enum wined3d_device_type device_type, enum wined3d_format_id display_format, - enum wined3d_format_id backbuffer_format, BOOL windowed) +HRESULT CDECL wined3d_check_device_type(const struct wined3d *wined3d, + const struct wined3d_output *output, enum wined3d_device_type device_type, + enum wined3d_format_id display_format, enum wined3d_format_id backbuffer_format, + BOOL windowed) { BOOL present_conversion = wined3d->flags & WINED3D_PRESENT_CONVERSION; - TRACE("wined3d %p, adapter_idx %u, device_type %s, display_format %s, backbuffer_format %s, windowed %#x.\n", - wined3d, adapter_idx, debug_d3ddevicetype(device_type), debug_d3dformat(display_format), + TRACE("wined3d %p, output %p, device_type %s, display_format %s, backbuffer_format %s, windowed %#x.\n", + wined3d, output, debug_d3ddevicetype(device_type), debug_d3dformat(display_format), debug_d3dformat(backbuffer_format), windowed); - if (adapter_idx >= wined3d->adapter_count) - return WINED3DERR_INVALIDCALL; - /* The task of this function is to check whether a certain display / backbuffer format * combination is available on the given adapter. In fullscreen mode microsoft specified * that the display format shouldn't provide alpha and that ignoring alpha the backbuffer @@ -1815,8 +1813,8 @@ HRESULT CDECL wined3d_check_device_type(const struct wined3d *wined3d, UINT adap if (!windowed) { /* If the requested display format is not available, don't continue. */ - if (!wined3d_output_get_mode_count(&wined3d->adapters[adapter_idx]->outputs[0], - display_format, WINED3D_SCANLINE_ORDERING_UNKNOWN)) + if (!wined3d_output_get_mode_count(output, display_format, + WINED3D_SCANLINE_ORDERING_UNKNOWN)) { TRACE("No available modes for display format %s.\n", debug_d3dformat(display_format)); return WINED3DERR_NOTAVAILABLE; @@ -1839,8 +1837,8 @@ HRESULT CDECL wined3d_check_device_type(const struct wined3d *wined3d, UINT adap if (backbuffer_format == WINED3DFMT_UNKNOWN) backbuffer_format = display_format; - if (FAILED(wined3d_check_device_format_conversion(&wined3d->adapters[adapter_idx]->outputs[0], - device_type, backbuffer_format, display_format))) + if (FAILED(wined3d_check_device_format_conversion(output, device_type, backbuffer_format, + display_format))) { TRACE("Format conversion from %s to %s not supported.\n", debug_d3dformat(backbuffer_format), debug_d3dformat(display_format)); @@ -1886,8 +1884,9 @@ HRESULT CDECL wined3d_check_device_type(const struct wined3d *wined3d, UINT adap } /* Validate that the back buffer format is usable for render targets. */ - if (FAILED(wined3d_check_device_format(wined3d, adapter_idx, device_type, display_format, - 0, WINED3D_BIND_RENDER_TARGET, WINED3D_RTYPE_TEXTURE_2D, backbuffer_format))) + if (FAILED(wined3d_check_device_format(wined3d, output->adapter->ordinal, device_type, + display_format, 0, WINED3D_BIND_RENDER_TARGET, WINED3D_RTYPE_TEXTURE_2D, + backbuffer_format))) { TRACE("Format %s not allowed for render targets.\n", debug_d3dformat(backbuffer_format)); return WINED3DERR_NOTAVAILABLE; diff --git a/dlls/wined3d/wined3d.spec b/dlls/wined3d/wined3d.spec index d043b91cc4..d8ffdee9ac 100644 --- a/dlls/wined3d/wined3d.spec +++ b/dlls/wined3d/wined3d.spec @@ -6,7 +6,7 @@ @ cdecl wined3d_check_device_format(ptr long long long long long long long) @ cdecl wined3d_check_device_format_conversion(ptr long long long) @ cdecl wined3d_check_device_multisample_type(ptr long long long long long ptr) -@ cdecl wined3d_check_device_type(ptr long long long long long) +@ cdecl wined3d_check_device_type(ptr ptr long long long long) @ cdecl wined3d_create(long) @ cdecl wined3d_decref(ptr) @ cdecl wined3d_get_adapter(ptr long) diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h index a97b14b6c5..3e05852640 100644 --- a/include/wine/wined3d.h +++ b/include/wine/wined3d.h @@ -2259,9 +2259,10 @@ HRESULT __cdecl wined3d_check_device_format_conversion(const struct wined3d_outp HRESULT __cdecl wined3d_check_device_multisample_type(const struct wined3d *wined3d, UINT adapter_idx, enum wined3d_device_type device_type, enum wined3d_format_id surface_format_id, BOOL windowed, enum wined3d_multisample_type multisample_type, DWORD *quality_levels); -HRESULT __cdecl wined3d_check_device_type(const struct wined3d *wined3d, UINT adapter_idx, - enum wined3d_device_type device_type, enum wined3d_format_id display_format_id, - enum wined3d_format_id backbuffer_format_id, BOOL windowed); +HRESULT __cdecl wined3d_check_device_type(const struct wined3d *wined3d, + const struct wined3d_output *output, enum wined3d_device_type device_type, + enum wined3d_format_id display_format_id, enum wined3d_format_id backbuffer_format_id, + BOOL windowed); struct wined3d * __cdecl wined3d_create(DWORD flags); ULONG __cdecl wined3d_decref(struct wined3d *wined3d); struct wined3d_adapter * __cdecl wined3d_get_adapter(const struct wined3d *wined3d,
1
0
0
0
← Newer
1
...
75
76
77
78
79
80
81
...
100
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
Results per page:
10
25
50
100
200