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
September 2009
----- 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
3 participants
866 discussions
Start a n
N
ew thread
Jacek Caban : msxml3: Store pointer to node object in domtext.
by Alexandre Julliard
30 Sep '09
30 Sep '09
Module: wine Branch: master Commit: 321a8e2268f2465ae6555fd030527a8a4ba474f9 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=321a8e2268f2465ae6555fd03…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Wed Sep 30 15:33:35 2009 +0200 msxml3: Store pointer to node object in domtext. --- dlls/msxml3/text.c | 108 +++++++++++++++++++++++---------------------------- 1 files changed, 49 insertions(+), 59 deletions(-) Diff:
http://source.winehq.org/git/wine.git/?a=commitdiff;h=321a8e2268f2465ae6555…
1
0
0
0
Jacek Caban : jscript: Added ActiveXObject tests.
by Alexandre Julliard
30 Sep '09
30 Sep '09
Module: wine Branch: master Commit: 40160adf2953ee3bae40870343d248388a16be19 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=40160adf2953ee3bae4087034…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Wed Sep 30 14:35:28 2009 +0200 jscript: Added ActiveXObject tests. --- dlls/jscript/tests/Makefile.in | 3 +- dlls/jscript/tests/activex.c | 969 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 971 insertions(+), 1 deletions(-) Diff:
http://source.winehq.org/git/wine.git/?a=commitdiff;h=40160adf2953ee3bae408…
1
0
0
0
Jacek Caban : jscript: Added ActiveXObject constructor implementation.
by Alexandre Julliard
30 Sep '09
30 Sep '09
Module: wine Branch: master Commit: 6d4533a8f87cae8b8f0e481ea777a38ab487cdd6 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=6d4533a8f87cae8b8f0e481ea…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Wed Sep 30 14:34:47 2009 +0200 jscript: Added ActiveXObject constructor implementation. --- dlls/jscript/Makefile.in | 2 +- dlls/jscript/activex.c | 124 +++++++++++++++++++++++++++++++++++++++++++- dlls/jscript/error.c | 5 ++ dlls/jscript/jscript.c | 6 ++ dlls/jscript/jscript.h | 4 +- dlls/jscript/jscript_En.rc | 1 + dlls/jscript/resource.h | 1 + 7 files changed, 139 insertions(+), 4 deletions(-) diff --git a/dlls/jscript/Makefile.in b/dlls/jscript/Makefile.in index d9d490a..6373796 100644 --- a/dlls/jscript/Makefile.in +++ b/dlls/jscript/Makefile.in @@ -3,7 +3,7 @@ TOPOBJDIR = ../.. SRCDIR = @srcdir@ VPATH = @srcdir@ MODULE = jscript.dll -IMPORTS = oleaut32 user32 advapi32 kernel32 +IMPORTS = oleaut32 ole32 user32 advapi32 kernel32 RC_SRCS = \ jscript_De.rc \ diff --git a/dlls/jscript/activex.c b/dlls/jscript/activex.c index eada0c2..2029edf 100644 --- a/dlls/jscript/activex.c +++ b/dlls/jscript/activex.c @@ -20,16 +20,136 @@ #include "wine/port.h" #include "jscript.h" +#include "objsafe.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(jscript); +/* Defined as extern in urlmon.idl, but not exported by uuid.lib */ +const GUID GUID_CUSTOM_CONFIRMOBJECTSAFETY = + {0x10200490,0xfa38,0x11d0,{0xac,0x0e,0x00,0xa0,0xc9,0xf,0xff,0xc0}}; + +static IInternetHostSecurityManager *get_sec_mgr(script_ctx_t *ctx) +{ + IInternetHostSecurityManager *secmgr; + IServiceProvider *sp; + HRESULT hres; + + if(!ctx->site) + return NULL; + + if(ctx->secmgr) + return ctx->secmgr; + + hres = IActiveScriptSite_QueryInterface(ctx->site, &IID_IServiceProvider, (void**)&sp); + if(FAILED(hres)) + return NULL; + + hres = IServiceProvider_QueryService(sp, &SID_SInternetHostSecurityManager, &IID_IInternetHostSecurityManager, + (void**)&secmgr); + IServiceProvider_Release(sp); + if(FAILED(hres)) + return NULL; + + return ctx->secmgr = secmgr; +} + +static IUnknown *create_activex_object(script_ctx_t *ctx, const WCHAR *progid) +{ + IInternetHostSecurityManager *secmgr; + struct CONFIRMSAFETY cs; + DWORD policy_size; + BYTE *bpolicy; + IUnknown *obj; + DWORD policy; + GUID guid; + HRESULT hres; + + hres = CLSIDFromProgID(progid, &guid); + if(FAILED(hres)) + return NULL; + + TRACE("GUID %s\n", debugstr_guid(&guid)); + + secmgr = get_sec_mgr(ctx); + if(!secmgr) + return NULL; + + policy = 0; + hres = IInternetHostSecurityManager_ProcessUrlAction(secmgr, URLACTION_ACTIVEX_RUN, (BYTE*)&policy, sizeof(policy), + (BYTE*)&guid, sizeof(GUID), 0, 0); + if(FAILED(hres) || policy != URLPOLICY_ALLOW) + return NULL; + + /* FIXME: Use IClassFactoryEx */ + + hres = CoCreateInstance(&guid, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER, &IID_IUnknown, (void**)&obj); + if(FAILED(hres)) + return NULL; + + cs.clsid = guid; + cs.pUnk = obj; + cs.dwFlags = 0; + hres = IInternetHostSecurityManager_QueryCustomPolicy(secmgr, &GUID_CUSTOM_CONFIRMOBJECTSAFETY, &bpolicy, &policy_size, + (BYTE*)&cs, sizeof(cs), 0); + if(SUCCEEDED(hres)) { + policy = policy_size >= sizeof(DWORD) ? *(DWORD*)bpolicy : URLPOLICY_DISALLOW; + CoTaskMemFree(bpolicy); + } + + if(FAILED(hres) || policy != URLPOLICY_ALLOW) { + IUnknown_Release(obj); + return NULL; + } + + return obj; +} + static HRESULT ActiveXObject_value(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *caller) { - FIXME("\n"); - return E_NOTIMPL; + IDispatch *disp; + IUnknown *obj; + BSTR progid; + HRESULT hres; + + TRACE("\n"); + + if(flags != DISPATCH_CONSTRUCT) { + FIXME("unsupported flags %x\n", flags); + return E_NOTIMPL; + } + + if(ctx->safeopt != (INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER)) { + FIXME("Unsupported safeopt %x\n", ctx->safeopt); + return E_NOTIMPL; + } + + if(arg_cnt(dp) != 1) { + FIXME("unsuported arg_cnt %d\n", arg_cnt(dp)); + return E_NOTIMPL; + } + + hres = to_string(ctx, get_arg(dp,0), ei, &progid); + if(FAILED(hres)) + return hres; + + obj = create_activex_object(ctx, progid); + SysFreeString(progid); + if(!obj) + return throw_generic_error(ctx, ei, IDS_CREATE_OBJ_ERROR, NULL); + + hres = IUnknown_QueryInterface(obj, &IID_IDispatch, (void**)&disp); + IUnknown_Release(obj); + if(FAILED(hres)) { + FIXME("Object does not support IDispatch\n"); + return E_NOTIMPL; + } + + V_VT(retv) = VT_DISPATCH; + V_DISPATCH(retv) = disp; + return S_OK; } HRESULT create_activex_constr(script_ctx_t *ctx, DispatchEx **ret) diff --git a/dlls/jscript/error.c b/dlls/jscript/error.c index 91bc95a..9530a4c 100644 --- a/dlls/jscript/error.c +++ b/dlls/jscript/error.c @@ -429,6 +429,11 @@ HRESULT throw_eval_error(script_ctx_t *ctx, jsexcept_t *ei, UINT id, const WCHAR return throw_error(ctx, ei, id, str, ctx->eval_error_constr); } +HRESULT throw_generic_error(script_ctx_t *ctx, jsexcept_t *ei, UINT id, const WCHAR *str) +{ + return throw_error(ctx, ei, id, str, ctx->error_constr); +} + HRESULT throw_range_error(script_ctx_t *ctx, jsexcept_t *ei, UINT id, const WCHAR *str) { return throw_error(ctx, ei, id, str, ctx->range_error_constr); diff --git a/dlls/jscript/jscript.c b/dlls/jscript/jscript.c index 1efe8e1..90a5b47 100644 --- a/dlls/jscript/jscript.c +++ b/dlls/jscript/jscript.c @@ -351,6 +351,11 @@ static HRESULT WINAPI JScript_Close(IActiveScript *iface) This->ctx->named_items = NULL; } + if(This->ctx->secmgr) { + IInternetHostSecurityManager_Release(This->ctx->secmgr); + This->ctx->secmgr = NULL; + } + if(This->ctx->site) { IActiveScriptSite_Release(This->ctx->site); This->ctx->site = NULL; @@ -554,6 +559,7 @@ static HRESULT WINAPI JScriptParse_InitNew(IActiveScriptParse *iface) ctx->ref = 1; ctx->state = SCRIPTSTATE_UNINITIALIZED; + ctx->safeopt = This->safeopt; jsheap_init(&ctx->tmp_heap); ctx = InterlockedCompareExchangePointer((void**)&This->ctx, ctx, NULL); diff --git a/dlls/jscript/jscript.h b/dlls/jscript/jscript.h index 9190110..533be57 100644 --- a/dlls/jscript/jscript.h +++ b/dlls/jscript/jscript.h @@ -214,6 +214,7 @@ HRESULT create_builtin_function(script_ctx_t*,builtin_invoke_t,const WCHAR*,cons HRESULT Function_value(script_ctx_t*,vdisp_t*,WORD,DISPPARAMS*,VARIANT*,jsexcept_t*,IServiceProvider*); HRESULT throw_eval_error(script_ctx_t*,jsexcept_t*,UINT,const WCHAR*); +HRESULT throw_generic_error(script_ctx_t*,jsexcept_t*,UINT,const WCHAR*); HRESULT throw_range_error(script_ctx_t*,jsexcept_t*,UINT,const WCHAR*); HRESULT throw_reference_error(script_ctx_t*,jsexcept_t*,UINT,const WCHAR*); HRESULT throw_regexp_error(script_ctx_t*,jsexcept_t*,UINT,const WCHAR*); @@ -221,7 +222,6 @@ HRESULT throw_syntax_error(script_ctx_t*,jsexcept_t*,UINT,const WCHAR*); HRESULT throw_type_error(script_ctx_t*,jsexcept_t*,UINT,const WCHAR*); HRESULT throw_uri_error(script_ctx_t*,jsexcept_t*,UINT,const WCHAR*); - HRESULT create_object(script_ctx_t*,DispatchEx*,DispatchEx**); HRESULT create_math(script_ctx_t*,DispatchEx**); HRESULT create_array(script_ctx_t*,DWORD,DispatchEx**); @@ -260,6 +260,8 @@ struct _script_ctx_t { exec_ctx_t *exec_ctx; named_item_t *named_items; IActiveScriptSite *site; + IInternetHostSecurityManager *secmgr; + DWORD safeopt; LCID lcid; jsheap_t tmp_heap; diff --git a/dlls/jscript/jscript_En.rc b/dlls/jscript/jscript_En.rc index 7962ad3..14be9bd 100644 --- a/dlls/jscript/jscript_En.rc +++ b/dlls/jscript/jscript_En.rc @@ -24,6 +24,7 @@ STRINGTABLE DISCARDABLE { IDS_TO_PRIMITIVE "Error converting object to primitive type" IDS_INVALID_CALL_ARG "Invalid procedure call or argument" + IDS_CREATE_OBJ_ERROR "Automation server can't create object" IDS_NO_PROPERTY "Object doesn't support this property or method" IDS_ARG_NOT_OPT "Argument not optional" IDS_SYNTAX_ERROR "Syntax error" diff --git a/dlls/jscript/resource.h b/dlls/jscript/resource.h index fcebcb9..17c0df0 100644 --- a/dlls/jscript/resource.h +++ b/dlls/jscript/resource.h @@ -20,6 +20,7 @@ #define IDS_TO_PRIMITIVE 0x0001 #define IDS_INVALID_CALL_ARG 0x0005 +#define IDS_CREATE_OBJ_ERROR 0x01AD #define IDS_NO_PROPERTY 0x01B6 #define IDS_ARG_NOT_OPT 0x01c1 #define IDS_SYNTAX_ERROR 0x03EA
1
0
0
0
Rico Schüller : d3d10: Implement ID3D10EffectType:: GetMemberName().
by Alexandre Julliard
30 Sep '09
30 Sep '09
Module: wine Branch: master Commit: 90fadf84d9d8b615ff3c28ec2be9b93b01e1c5de URL:
http://source.winehq.org/git/wine.git/?a=commit;h=90fadf84d9d8b615ff3c28ec2…
Author: Rico Schüller <kgbricola(a)web.de> Date: Wed Sep 30 11:42:14 2009 +0200 d3d10: Implement ID3D10EffectType::GetMemberName(). --- dlls/d3d10/d3d10_private.h | 10 ++ dlls/d3d10/effect.c | 235 +++++++++++++++++++++++++++++++++++++------- 2 files changed, 209 insertions(+), 36 deletions(-) Diff:
http://source.winehq.org/git/wine.git/?a=commitdiff;h=90fadf84d9d8b615ff3c2…
1
0
0
0
Rico Schüller : d3d10: Forward ID3D10EffectVariable functions from ID3D10EffectConstantBuffer to ID3D10EffectVariable .
by Alexandre Julliard
30 Sep '09
30 Sep '09
Module: wine Branch: master Commit: 3eb2d779e408e773ea4224a776b7038fd858b999 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=3eb2d779e408e773ea4224a77…
Author: Rico Schüller <kgbricola(a)web.de> Date: Wed Sep 30 11:41:16 2009 +0200 d3d10: Forward ID3D10EffectVariable functions from ID3D10EffectConstantBuffer to ID3D10EffectVariable. --- dlls/d3d10/effect.c | 124 ++++++++++----------------------------------------- 1 files changed, 24 insertions(+), 100 deletions(-) diff --git a/dlls/d3d10/effect.c b/dlls/d3d10/effect.c index ab50663..27e68d6 100644 --- a/dlls/d3d10/effect.c +++ b/dlls/d3d10/effect.c @@ -2022,220 +2022,144 @@ static BOOL STDMETHODCALLTYPE d3d10_effect_constant_buffer_IsValid(ID3D10EffectC static struct ID3D10EffectType * STDMETHODCALLTYPE d3d10_effect_constant_buffer_GetType(ID3D10EffectConstantBuffer *iface) { - FIXME("iface %p stub!\n", iface); - - return NULL; + return d3d10_effect_variable_GetType((ID3D10EffectVariable *)iface); } static HRESULT STDMETHODCALLTYPE d3d10_effect_constant_buffer_GetDesc(ID3D10EffectConstantBuffer *iface, D3D10_EFFECT_VARIABLE_DESC *desc) { - FIXME("iface %p, desc %p stub!\n", iface, desc); - - return E_NOTIMPL; + return d3d10_effect_variable_GetDesc((ID3D10EffectVariable *)iface, desc); } static struct ID3D10EffectVariable * STDMETHODCALLTYPE d3d10_effect_constant_buffer_GetAnnotationByIndex( ID3D10EffectConstantBuffer *iface, UINT index) { - struct d3d10_effect_variable *This = (struct d3d10_effect_variable *)iface; - struct d3d10_effect_variable *a; - - TRACE("iface %p, index %u\n", iface, index); - - if (index >= This->annotation_count) - { - WARN("Invalid index specified\n"); - return (ID3D10EffectVariable *)&null_variable; - } - - a = &This->annotations[index]; - - TRACE("Returning annotation %p, %s\n", a, debugstr_a(a->name)); - - return (ID3D10EffectVariable *)a; + return d3d10_effect_variable_GetAnnotationByIndex((ID3D10EffectVariable *)iface, index); } static struct ID3D10EffectVariable * STDMETHODCALLTYPE d3d10_effect_constant_buffer_GetAnnotationByName( ID3D10EffectConstantBuffer *iface, LPCSTR name) { - struct d3d10_effect_variable *This = (struct d3d10_effect_variable *)iface; - unsigned int i; - - TRACE("iface %p, name %s.\n", iface, debugstr_a(name)); - - for (i = 0; i < This->annotation_count; ++i) - { - struct d3d10_effect_variable *a = &This->annotations[i]; - if (!strcmp(a->name, name)) - { - TRACE("Returning annotation %p\n", a); - return (ID3D10EffectVariable *)a; - } - } - - WARN("Invalid name specified\n"); - - return (ID3D10EffectVariable *)&null_variable; + return d3d10_effect_variable_GetAnnotationByName((ID3D10EffectVariable *)iface, name); } static struct ID3D10EffectVariable * STDMETHODCALLTYPE d3d10_effect_constant_buffer_GetMemberByIndex( ID3D10EffectConstantBuffer *iface, UINT index) { - FIXME("iface %p, index %u stub!\n", iface, index); - - return NULL; + return d3d10_effect_variable_GetMemberByIndex((ID3D10EffectVariable *)iface, index); } static struct ID3D10EffectVariable * STDMETHODCALLTYPE d3d10_effect_constant_buffer_GetMemberByName( ID3D10EffectConstantBuffer *iface, LPCSTR name) { - FIXME("iface %p, name %s stub!\n", iface, debugstr_a(name)); - - return NULL; + return d3d10_effect_variable_GetMemberByName((ID3D10EffectVariable *)iface, name); } static struct ID3D10EffectVariable * STDMETHODCALLTYPE d3d10_effect_constant_buffer_GetMemberBySemantic( ID3D10EffectConstantBuffer *iface, LPCSTR semantic) { - FIXME("iface %p, semantic %s stub!\n", iface, debugstr_a(semantic)); - - return NULL; + return d3d10_effect_variable_GetMemberBySemantic((ID3D10EffectVariable *)iface, semantic); } static struct ID3D10EffectVariable * STDMETHODCALLTYPE d3d10_effect_constant_buffer_GetElement( ID3D10EffectConstantBuffer *iface, UINT index) { - FIXME("iface %p, index %u stub!\n", iface, index); - - return NULL; + return d3d10_effect_variable_GetElement((ID3D10EffectVariable *)iface, index); } static struct ID3D10EffectConstantBuffer * STDMETHODCALLTYPE d3d10_effect_constant_buffer_GetParentConstantBuffer( ID3D10EffectConstantBuffer *iface) { - FIXME("iface %p stub!\n", iface); - - return NULL; + return d3d10_effect_variable_GetParentConstantBuffer((ID3D10EffectVariable *)iface); } static struct ID3D10EffectScalarVariable * STDMETHODCALLTYPE d3d10_effect_constant_buffer_AsScalar( ID3D10EffectConstantBuffer *iface) { - FIXME("iface %p stub!\n", iface); - - return NULL; + return d3d10_effect_variable_AsScalar((ID3D10EffectVariable *)iface); } static struct ID3D10EffectVectorVariable * STDMETHODCALLTYPE d3d10_effect_constant_buffer_AsVector( ID3D10EffectConstantBuffer *iface) { - FIXME("iface %p stub!\n", iface); - - return NULL; + return d3d10_effect_variable_AsVector((ID3D10EffectVariable *)iface); } static struct ID3D10EffectMatrixVariable * STDMETHODCALLTYPE d3d10_effect_constant_buffer_AsMatrix( ID3D10EffectConstantBuffer *iface) { - FIXME("iface %p stub!\n", iface); - - return NULL; + return d3d10_effect_variable_AsMatrix((ID3D10EffectVariable *)iface); } static struct ID3D10EffectStringVariable * STDMETHODCALLTYPE d3d10_effect_constant_buffer_AsString( ID3D10EffectConstantBuffer *iface) { - FIXME("iface %p stub!\n", iface); - - return NULL; + return d3d10_effect_variable_AsString((ID3D10EffectVariable *)iface); } static struct ID3D10EffectShaderResourceVariable * STDMETHODCALLTYPE d3d10_effect_constant_buffer_AsShaderResource( ID3D10EffectConstantBuffer *iface) { - FIXME("iface %p stub!\n", iface); - - return NULL; + return d3d10_effect_variable_AsShaderResource((ID3D10EffectVariable *)iface); } static struct ID3D10EffectRenderTargetViewVariable * STDMETHODCALLTYPE d3d10_effect_constant_buffer_AsRenderTargetView( ID3D10EffectConstantBuffer *iface) { - FIXME("iface %p stub!\n", iface); - - return NULL; + return d3d10_effect_variable_AsRenderTargetView((ID3D10EffectVariable *)iface); } static struct ID3D10EffectDepthStencilViewVariable * STDMETHODCALLTYPE d3d10_effect_constant_buffer_AsDepthStencilView( ID3D10EffectConstantBuffer *iface) { - FIXME("iface %p stub!\n", iface); - - return NULL; + return d3d10_effect_variable_AsDepthStencilView((ID3D10EffectVariable *)iface); } static struct ID3D10EffectConstantBuffer * STDMETHODCALLTYPE d3d10_effect_constant_buffer_AsConstantBuffer( ID3D10EffectConstantBuffer *iface) { - FIXME("iface %p stub!\n", iface); - - return NULL; + return d3d10_effect_variable_AsConstantBuffer((ID3D10EffectVariable *)iface); } static struct ID3D10EffectShaderVariable * STDMETHODCALLTYPE d3d10_effect_constant_buffer_AsShader( ID3D10EffectConstantBuffer *iface) { - FIXME("iface %p stub!\n", iface); - - return NULL; + return d3d10_effect_variable_AsShader((ID3D10EffectVariable *)iface); } static struct ID3D10EffectBlendVariable * STDMETHODCALLTYPE d3d10_effect_constant_buffer_AsBlend(ID3D10EffectConstantBuffer *iface) { - FIXME("iface %p stub!\n", iface); - - return NULL; + return d3d10_effect_variable_AsBlend((ID3D10EffectVariable *)iface); } static struct ID3D10EffectDepthStencilVariable * STDMETHODCALLTYPE d3d10_effect_constant_buffer_AsDepthStencil( ID3D10EffectConstantBuffer *iface) { - FIXME("iface %p stub!\n", iface); - - return NULL; + return d3d10_effect_variable_AsDepthStencil((ID3D10EffectVariable *)iface); } static struct ID3D10EffectRasterizerVariable * STDMETHODCALLTYPE d3d10_effect_constant_buffer_AsRasterizer( ID3D10EffectConstantBuffer *iface) { - FIXME("iface %p stub!\n", iface); - - return NULL; + return d3d10_effect_variable_AsRasterizer((ID3D10EffectVariable *)iface); } static struct ID3D10EffectSamplerVariable * STDMETHODCALLTYPE d3d10_effect_constant_buffer_AsSampler( ID3D10EffectConstantBuffer *iface) { - FIXME("iface %p stub!\n", iface); - - return NULL; + return d3d10_effect_variable_AsSampler((ID3D10EffectVariable *)iface); } static HRESULT STDMETHODCALLTYPE d3d10_effect_constant_buffer_SetRawValue(ID3D10EffectConstantBuffer *iface, void *data, UINT offset, UINT count) { - FIXME("iface %p, data %p, offset %u, count %u stub!\n", iface, data, offset, count); - - return E_NOTIMPL; + return d3d10_effect_variable_SetRawValue((ID3D10EffectVariable *)iface, data, offset, count); } static HRESULT STDMETHODCALLTYPE d3d10_effect_constant_buffer_GetRawValue(ID3D10EffectConstantBuffer *iface, void *data, UINT offset, UINT count) { - FIXME("iface %p, data %p, offset %u, count %u stub!\n", iface, data, offset, count); - - return E_NOTIMPL; + return d3d10_effect_variable_GetRawValue((ID3D10EffectVariable *)iface, data, offset, count); } /* ID3D10EffectConstantBuffer methods */
1
0
0
0
Rico Schüller : d3d10: Make the constant buffer a variable.
by Alexandre Julliard
30 Sep '09
30 Sep '09
Module: wine Branch: master Commit: df9e1013d558e8bf34e2b992d9d2aa5e04e9c685 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=df9e1013d558e8bf34e2b992d…
Author: Rico Schüller <kgbricola(a)web.de> Date: Wed Sep 30 11:40:38 2009 +0200 d3d10: Make the constant buffer a variable. --- dlls/d3d10/d3d10_private.h | 15 ++------------- dlls/d3d10/effect.c | 32 ++++++++++++++++---------------- 2 files changed, 18 insertions(+), 29 deletions(-) diff --git a/dlls/d3d10/d3d10_private.h b/dlls/d3d10/d3d10_private.h index ae4d6f2..62ce904 100644 --- a/dlls/d3d10/d3d10_private.h +++ b/dlls/d3d10/d3d10_private.h @@ -90,7 +90,7 @@ struct d3d10_effect_variable { const struct ID3D10EffectVariableVtbl *vtbl; - struct d3d10_effect_local_buffer *buffer; + struct d3d10_effect_variable *buffer; struct d3d10_effect *effect; char *name; @@ -98,18 +98,7 @@ struct d3d10_effect_variable DWORD buffer_offset; DWORD annotation_count; DWORD flag; - struct d3d10_effect_type *type; - struct d3d10_effect_variable *annotations; -}; - -struct d3d10_effect_local_buffer -{ - const struct ID3D10EffectConstantBufferVtbl *vtbl; - - struct d3d10_effect *effect; - char *name; DWORD data_size; - DWORD annotation_count; struct d3d10_effect_type *type; struct d3d10_effect_variable *members; struct d3d10_effect_variable *annotations; @@ -169,7 +158,7 @@ struct d3d10_effect DWORD shader_compile_count; struct wine_rb_tree types; - struct d3d10_effect_local_buffer *local_buffers; + struct d3d10_effect_variable *local_buffers; struct d3d10_effect_technique *techniques; }; diff --git a/dlls/d3d10/effect.c b/dlls/d3d10/effect.c index e2a1c88..ab50663 100644 --- a/dlls/d3d10/effect.c +++ b/dlls/d3d10/effect.c @@ -57,16 +57,16 @@ static struct d3d10_effect_technique null_technique = {&d3d10_effect_technique_vtbl, NULL, NULL, 0, 0, NULL, NULL}; static struct d3d10_effect_pass null_pass = {&d3d10_effect_pass_vtbl, NULL, NULL, 0, 0, 0, NULL, NULL}; -static struct d3d10_effect_local_buffer null_local_buffer = - {&d3d10_effect_constant_buffer_vtbl, NULL, NULL, 0, 0, 0, NULL, NULL}; +static struct d3d10_effect_variable null_local_buffer = + {(ID3D10EffectVariableVtbl *)&d3d10_effect_constant_buffer_vtbl, NULL, NULL, NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL}; static struct d3d10_effect_variable null_variable = - {&d3d10_effect_variable_vtbl, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, NULL}; + {&d3d10_effect_variable_vtbl, NULL, NULL, NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL}; static struct d3d10_effect_variable null_scalar_variable = - {(ID3D10EffectVariableVtbl *)&d3d10_effect_scalar_variable_vtbl, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, NULL}; + {(ID3D10EffectVariableVtbl *)&d3d10_effect_scalar_variable_vtbl, NULL, NULL, NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL}; static struct d3d10_effect_variable null_vector_variable = - {(ID3D10EffectVariableVtbl *)&d3d10_effect_vector_variable_vtbl, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, NULL}; + {(ID3D10EffectVariableVtbl *)&d3d10_effect_vector_variable_vtbl, NULL, NULL, NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL}; static struct d3d10_effect_variable null_matrix_variable = - {(ID3D10EffectVariableVtbl *)&d3d10_effect_matrix_variable_vtbl, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, NULL}; + {(ID3D10EffectVariableVtbl *)&d3d10_effect_matrix_variable_vtbl, NULL, NULL, NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL}; static inline void read_dword(const char **ptr, DWORD *d) { @@ -713,7 +713,7 @@ static HRESULT parse_fx10_variable(struct d3d10_effect_variable *v, const char * return S_OK; } -static HRESULT parse_fx10_local_buffer(struct d3d10_effect_local_buffer *l, const char **ptr, const char *data) +static HRESULT parse_fx10_local_buffer(struct d3d10_effect_variable *l, const char **ptr, const char *data) { unsigned int i; DWORD offset; @@ -884,8 +884,8 @@ static HRESULT parse_fx10_body(struct d3d10_effect *e, const char *data, DWORD d for (i = 0; i < e->local_buffer_count; ++i) { - struct d3d10_effect_local_buffer *l = &e->local_buffers[i]; - l->vtbl = &d3d10_effect_constant_buffer_vtbl; + struct d3d10_effect_variable *l = &e->local_buffers[i]; + l->vtbl = (ID3D10EffectVariableVtbl *)&d3d10_effect_constant_buffer_vtbl; l->effect = e; hr = parse_fx10_local_buffer(l, &ptr, data); @@ -1111,7 +1111,7 @@ static void d3d10_effect_technique_destroy(struct d3d10_effect_technique *t) } } -static void d3d10_effect_local_buffer_destroy(struct d3d10_effect_local_buffer *l) +static void d3d10_effect_local_buffer_destroy(struct d3d10_effect_variable *l) { unsigned int i; @@ -1246,7 +1246,7 @@ static struct ID3D10EffectConstantBuffer * STDMETHODCALLTYPE d3d10_effect_GetCon UINT index) { struct d3d10_effect *This = (struct d3d10_effect *)iface; - struct d3d10_effect_local_buffer *l; + struct d3d10_effect_variable *l; TRACE("iface %p, index %u\n", iface, index); @@ -1273,7 +1273,7 @@ static struct ID3D10EffectConstantBuffer * STDMETHODCALLTYPE d3d10_effect_GetCon for (i = 0; i < This->local_buffer_count; ++i) { - struct d3d10_effect_local_buffer *l = &This->local_buffers[i]; + struct d3d10_effect_variable *l = &This->local_buffers[i]; if (!strcmp(l->name, name)) { @@ -1303,7 +1303,7 @@ static struct ID3D10EffectVariable * STDMETHODCALLTYPE d3d10_effect_GetVariableB for (i = 0; i < This->local_buffer_count; ++i) { - struct d3d10_effect_local_buffer *l = &This->local_buffers[i]; + struct d3d10_effect_variable *l = &This->local_buffers[i]; unsigned int j; for (j = 0; j < l->type->member_count; ++j) @@ -2017,7 +2017,7 @@ static BOOL STDMETHODCALLTYPE d3d10_effect_constant_buffer_IsValid(ID3D10EffectC { TRACE("iface %p\n", iface); - return (struct d3d10_effect_local_buffer *)iface != &null_local_buffer; + return (struct d3d10_effect_variable *)iface != &null_local_buffer; } static struct ID3D10EffectType * STDMETHODCALLTYPE d3d10_effect_constant_buffer_GetType(ID3D10EffectConstantBuffer *iface) @@ -2038,7 +2038,7 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_constant_buffer_GetDesc(ID3D10Effe static struct ID3D10EffectVariable * STDMETHODCALLTYPE d3d10_effect_constant_buffer_GetAnnotationByIndex( ID3D10EffectConstantBuffer *iface, UINT index) { - struct d3d10_effect_local_buffer *This = (struct d3d10_effect_local_buffer *)iface; + struct d3d10_effect_variable *This = (struct d3d10_effect_variable *)iface; struct d3d10_effect_variable *a; TRACE("iface %p, index %u\n", iface, index); @@ -2059,7 +2059,7 @@ static struct ID3D10EffectVariable * STDMETHODCALLTYPE d3d10_effect_constant_buf static struct ID3D10EffectVariable * STDMETHODCALLTYPE d3d10_effect_constant_buffer_GetAnnotationByName( ID3D10EffectConstantBuffer *iface, LPCSTR name) { - struct d3d10_effect_local_buffer *This = (struct d3d10_effect_local_buffer *)iface; + struct d3d10_effect_variable *This = (struct d3d10_effect_variable *)iface; unsigned int i; TRACE("iface %p, name %s.\n", iface, debugstr_a(name));
1
0
0
0
Rico Schüller : d3d10: Parse constant buffer type.
by Alexandre Julliard
30 Sep '09
30 Sep '09
Module: wine Branch: master Commit: 10a4516e50b8fdf731807fb7265d3902c2469c83 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=10a4516e50b8fdf731807fb72…
Author: Rico Schüller <kgbricola(a)web.de> Date: Wed Sep 30 11:39:56 2009 +0200 d3d10: Parse constant buffer type. --- dlls/d3d10/d3d10_private.h | 2 +- dlls/d3d10/effect.c | 66 +++++++++++++++++++++++++++++++++++++++---- 2 files changed, 60 insertions(+), 8 deletions(-) diff --git a/dlls/d3d10/d3d10_private.h b/dlls/d3d10/d3d10_private.h index 7ef2c17..ae4d6f2 100644 --- a/dlls/d3d10/d3d10_private.h +++ b/dlls/d3d10/d3d10_private.h @@ -109,8 +109,8 @@ struct d3d10_effect_local_buffer struct d3d10_effect *effect; char *name; DWORD data_size; - DWORD member_count; DWORD annotation_count; + struct d3d10_effect_type *type; struct d3d10_effect_variable *members; struct d3d10_effect_variable *annotations; }; diff --git a/dlls/d3d10/effect.c b/dlls/d3d10/effect.c index ccbc3c4..e2a1c88 100644 --- a/dlls/d3d10/effect.c +++ b/dlls/d3d10/effect.c @@ -717,8 +717,18 @@ static HRESULT parse_fx10_local_buffer(struct d3d10_effect_local_buffer *l, cons { unsigned int i; DWORD offset; + D3D10_CBUFFER_TYPE d3d10_cbuffer_type; HRESULT hr; + l->type = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*l->type)); + if (!l->type) + { + ERR("Failed to allocate local buffer type memory.\n"); + return E_OUTOFMEMORY; + } + l->type->vtbl = &d3d10_effect_type_vtbl; + l->type->type_class = D3D10_SVC_OBJECT; + read_dword(ptr, &offset); TRACE("Local buffer name at offset %#x.\n", offset); @@ -732,10 +742,36 @@ static HRESULT parse_fx10_local_buffer(struct d3d10_effect_local_buffer *l, cons read_dword(ptr, &l->data_size); TRACE("Local buffer data size: %#x.\n", l->data_size); - skip_dword_unknown(ptr, 1); + read_dword(ptr, &d3d10_cbuffer_type); + TRACE("Local buffer type: %#x.\n", d3d10_cbuffer_type); + + switch(d3d10_cbuffer_type) + { + case D3D10_CT_CBUFFER: + l->type->basetype = D3D10_SVT_CBUFFER; + if (!copy_name("cbuffer", &l->type->name)) + { + ERR("Failed to copy name.\n"); + return E_OUTOFMEMORY; + } + break; - read_dword(ptr, &l->member_count); - TRACE("Local buffer member count: %#x.\n", l->member_count); + case D3D10_CT_TBUFFER: + l->type->basetype = D3D10_SVT_TBUFFER; + if (!copy_name("tbuffer", &l->type->name)) + { + ERR("Failed to copy name.\n"); + return E_OUTOFMEMORY; + } + break; + + default: + ERR("Unexpected D3D10_CBUFFER_TYPE %#x!\n", d3d10_cbuffer_type); + return E_FAIL; + } + + read_dword(ptr, &l->type->member_count); + TRACE("Local buffer member count: %#x.\n", l->type->member_count); skip_dword_unknown(ptr, 1); @@ -759,14 +795,14 @@ static HRESULT parse_fx10_local_buffer(struct d3d10_effect_local_buffer *l, cons if (FAILED(hr)) return hr; } - l->members = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, l->member_count * sizeof(*l->members)); + l->members = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, l->type->member_count * sizeof(*l->members)); if (!l->members) { ERR("Failed to allocate members memory.\n"); return E_OUTOFMEMORY; } - for (i = 0; i < l->member_count; ++i) + for (i = 0; i < l->type->member_count; ++i) { struct d3d10_effect_variable *v = &l->members[i]; @@ -775,7 +811,21 @@ static HRESULT parse_fx10_local_buffer(struct d3d10_effect_local_buffer *l, cons hr = parse_fx10_variable(v, ptr, data); if (FAILED(hr)) return hr; + + l->type->size_packed += v->type->size_packed; + l->type->size_unpacked += v->type->size_unpacked; } + l->type->stride = l->type->size_unpacked = (l->type->size_unpacked + 0xf) & ~0xf; + + TRACE("Constant buffer:\n"); + TRACE("\tType name: %s.\n", debugstr_a(l->type->name)); + TRACE("\tElement count: %u.\n", l->type->element_count); + TRACE("\tMember count: %u.\n", l->type->member_count); + TRACE("\tUnpacked size: %#x.\n", l->type->size_unpacked); + TRACE("\tStride: %#x.\n", l->type->stride); + TRACE("\tPacked size %#x.\n", l->type->size_packed); + TRACE("\tBasetype: %s.\n", debug_d3d10_shader_variable_type(l->type->basetype)); + TRACE("\tTypeclass: %s.\n", debug_d3d10_shader_variable_class(l->type->type_class)); return S_OK; } @@ -1070,12 +1120,14 @@ static void d3d10_effect_local_buffer_destroy(struct d3d10_effect_local_buffer * HeapFree(GetProcessHeap(), 0, l->name); if (l->members) { - for (i = 0; i < l->member_count; ++i) + for (i = 0; i < l->type->member_count; ++i) { d3d10_effect_variable_destroy(&l->members[i]); } HeapFree(GetProcessHeap(), 0, l->members); } + HeapFree(GetProcessHeap(), 0, l->type->name); + HeapFree(GetProcessHeap(), 0, l->type); if (l->annotations) { @@ -1254,7 +1306,7 @@ static struct ID3D10EffectVariable * STDMETHODCALLTYPE d3d10_effect_GetVariableB struct d3d10_effect_local_buffer *l = &This->local_buffers[i]; unsigned int j; - for (j = 0; j < l->member_count; ++j) + for (j = 0; j < l->type->member_count; ++j) { struct d3d10_effect_variable *v = &l->members[j];
1
0
0
0
Rico Schüller : d3d10: Add the D3D10_CBUFFER_TYPE enum .
by Alexandre Julliard
30 Sep '09
30 Sep '09
Module: wine Branch: master Commit: 390cc62e011b9a9ff59146c9d2889fe9105f2dc3 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=390cc62e011b9a9ff59146c9d…
Author: Rico Schüller <kgbricola(a)web.de> Date: Wed Sep 30 11:39:27 2009 +0200 d3d10: Add the D3D10_CBUFFER_TYPE enum. --- include/d3d10shader.h | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-) diff --git a/include/d3d10shader.h b/include/d3d10shader.h index 4033c9b..59221cc 100644 --- a/include/d3d10shader.h +++ b/include/d3d10shader.h @@ -82,6 +82,12 @@ typedef enum _D3D10_SHADER_VARIABLE_TYPE D3D10_SVT_FORCE_DWORD = 0x7fffffff } D3D10_SHADER_VARIABLE_TYPE, *LPD3D10_SHADER_VARIABLE_TYPE; +typedef enum D3D10_CBUFFER_TYPE +{ + D3D10_CT_CBUFFER = 0, + D3D10_CT_TBUFFER = 1 +} D3D10_CBUFFER_TYPE, *LPD3D10_CBUFFER_TYPE; + typedef enum D3D10_NAME { D3D10_NAME_UNDEFINED = 0,
1
0
0
0
Rico Schüller : d3d10: Rename ConstantBuffer' s variable to member.
by Alexandre Julliard
30 Sep '09
30 Sep '09
Module: wine Branch: master Commit: 835dedc964576acc98ac87acd1f1038f2bb35f2f URL:
http://source.winehq.org/git/wine.git/?a=commit;h=835dedc964576acc98ac87acd…
Author: Rico Schüller <kgbricola(a)web.de> Date: Wed Sep 30 11:39:13 2009 +0200 d3d10: Rename ConstantBuffer's variable to member. --- dlls/d3d10/d3d10_private.h | 4 ++-- dlls/d3d10/effect.c | 26 +++++++++++++------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/dlls/d3d10/d3d10_private.h b/dlls/d3d10/d3d10_private.h index 2d664cb..7ef2c17 100644 --- a/dlls/d3d10/d3d10_private.h +++ b/dlls/d3d10/d3d10_private.h @@ -109,9 +109,9 @@ struct d3d10_effect_local_buffer struct d3d10_effect *effect; char *name; DWORD data_size; - DWORD variable_count; + DWORD member_count; DWORD annotation_count; - struct d3d10_effect_variable *variables; + struct d3d10_effect_variable *members; struct d3d10_effect_variable *annotations; }; diff --git a/dlls/d3d10/effect.c b/dlls/d3d10/effect.c index d1bd7ee..ccbc3c4 100644 --- a/dlls/d3d10/effect.c +++ b/dlls/d3d10/effect.c @@ -734,8 +734,8 @@ static HRESULT parse_fx10_local_buffer(struct d3d10_effect_local_buffer *l, cons skip_dword_unknown(ptr, 1); - read_dword(ptr, &l->variable_count); - TRACE("Local buffer variable count: %#x.\n", l->variable_count); + read_dword(ptr, &l->member_count); + TRACE("Local buffer member count: %#x.\n", l->member_count); skip_dword_unknown(ptr, 1); @@ -759,16 +759,16 @@ static HRESULT parse_fx10_local_buffer(struct d3d10_effect_local_buffer *l, cons if (FAILED(hr)) return hr; } - l->variables = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, l->variable_count * sizeof(*l->variables)); - if (!l->variables) + l->members = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, l->member_count * sizeof(*l->members)); + if (!l->members) { - ERR("Failed to allocate variables memory.\n"); + ERR("Failed to allocate members memory.\n"); return E_OUTOFMEMORY; } - for (i = 0; i < l->variable_count; ++i) + for (i = 0; i < l->member_count; ++i) { - struct d3d10_effect_variable *v = &l->variables[i]; + struct d3d10_effect_variable *v = &l->members[i]; v->buffer = l; v->effect = l->effect; @@ -1068,13 +1068,13 @@ static void d3d10_effect_local_buffer_destroy(struct d3d10_effect_local_buffer * TRACE("local buffer %p.\n", l); HeapFree(GetProcessHeap(), 0, l->name); - if (l->variables) + if (l->members) { - for (i = 0; i < l->variable_count; ++i) + for (i = 0; i < l->member_count; ++i) { - d3d10_effect_variable_destroy(&l->variables[i]); + d3d10_effect_variable_destroy(&l->members[i]); } - HeapFree(GetProcessHeap(), 0, l->variables); + HeapFree(GetProcessHeap(), 0, l->members); } if (l->annotations) @@ -1254,9 +1254,9 @@ static struct ID3D10EffectVariable * STDMETHODCALLTYPE d3d10_effect_GetVariableB struct d3d10_effect_local_buffer *l = &This->local_buffers[i]; unsigned int j; - for (j = 0; j < l->variable_count; ++j) + for (j = 0; j < l->member_count; ++j) { - struct d3d10_effect_variable *v = &l->variables[j]; + struct d3d10_effect_variable *v = &l->members[j]; if (!strcmp(v->name, name)) {
1
0
0
0
Peter Dons Tychsen : user32: Add exception handling for timer callbacks.
by Alexandre Julliard
30 Sep '09
30 Sep '09
Module: wine Branch: master Commit: f20f411925e789a2aecf740776f441335837ac5f URL:
http://source.winehq.org/git/wine.git/?a=commit;h=f20f411925e789a2aecf74077…
Author: Peter Dons Tychsen <donpedro(a)tdcadsl.dk> Date: Wed Sep 30 01:39:25 2009 +0200 user32: Add exception handling for timer callbacks. --- dlls/user32/message.c | 36 +++++++++++++++++++++++++++++++----- dlls/user32/tests/msg.c | 13 +++++++++++++ 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/dlls/user32/message.c b/dlls/user32/message.c index 3f7a4cd..4e9a62c 100644 --- a/dlls/user32/message.c +++ b/dlls/user32/message.c @@ -43,6 +43,7 @@ #include "win.h" #include "controls.h" #include "wine/debug.h" +#include "wine/exception.h" WINE_DEFAULT_DEBUG_CHANNEL(msg); WINE_DECLARE_DEBUG_CHANNEL(relay); @@ -3065,8 +3066,20 @@ LRESULT WINAPI DispatchMessageA( const MSG* msg ) /* Process timer messages */ if ((msg->message == WM_TIMER) || (msg->message == WM_SYSTIMER)) { - if (msg->lParam) return CallWindowProcA( (WNDPROC)msg->lParam, msg->hwnd, - msg->message, msg->wParam, GetTickCount() ); + if (msg->lParam) + { + __TRY + { + retval = CallWindowProcA( (WNDPROC)msg->lParam, msg->hwnd, + msg->message, msg->wParam, GetTickCount() ); + } + __EXCEPT_PAGE_FAULT + { + retval = 0; + } + __ENDTRY + return retval; + } } if (!msg->hwnd) return 0; @@ -3103,7 +3116,8 @@ LRESULT WINAPI DispatchMessageA( const MSG* msg ) * If the lpMsg parameter points to a WM_TIMER message and the * parameter of the WM_TIMER message is not NULL, the lParam parameter * points to the function that is called instead of the window - * procedure. + * procedure. The function stored in lParam (timer callback) is protected + * from causing page-faults. * * The message must be valid. * @@ -3123,8 +3137,20 @@ LRESULT WINAPI DispatchMessageW( const MSG* msg ) /* Process timer messages */ if ((msg->message == WM_TIMER) || (msg->message == WM_SYSTIMER)) { - if (msg->lParam) return CallWindowProcW( (WNDPROC)msg->lParam, msg->hwnd, - msg->message, msg->wParam, GetTickCount() ); + if (msg->lParam) + { + __TRY + { + retval = CallWindowProcW( (WNDPROC)msg->lParam, msg->hwnd, + msg->message, msg->wParam, GetTickCount() ); + } + __EXCEPT_PAGE_FAULT + { + retval = 0; + } + __ENDTRY + return retval; + } } if (!msg->hwnd) return 0; diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c index 9208c9d..aeb1b62 100644 --- a/dlls/user32/tests/msg.c +++ b/dlls/user32/tests/msg.c @@ -7813,6 +7813,12 @@ static VOID CALLBACK tfunc(HWND hwnd, UINT uMsg, UINT_PTR id, DWORD dwTime) { } +static VOID CALLBACK tfunc_crash(HWND hwnd, UINT uMsg, UINT_PTR id, DWORD dwTime) +{ + /* Crash on purpose */ + *(volatile int *)0 = 2; +} + #define TIMER_ID 0x19 static DWORD WINAPI timer_thread_proc(LPVOID x) @@ -7834,6 +7840,7 @@ static void test_timers(void) { struct timer_info info; DWORD id; + MSG msg; info.hWnd = CreateWindow ("TestWindowClass", NULL, WS_OVERLAPPEDWINDOW , @@ -7855,6 +7862,12 @@ static void test_timers(void) ok( KillTimer(info.hWnd, TIMER_ID), "KillTimer failed\n"); + /* Test timer callback with crash */ + info.id = SetTimer(info.hWnd, TIMER_ID, 0, tfunc_crash); + ok(info.id, "SetTimer failed\n"); + Sleep(150); + while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) DispatchMessage(&msg); + ok(DestroyWindow(info.hWnd), "failed to destroy window\n"); }
1
0
0
0
← Newer
1
2
3
4
5
...
87
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
Results per page:
10
25
50
100
200