widl: Don't rely on type_memsize to return 0 for all conformant arrays.

Dan Hipschman dsh at linux.ucla.edu
Mon Nov 5 19:23:26 CST 2007


This fixes a bug needed to get dcom_p.c working.

---
 dlls/rpcrt4/tests/server.c   |   12 ++++++++++++
 dlls/rpcrt4/tests/server.idl |    1 +
 tools/widl/typegen.c         |    4 +---
 3 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/dlls/rpcrt4/tests/server.c b/dlls/rpcrt4/tests/server.c
index b01967d..ad0dd73 100644
--- a/dlls/rpcrt4/tests/server.c
+++ b/dlls/rpcrt4/tests/server.c
@@ -487,6 +487,16 @@ s_sum_pcarr2(int n, int **pa)
   return s_sum_conf_array(*pa, n);
 }
 
+int
+s_sum_L1_norms(int n, vector_t *vs)
+{
+  int i;
+  int sum = 0;
+  for (i = 0; i < n; ++i)
+    sum += abs(vs[i].x) + abs(vs[i].y) + abs(vs[i].z);
+  return sum;
+}
+
 void
 s_stop(void)
 {
@@ -983,6 +993,8 @@ array_tests(void)
   make_pyramid_doub_carr(4, &dc);
   ok(check_pyramid_doub_carr(dc), "RPC make_pyramid_doub_carr\n");
   free_pyramid_doub_carr(dc);
+
+  ok(sum_L1_norms(2, vs) == 21, "RPC sum_L1_norms\n");
 }
 
 static void
diff --git a/dlls/rpcrt4/tests/server.idl b/dlls/rpcrt4/tests/server.idl
index c566b8f..c054196 100644
--- a/dlls/rpcrt4/tests/server.idl
+++ b/dlls/rpcrt4/tests/server.idl
@@ -298,6 +298,7 @@ cpp_quote("#endif")
   void get_name([in,out] name_t *name);
 
   int sum_pcarr2(int n, [size_is(, n)] int **pa);
+  int sum_L1_norms(int n, [size_is(n)] vector_t *vs);
 
   void stop(void);
 }
diff --git a/tools/widl/typegen.c b/tools/widl/typegen.c
index 2cb8dc9..bb75a0a 100644
--- a/tools/widl/typegen.c
+++ b/tools/widl/typegen.c
@@ -1535,9 +1535,7 @@ static size_t write_array_tfs(FILE *file, const attr_list_t *attrs, type_t *type
         has_pointer = TRUE;
 
     align = 0;
-    size = type_memsize(type, &align);
-    if (size == 0)              /* conformant array */
-        size = type_memsize(type->ref, &align);
+    size = type_memsize((is_conformant_array(type) ? type->ref : type), &align);
 
     start_offset = *typestring_offset;
     update_tfsoff(type, start_offset, file);



More information about the wine-patches mailing list