[1/4] widl: Add special handling for pointers to arrays in the typelib generator.

Dmitry Timoshkov dmitry at baikal.ru
Thu Sep 10 02:16:25 CDT 2015


This patch makes the generated type description for pointers to arrays
match what midl.exe generates, and fixes test failures in the typelib
marshalling tests.

Unfortunately testbot doesn't rebuild widl even when the widl changes are
sent together with the test, and uses old (broken) widl, which leads to
testbot failures.

Here is a testbot job with all the patches in this series combined and
crosscompiled under Linux: https://testbot.winehq.org/JobDetails.pl?Key=16609
In particular look for traces of successful VarArg_Ref_Run() calls in the VM
logs.
---
 tools/widl/write_msft.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/tools/widl/write_msft.c b/tools/widl/write_msft.c
index 88f1546..26600e4 100644
--- a/tools/widl/write_msft.c
+++ b/tools/widl/write_msft.c
@@ -1128,9 +1128,12 @@ static int encode_var(
 
 	if (typeoffset == typelib->typelib_segdir[MSFT_SEG_TYPEDESC].length) {
 	    int mix_field;
-	    
+
 	    if (target_type & 0x80000000) {
 		mix_field = ((target_type >> 16) & 0x3fff) | VT_BYREF;
+	    } else if (is_array(ref)) {
+		type_t *element_type = type_alias_get_aliasee(type_array_get_element(ref));
+		mix_field = get_type_vt(element_type) | VT_ARRAY | VT_BYREF;
 	    } else {
 		typedata = (void *)&typelib->typelib_segment_data[MSFT_SEG_TYPEDESC][target_type];
 		mix_field = ((typedata[0] >> 16) == 0x7fff)? 0x7fff: 0x7ffe;
-- 
2.4.8




More information about the wine-patches mailing list