diff --git a/README.md b/README.md index 3ae04377..4cb8102c 100644 --- a/README.md +++ b/README.md @@ -34,13 +34,14 @@ Wine. All those differences are also documented on the Included bug fixes and improvements ----------------------------------- -**Bug fixes and features included in the next upcoming release [9]:** +**Bug fixes and features included in the next upcoming release [10]:** * Add partial implementation of ITfThreadMgrEx_ActivateEx ([Wine Bug #39564](https://bugs.winehq.org/show_bug.cgi?id=39564)) * Add stub kernel32.FreeUserPhysicalPages ([Wine Bug #39543](https://bugs.winehq.org/show_bug.cgi?id=39543)) * Add stubs for advapi32.RegCreateKeyTransacted[A/W] * CompareString should abort on first non-matching character ([Wine Bug #37556](https://bugs.winehq.org/show_bug.cgi?id=37556)) * Do not require SeBackupPrivilege in load_registry and unload_registry ([Wine Bug #28729](https://bugs.winehq.org/show_bug.cgi?id=28729)) +* Implement marshalling for TKIND_COCLASS ([Wine Bug #19016](https://bugs.winehq.org/show_bug.cgi?id=19016)) * Implement stub for hid.HidP_TranslateUsagesToI8042ScanCodes ([Wine Bug #39447](https://bugs.winehq.org/show_bug.cgi?id=39447)) * Implement support for "Purist Mode" (override for all dlls) * Properly handle multiple registry notifications per key diff --git a/debian/changelog b/debian/changelog index f503a693..0cc1f0fb 100644 --- a/debian/changelog +++ b/debian/changelog @@ -11,6 +11,7 @@ wine-staging (1.7.55) UNRELEASED; urgency=low wineserver call. * Added patch to make sure CompareString immediately aborts on first non- matching character. + * Added patch to implement marshalling for TKIND_COCLASS. * Remove disabled shell32-Quoted_ShellExecute patchset (bug already fixed and all tests pass). * Remove disabled reg-Cleanup patchset (only cleanup and not actively diff --git a/patches/oleaut32-TKIND_COCLASS/0001-oleaut32-tests-Add-test-for-calling-method-with-cocl.patch b/patches/oleaut32-TKIND_COCLASS/0001-oleaut32-tests-Add-test-for-calling-method-with-cocl.patch new file mode 100644 index 00000000..58061efb --- /dev/null +++ b/patches/oleaut32-TKIND_COCLASS/0001-oleaut32-tests-Add-test-for-calling-method-with-cocl.patch @@ -0,0 +1,103 @@ +From 9b845e845d3f3b9895571a9865747bf28501d47c Mon Sep 17 00:00:00 2001 +From: Sebastian Lackner +Date: Sat, 14 Nov 2015 23:14:18 +0100 +Subject: oleaut32/tests: Add test for calling method with coclass argument. + +--- + dlls/oleaut32/tests/tmarshal.c | 30 +++++++++++++++++++++++++++--- + dlls/oleaut32/tests/tmarshal.idl | 3 +++ + dlls/oleaut32/tests/tmarshal_dispids.h | 1 + + 3 files changed, 31 insertions(+), 3 deletions(-) + +diff --git a/dlls/oleaut32/tests/tmarshal.c b/dlls/oleaut32/tests/tmarshal.c +index 4a990af..96399cc 100644 +--- a/dlls/oleaut32/tests/tmarshal.c ++++ b/dlls/oleaut32/tests/tmarshal.c +@@ -598,7 +598,7 @@ static HRESULT WINAPI Widget_CloneCoclass( + ApplicationObject2 **ppVal) + { + trace("CloneCoclass()\n"); +- return S_OK; ++ return Widget_QueryInterface(iface, &IID_IWidget, (void **)ppVal); + } + + static HRESULT WINAPI Widget_Value( +@@ -909,6 +909,15 @@ static HRESULT WINAPI Widget_VarArg_Ref_Run( + return S_OK; + } + ++static HRESULT WINAPI Widget_Coclass( ++ IWidget *iface, ++ ApplicationObject2 *p) ++{ ++ trace("Coclass(%p)\n", p); ++ ok(p == (ApplicationObject2 *)iface, "expected p == %p, got %p\n", iface, p); ++ return S_OK; ++} ++ + static const struct IWidgetVtbl Widget_VTable = + { + Widget_QueryInterface, +@@ -948,7 +957,8 @@ static const struct IWidgetVtbl Widget_VTable = + Widget_pos_restrict, + Widget_neg_restrict, + Widget_VarArg_Run, +- Widget_VarArg_Ref_Run ++ Widget_VarArg_Ref_Run, ++ Widget_Coclass, + }; + + static HRESULT WINAPI StaticWidget_QueryInterface(IStaticWidget *iface, REFIID riid, void **ppvObject) +@@ -1494,8 +1504,22 @@ static void test_typelibmarshal(void) + excepinfo.wCode, excepinfo.scode); + + ok(V_VT(&varresult) == VT_DISPATCH, "V_VT(&varresult) was %d instead of VT_DISPATCH\n", V_VT(&varresult)); +- ok(!V_DISPATCH(&varresult), "V_DISPATCH(&varresult) should be NULL instead of %p\n", V_DISPATCH(&varresult)); ++ ok(V_DISPATCH(&varresult) != NULL, "expected V_DISPATCH(&varresult) != NULL\n"); ++ ++ /* call CoClass with VT_DISPATCH type */ ++ vararg[0] = varresult; ++ dispparams.cNamedArgs = 0; ++ dispparams.rgdispidNamedArgs = NULL; ++ dispparams.cArgs = 1; ++ dispparams.rgvarg = vararg; ++ VariantInit(&varresult); ++ hr = IDispatch_Invoke(pDispatch, DISPID_TM_COCLASS, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_METHOD, &dispparams, &varresult, &excepinfo, NULL); ++ todo_wine ok_ole_success(hr, IDispatch_Invoke); ++ ok(excepinfo.wCode == 0x0 && excepinfo.scode == S_OK, ++ "EXCEPINFO differs from expected: wCode = 0x%x, scode = 0x%08x\n", ++ excepinfo.wCode, excepinfo.scode); + VariantClear(&varresult); ++ VariantClear(&vararg[0]); + + /* call Value with a VT_VARIANT|VT_BYREF type */ + V_VT(&vararg[0]) = VT_VARIANT|VT_BYREF; +diff --git a/dlls/oleaut32/tests/tmarshal.idl b/dlls/oleaut32/tests/tmarshal.idl +index 680f4b4..afc578f 100644 +--- a/dlls/oleaut32/tests/tmarshal.idl ++++ b/dlls/oleaut32/tests/tmarshal.idl +@@ -185,6 +185,9 @@ library TestTypelib + + [id(DISPID_TM_VARARG_REF_RUN), vararg] + HRESULT VarArg_Ref_Run([in] BSTR name, [in] SAFEARRAY(VARIANT) *params, [out, retval] VARIANT *result); ++ ++ [id(DISPID_TM_COCLASS)] ++ HRESULT Coclass([in] ApplicationObject2 *p); + } + + [ +diff --git a/dlls/oleaut32/tests/tmarshal_dispids.h b/dlls/oleaut32/tests/tmarshal_dispids.h +index dfca216..26f4027 100644 +--- a/dlls/oleaut32/tests/tmarshal_dispids.h ++++ b/dlls/oleaut32/tests/tmarshal_dispids.h +@@ -46,6 +46,7 @@ + #define DISPID_TM_TESTSECONDIFACE 27 + #define DISPID_TM_VARARG_RUN 28 + #define DISPID_TM_VARARG_REF_RUN 29 ++#define DISPID_TM_COCLASS 30 + + #define DISPID_NOA_BSTRRET 1 + #define DISPID_NOA_ERROR 2 +-- +2.6.2 + diff --git a/patches/oleaut32-TKIND_COCLASS/0002-oleaut32-Pass-a-HREFTYPE-to-get_iface_guid.patch b/patches/oleaut32-TKIND_COCLASS/0002-oleaut32-Pass-a-HREFTYPE-to-get_iface_guid.patch new file mode 100644 index 00000000..ccbe7d55 --- /dev/null +++ b/patches/oleaut32-TKIND_COCLASS/0002-oleaut32-Pass-a-HREFTYPE-to-get_iface_guid.patch @@ -0,0 +1,53 @@ +From a384e6c403791a448378244dd10773f85fea0822 Mon Sep 17 00:00:00 2001 +From: Sebastian Lackner +Date: Sat, 14 Nov 2015 23:36:25 +0100 +Subject: oleaut32: Pass a HREFTYPE to get_iface_guid. + +--- + dlls/oleaut32/typelib.c | 11 +++++++---- + 1 file changed, 7 insertions(+), 4 deletions(-) + +diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c +index 0891098..deb898a 100644 +--- a/dlls/oleaut32/typelib.c ++++ b/dlls/oleaut32/typelib.c +@@ -6612,13 +6612,13 @@ static HRESULT typedescvt_to_variantvt(ITypeInfo *tinfo, const TYPEDESC *tdesc, + return hr; + } + +-static HRESULT get_iface_guid(ITypeInfo *tinfo, const TYPEDESC *tdesc, GUID *guid) ++static HRESULT get_iface_guid(ITypeInfo *tinfo, HREFTYPE href, GUID *guid) + { + ITypeInfo *tinfo2; + TYPEATTR *tattr; + HRESULT hres; + +- hres = ITypeInfo_GetRefTypeInfo(tinfo, tdesc->u.hreftype, &tinfo2); ++ hres = ITypeInfo_GetRefTypeInfo(tinfo, href, &tinfo2); + if(FAILED(hres)) + return hres; + +@@ -6630,7 +6630,7 @@ static HRESULT get_iface_guid(ITypeInfo *tinfo, const TYPEDESC *tdesc, GUID *gui + + switch(tattr->typekind) { + case TKIND_ALIAS: +- hres = get_iface_guid(tinfo2, &tattr->tdescAlias, guid); ++ hres = get_iface_guid(tinfo2, tattr->tdescAlias.u.hreftype, guid); + break; + + case TKIND_INTERFACE: +@@ -7156,7 +7156,10 @@ static HRESULT WINAPI ITypeInfo_fnInvoke( + IUnknown *userdefined_iface; + GUID guid; + +- hres = get_iface_guid((ITypeInfo*)iface, tdesc->vt == VT_PTR ? tdesc->u.lptdesc : tdesc, &guid); ++ if (tdesc->vt == VT_PTR) ++ tdesc = tdesc->u.lptdesc; ++ ++ hres = get_iface_guid((ITypeInfo*)iface, tdesc->u.hreftype, &guid); + if(FAILED(hres)) + break; + +-- +2.6.2 + diff --git a/patches/oleaut32-TKIND_COCLASS/0003-oleaut32-Implement-ITypeInfo_fnInvoke-for-TKIND_COCL.patch b/patches/oleaut32-TKIND_COCLASS/0003-oleaut32-Implement-ITypeInfo_fnInvoke-for-TKIND_COCL.patch new file mode 100644 index 00000000..edf777bb --- /dev/null +++ b/patches/oleaut32-TKIND_COCLASS/0003-oleaut32-Implement-ITypeInfo_fnInvoke-for-TKIND_COCL.patch @@ -0,0 +1,53 @@ +From 1bb32d84f5ac99211790aa596c995cb0b1a6c88f Mon Sep 17 00:00:00 2001 +From: Sebastian Lackner +Date: Sat, 14 Nov 2015 23:45:18 +0100 +Subject: oleaut32: Implement ITypeInfo_fnInvoke for TKIND_COCLASS in + arguments. + +--- + dlls/oleaut32/tests/tmarshal.c | 2 +- + dlls/oleaut32/typelib.c | 15 +++++++++++++++ + 2 files changed, 16 insertions(+), 1 deletion(-) + +diff --git a/dlls/oleaut32/tests/tmarshal.c b/dlls/oleaut32/tests/tmarshal.c +index 96399cc..758b85f 100644 +--- a/dlls/oleaut32/tests/tmarshal.c ++++ b/dlls/oleaut32/tests/tmarshal.c +@@ -1514,7 +1514,7 @@ static void test_typelibmarshal(void) + dispparams.rgvarg = vararg; + VariantInit(&varresult); + hr = IDispatch_Invoke(pDispatch, DISPID_TM_COCLASS, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_METHOD, &dispparams, &varresult, &excepinfo, NULL); +- todo_wine ok_ole_success(hr, IDispatch_Invoke); ++ ok_ole_success(hr, IDispatch_Invoke); + ok(excepinfo.wCode == 0x0 && excepinfo.scode == S_OK, + "EXCEPINFO differs from expected: wCode = 0x%x, scode = 0x%08x\n", + excepinfo.wCode, excepinfo.scode); +diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c +index deb898a..1cfdd7b 100644 +--- a/dlls/oleaut32/typelib.c ++++ b/dlls/oleaut32/typelib.c +@@ -6638,6 +6638,21 @@ static HRESULT get_iface_guid(ITypeInfo *tinfo, HREFTYPE href, GUID *guid) + *guid = tattr->guid; + break; + ++ case TKIND_COCLASS: { ++ unsigned int i; ++ int type_flags; ++ ++ for(i = 0; i < tattr->cImplTypes; i++) ++ if(SUCCEEDED(ITypeInfo_GetImplTypeFlags(tinfo2, i, &type_flags)) && ++ type_flags == (IMPLTYPEFLAG_FSOURCE|IMPLTYPEFLAG_FDEFAULT)) break; ++ ++ if(i < tattr->cImplTypes) { ++ hres = ITypeInfo_GetRefTypeOfImplType(tinfo2, i, &href); ++ if(SUCCEEDED(hres)) hres = get_iface_guid(tinfo2, href, guid); ++ } else hres = E_UNEXPECTED; ++ break; ++ } ++ + default: + ERR("Unexpected typekind %d\n", tattr->typekind); + hres = E_UNEXPECTED; +-- +2.6.2 + diff --git a/patches/oleaut32-TKIND_COCLASS/0004-oleaut32-Handle-TKIND_COCLASS-in-proxy-stub-marshall.patch b/patches/oleaut32-TKIND_COCLASS/0004-oleaut32-Handle-TKIND_COCLASS-in-proxy-stub-marshall.patch new file mode 100644 index 00000000..a7b22255 --- /dev/null +++ b/patches/oleaut32-TKIND_COCLASS/0004-oleaut32-Handle-TKIND_COCLASS-in-proxy-stub-marshall.patch @@ -0,0 +1,127 @@ +From 3c6e50c54130738fadbb4b7e1a05a5a0c9c9b538 Mon Sep 17 00:00:00 2001 +From: Sebastian Lackner +Date: Sun, 15 Nov 2015 00:39:08 +0100 +Subject: oleaut32: Handle TKIND_COCLASS in proxy/stub marshalling. + +Based on a patch by Jan T. Ohlsen. +--- + dlls/oleaut32/tmarshal.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++-- + 1 file changed, 66 insertions(+), 2 deletions(-) + +diff --git a/dlls/oleaut32/tmarshal.c b/dlls/oleaut32/tmarshal.c +index f4ce311..0211387 100644 +--- a/dlls/oleaut32/tmarshal.c ++++ b/dlls/oleaut32/tmarshal.c +@@ -851,7 +851,9 @@ serialize_param( + return hres; + } + ITypeInfo_GetTypeAttr(tinfo2,&tattr); +- derefhere = (tattr->typekind != TKIND_DISPATCH && tattr->typekind != TKIND_INTERFACE); ++ derefhere = (tattr->typekind != TKIND_DISPATCH && ++ tattr->typekind != TKIND_INTERFACE && ++ tattr->typekind != TKIND_COCLASS); + } + break; + case TKIND_ENUM: /* confirmed */ +@@ -859,6 +861,7 @@ serialize_param( + break; + case TKIND_DISPATCH: /* will be done in VT_USERDEFINED case */ + case TKIND_INTERFACE: /* will be done in VT_USERDEFINED case */ ++ case TKIND_COCLASS: /* will be done in VT_USERDEFINED case */ + derefhere=FALSE; + break; + default: +@@ -920,6 +923,36 @@ serialize_param( + if (dealloc) + IUnknown_Release((LPUNKNOWN)arg); + break; ++ case TKIND_COCLASS: { ++ GUID iid = tattr->guid; ++ unsigned int i; ++ int type_flags; ++ ++ for(i = 0; i < tattr->cImplTypes; i++) { ++ if(SUCCEEDED(ITypeInfo_GetImplTypeFlags(tinfo2, i, &type_flags)) && ++ type_flags == (IMPLTYPEFLAG_FSOURCE|IMPLTYPEFLAG_FDEFAULT)) { ++ ITypeInfo *tinfo3; ++ TYPEATTR *tattr2; ++ HREFTYPE href; ++ if(FAILED(ITypeInfo_GetRefTypeOfImplType(tinfo2, i, &href))) ++ break; ++ if(FAILED(ITypeInfo_GetRefTypeInfo(tinfo2, href, &tinfo3))) ++ break; ++ if(SUCCEEDED(ITypeInfo_GetTypeAttr(tinfo3, &tattr2))) { ++ iid = tattr2->guid; ++ ITypeInfo_ReleaseTypeAttr(tinfo3, tattr2); ++ } ++ ITypeInfo_Release(tinfo3); ++ break; ++ } ++ } ++ ++ if(writeit) ++ hres=_marshal_interface(buf, &iid, (LPUNKNOWN)arg); ++ if(dealloc) ++ IUnknown_Release((LPUNKNOWN)arg); ++ break; ++ } + case TKIND_RECORD: { + int i; + if (debugout) TRACE_(olerelay)("{"); +@@ -1129,7 +1162,9 @@ deserialize_param( + return hres; + } + ITypeInfo_GetTypeAttr(tinfo2,&tattr); +- derefhere = (tattr->typekind != TKIND_DISPATCH && tattr->typekind != TKIND_INTERFACE); ++ derefhere = (tattr->typekind != TKIND_DISPATCH && ++ tattr->typekind != TKIND_INTERFACE && ++ tattr->typekind != TKIND_COCLASS); + } + break; + case TKIND_ENUM: /* confirmed */ +@@ -1137,6 +1172,7 @@ deserialize_param( + break; + case TKIND_DISPATCH: /* will be done in VT_USERDEFINED case */ + case TKIND_INTERFACE: /* will be done in VT_USERDEFINED case */ ++ case TKIND_COCLASS: /* will be done in VT_USERDEFINED case */ + derefhere=FALSE; + break; + default: +@@ -1211,6 +1247,34 @@ deserialize_param( + if (readit) + hres = _unmarshal_interface(buf,&(tattr->guid),(LPUNKNOWN*)arg); + break; ++ case TKIND_COCLASS: { ++ GUID iid = tattr->guid; ++ unsigned int i; ++ int type_flags; ++ ++ for(i = 0; i < tattr->cImplTypes; i++) { ++ if(SUCCEEDED(ITypeInfo_GetImplTypeFlags(tinfo2, i, &type_flags)) && ++ type_flags == (IMPLTYPEFLAG_FSOURCE|IMPLTYPEFLAG_FDEFAULT)) { ++ ITypeInfo *tinfo3; ++ TYPEATTR *tattr2; ++ HREFTYPE href; ++ if(FAILED(ITypeInfo_GetRefTypeOfImplType(tinfo2, i, &href))) ++ break; ++ if(FAILED(ITypeInfo_GetRefTypeInfo(tinfo2, href, &tinfo3))) ++ break; ++ if(SUCCEEDED(ITypeInfo_GetTypeAttr(tinfo3, &tattr2))) { ++ iid = tattr2->guid; ++ ITypeInfo_ReleaseTypeAttr(tinfo3, tattr2); ++ } ++ ITypeInfo_Release(tinfo3); ++ break; ++ } ++ } ++ ++ if(readit) ++ hres = _unmarshal_interface(buf, &iid, (LPUNKNOWN*)arg); ++ break; ++ } + case TKIND_RECORD: { + int i; + +-- +2.6.2 + diff --git a/patches/oleaut32-TKIND_COCLASS/0005-oleaut32-tests-Add-a-test-for-TKIND_COCLASS-in-proxy.patch b/patches/oleaut32-TKIND_COCLASS/0005-oleaut32-tests-Add-a-test-for-TKIND_COCLASS-in-proxy.patch new file mode 100644 index 00000000..11ce96aa --- /dev/null +++ b/patches/oleaut32-TKIND_COCLASS/0005-oleaut32-tests-Add-a-test-for-TKIND_COCLASS-in-proxy.patch @@ -0,0 +1,28 @@ +From 5f9c268b7e4022d3dd9cf92f6ab04f1c825d2bfa Mon Sep 17 00:00:00 2001 +From: Sebastian Lackner +Date: Sun, 15 Nov 2015 00:40:07 +0100 +Subject: oleaut32/tests: Add a test for TKIND_COCLASS in proxy/stub + marshalling. + +--- + dlls/oleaut32/tests/tmarshal.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/dlls/oleaut32/tests/tmarshal.c b/dlls/oleaut32/tests/tmarshal.c +index 758b85f..c28ef8b 100644 +--- a/dlls/oleaut32/tests/tmarshal.c ++++ b/dlls/oleaut32/tests/tmarshal.c +@@ -1519,6 +1519,10 @@ static void test_typelibmarshal(void) + "EXCEPINFO differs from expected: wCode = 0x%x, scode = 0x%08x\n", + excepinfo.wCode, excepinfo.scode); + VariantClear(&varresult); ++ ++ /* call CoClass (direct) */ ++ hr = IWidget_Coclass(pWidget, (void *)V_DISPATCH(&vararg[0])); ++ ok_ole_success(hr, IWidget_Coclass); + VariantClear(&vararg[0]); + + /* call Value with a VT_VARIANT|VT_BYREF type */ +-- +2.6.2 + diff --git a/patches/oleaut32-TKIND_COCLASS/definition b/patches/oleaut32-TKIND_COCLASS/definition new file mode 100644 index 00000000..5e5d3581 --- /dev/null +++ b/patches/oleaut32-TKIND_COCLASS/definition @@ -0,0 +1 @@ +Fixes: [19016] Implement marshalling for TKIND_COCLASS diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index 0855e6e7..3bea117b 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -226,6 +226,7 @@ patch_enable_all () enable_nvcuda_CUDA_Support="$1" enable_nvcuvid_CUDA_Video_Support="$1" enable_nvencodeapi_Video_Encoder="$1" + enable_oleaut32_TKIND_COCLASS="$1" enable_openal32_EFX_Extension="$1" enable_opengl32_Revert_Disable_Ext="$1" enable_quartz_MediaSeeking_Positions="$1" @@ -783,6 +784,9 @@ patch_enable () nvencodeapi-Video_Encoder) enable_nvencodeapi_Video_Encoder="$2" ;; + oleaut32-TKIND_COCLASS) + enable_oleaut32_TKIND_COCLASS="$2" + ;; openal32-EFX_Extension) enable_openal32_EFX_Extension="$2" ;; @@ -4663,6 +4667,30 @@ if test "$enable_nvencodeapi_Video_Encoder" -eq 1; then ) >> "$patchlist" fi +# Patchset oleaut32-TKIND_COCLASS +# | +# | This patchset fixes the following Wine bugs: +# | * [#19016] Implement marshalling for TKIND_COCLASS +# | +# | Modified files: +# | * dlls/oleaut32/tests/tmarshal.c, dlls/oleaut32/tests/tmarshal.idl, dlls/oleaut32/tests/tmarshal_dispids.h, +# | dlls/oleaut32/tmarshal.c, dlls/oleaut32/typelib.c +# | +if test "$enable_oleaut32_TKIND_COCLASS" -eq 1; then + patch_apply oleaut32-TKIND_COCLASS/0001-oleaut32-tests-Add-test-for-calling-method-with-cocl.patch + patch_apply oleaut32-TKIND_COCLASS/0002-oleaut32-Pass-a-HREFTYPE-to-get_iface_guid.patch + patch_apply oleaut32-TKIND_COCLASS/0003-oleaut32-Implement-ITypeInfo_fnInvoke-for-TKIND_COCL.patch + patch_apply oleaut32-TKIND_COCLASS/0004-oleaut32-Handle-TKIND_COCLASS-in-proxy-stub-marshall.patch + patch_apply oleaut32-TKIND_COCLASS/0005-oleaut32-tests-Add-a-test-for-TKIND_COCLASS-in-proxy.patch + ( + echo '+ { "Sebastian Lackner", "oleaut32/tests: Add test for calling method with coclass argument.", 1 },'; + echo '+ { "Sebastian Lackner", "oleaut32: Pass a HREFTYPE to get_iface_guid.", 1 },'; + echo '+ { "Sebastian Lackner", "oleaut32: Implement ITypeInfo_fnInvoke for TKIND_COCLASS in arguments.", 1 },'; + echo '+ { "Sebastian Lackner", "oleaut32: Handle TKIND_COCLASS in proxy/stub marshalling.", 1 },'; + echo '+ { "Sebastian Lackner", "oleaut32/tests: Add a test for TKIND_COCLASS in proxy/stub marshalling.", 1 },'; + ) >> "$patchlist" +fi + # Patchset openal32-EFX_Extension # | # | This patchset fixes the following Wine bugs: